diff --git a/1.4/Assemblies/0Harmony.dll b/1.4/Assemblies/0Harmony.dll new file mode 100644 index 0000000..86fc5eb Binary files /dev/null and b/1.4/Assemblies/0Harmony.dll differ diff --git a/1.4/Assemblies/0MultiplayerAPI.dll b/1.4/Assemblies/0MultiplayerAPI.dll new file mode 100644 index 0000000..c2391ea Binary files /dev/null and b/1.4/Assemblies/0MultiplayerAPI.dll differ diff --git a/1.4/Assemblies/GiddyUpCore.dll b/1.4/Assemblies/GiddyUpCore.dll new file mode 100644 index 0000000..b0f36a0 Binary files /dev/null and b/1.4/Assemblies/GiddyUpCore.dll differ diff --git a/1.4/Languages/ChineseSimplified/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/ChineseSimplified/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..4ef7b78 --- /dev/null +++ b/1.4/Languages/ChineseSimplified/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,7 @@ + + + + 骑乘战斗 驯兽技能影响 + 乘骑动物时驯兽技能会影响骑乘效果,若低于驯兽所需的等级,每低一级会降低2%的移动速度和0.5%的射击精度。如果高于所需的等级,每级会获得等量的增益,这些数值可以在mod选项中设置。 + + \ No newline at end of file diff --git a/1.4/Languages/ChineseSimplified/DefInjected/JobDef/Jobs.xml b/1.4/Languages/ChineseSimplified/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..554ee99 --- /dev/null +++ b/1.4/Languages/ChineseSimplified/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,8 @@ + + + + 乘骑动物 + 被人乘骑 + 从动物身上下来中 + + \ No newline at end of file diff --git a/1.4/Languages/ChineseSimplified/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/ChineseSimplified/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..2ecb39f --- /dev/null +++ b/1.4/Languages/ChineseSimplified/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,31 @@ + + + + 每级驯兽技能所影响的射击精度(%) + 骑乘者技能低于所需等级时的惩罚,或高于所需等级时的奖励 + 每级驯兽技能将影响多少移动速度(%) + 如果骑乘者的驯兽等级低于驯服这种动物所需要等级,每级将会受到这么多的减益,高于时则获得这么多的增益。 + 射击精度惩罚 + 当人骑乘时射击精度受到的惩罚 + 动物设定 + 图像设定 + 配置选项 + 体型过滤器 + 根据体型来选择可骑乘的动物 + 选择可骑乘的动物 + 使用上面的体型过滤器根据体型大小来过滤,或者通过单击来更改 + 设置图层 + 哪些动物的贴图在人之前,哪些在人之后,大多数动物在人之后视觉效果更好,但有些动物(特别是那些长脖子或者长角的)在人前效果更好 + 可乘骑 + 不可乘骑 + 动物在人之前 + 动物在人之后 + + 不能骑乘,这个动物在设置中没有被设定为可骑乘动物 + 不能骑乘,这个动物正在做其他事 + 不能骑乘,这个动物还没有成熟 + 不能骑乘,动物没有训练“顺从” + 乘骑动物 + 从动物身上下来 + + diff --git a/1.4/Languages/ChineseTraditional/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/ChineseTraditional/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..e024160 --- /dev/null +++ b/1.4/Languages/ChineseTraditional/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,11 @@ + + + + 騎乘戰鬥 馴獸技能影響 + 乘騎動物時馴獸技能會影響騎乘效果,若低於馴獸所需的等級,每低一級會降低2%的移動速度和0.5%的射擊精度。如果高於所需的等級,每級會獲得等量的增益,這些數值可以在mod選項中設置。 + + + + + + \ No newline at end of file diff --git a/1.4/Languages/ChineseTraditional/DefInjected/JobDef/Jobs.xml b/1.4/Languages/ChineseTraditional/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..d2e742a --- /dev/null +++ b/1.4/Languages/ChineseTraditional/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,9 @@ + + + + 乘騎動物 + 被人乘騎 + 從坐騎上下來中 + + + \ No newline at end of file diff --git a/1.4/Languages/ChineseTraditional/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/ChineseTraditional/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..576061b --- /dev/null +++ b/1.4/Languages/ChineseTraditional/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,40 @@ + + + + Giddy up! + 坐騎移動速度(覆蓋角色移動速度) + 乘員操控技巧乘數 + 騎手使喚動物技巧 + 動物技能要求 + 高於技能要求的水平 + 等級速度影響 (在mod設置中配置) + 駕駛動物類型的乘數 + + 馴獸等級-射擊精度(%) + 當騎乘者技能低於所需等級時會有減益,或高於級時會有增益 + 馴獸等級-移動速度(%) + 如果騎乘者的等級低於馴服這種動物所需等級,每級將會受到這麼多的減益,高於時則獲得這麼多的增益。 + 射擊精度減益 + 當人騎乘時,射擊精度受到的減益 + 動物設定 + 圖像設定 + 配置選項 + 體型過濾器 + 根據體型來選擇可騎乘的動物 + 選擇可騎乘的動物 + 使用上面的體型過濾器根據體型大小來過濾,或者通過單擊來更改 + 設置圖層 + 哪些動物的貼圖在人之前,哪些在人之後,大多數動物在人之後視覺效果更好,但有些動物(特別是那些長脖子或者長角的)在人前效果更好 + 可乘騎 + 不可乘騎 + 動物在人之前 + 動物在人之後 + + 不能騎乘,這個動物在設置中沒有被設定為可騎乘動物 + 不能騎乘,這個動物正在做其他事 + 不能騎乘,這個動物不是成年 + 不能騎乘,動物沒有接受“服從”訓練 + 乘騎動物 + 從動物身上下來 + + diff --git a/1.4/Languages/English/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/English/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..011582f --- /dev/null +++ b/1.4/Languages/English/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,41 @@ + + + + Giddy up! + Mount move speed (overrides pawn move speed) + Multiplier for handling skill of rider + Animal handling skill of rider + Skill requirement for animal + Levels above skill requirement + Speed impact per level (configured in mod settings) + Multiplier for mount type + + Accuracy impact(%) per animal handling level + If the animal handling skill of a pawn is below the level that would be needed to tame the animal, this is a per level-penalty. Otherwise it is a per-level bonus. + Movement impact(%) per animal handling level + If the animal handling skill of a pawn is below the level that would be needed to tame the animal, this is a per level-penalty. Otherwise it is a per-level bonus. + Accuracy penalty + Accuracy penalty when pawns are mounted + Mountable animals.. + Drawing options.. + Configuration options + Filter by body size + Filter mountable animals by body size + Select mountable animals + Use the filter above to filter by body size, and click tiles to make exceptions + Set draw priority + Configure which animals should be drawn in front of pawns, and which ones should be drawn behind pawns. + Most animals should be drawn behind pawns, but some (especially animals with long necks or horns) look better when drawn in front of pawns + Mountable + Not Mountable + Animal in front + Animal behind pawn + + Cannot mount, animal not allowed in mod options + Cannot mount, animal busy + Cannot mount, animal not fully grown + Cannot mount, animal needs to be tamed + Cannot mount, animal is roped + Mount + Dismount + diff --git a/1.4/Languages/French/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/French/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..276d7ad --- /dev/null +++ b/1.4/Languages/French/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,8 @@ + + + + Giddy-up! : Compétence "Animaux" + La compétence "Animaux" d'un colon influe sur son efficacité avec les montures. Pour chaque niveau où cette compétence est inférieure au niveau requis pour apprivoiser l'animal, une pénalité de mouvement (2%) et de précision (0,5%) est appliquée. Si le niveau de compétence est supérieur, un bonus égal est appliqué. Les bonus/pénalités par niveau peuvent être configurés dans les paramètres du mod. + + + \ No newline at end of file diff --git a/1.4/Languages/French/DefInjected/JobDef/Jobs.xml b/1.4/Languages/French/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..e072bc5 --- /dev/null +++ b/1.4/Languages/French/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,6 @@ + + + chevauche + est chevauché + descend + \ No newline at end of file diff --git a/1.4/Languages/French/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/French/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..969bf94 --- /dev/null +++ b/1.4/Languages/French/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,42 @@ + + + + Giddy up! + Vitesse de déplacement de la monture (remplace la vitesse de déplacement du personnage) + Multiplicateur pour la maniabilité du cavalier + Compétence de dressage du cavalier + Compétence requise pour l'animal + Niveaux supérieurs aux compétences requises + Impact de la vitesse par niveau (configuré dans les paramètres du mod) + Multiplicateur pour le type de monture + + Incidence sur la précision (%) par niveau dans la compétence "Animaux" + Si la compétence "Animaux" d'un colon est inférieure au niveau nécessaire pour apprivoiser l'animal, une pénalité par niveau sera appliquée. Sinon, un bonus par niveau sera appliqué. + Incidence sur la vitesse (%) par niveau dans "Animaux" + Si la valeur de la compétence "Animaux" d'un colon est inférieure au niveau nécessaire pour apprivoiser l'animal, une pénalité par niveau sera appliquée. Sinon, un bonus par niveau sera appliqué. + Pénalité de précision + Pénalité de précision lorsque des personnages chevauchent + + Animaux montables + Options d'affichage + Options de configuration + Filtrer par taille du corps + Filtrer les animaux montables par taille + Sélectionner les animaux montables + Utilisez le filtre ci-dessus pour filtrer par taille de corps, et cliquez sur les cases pour faire des exceptions. + Définir la priorité d'affichage + Configurez les animaux qui doivent être affichés devant les colons, et ceux qui doivent être affichés derrière les colons. La plupart des animaux devraient être dessinés derrière les colons, mais certains (surtout les animaux à long cou ou à cornes) ont un meilleur rendu lorsqu'ils sont affichés devant les pions. + Montable + Non Montable + Animal devant + Animal derrière le colon + + Impossible de chevaucher, l'animal est interdit dans les options du mod. + Impossible à chevaucher, l'animal est occupé + Ne peut pas chevaucherr, l'animal n'est pas adulte + Ne peut pas chevaucher, l'animal a besoin d'être dressé + Ne peut pas chevaucher, l'animal est attaché + Chevaucher + Descendre + + diff --git a/1.4/Languages/German/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/German/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..cd1ff27 --- /dev/null +++ b/1.4/Languages/German/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,7 @@ + + + + Giddy-up!: Fähigkeit Tierpflege + Die Fähigkeit Tierpflege bestimmt, wie effizient ein Kolonist sein Reittier benutzen kann. Pro Stufe, die diese Fähigkeit über der benötigten Stufe ist ein Tier zu zähmen, bekommt er einen Bewegegungs-(2%) und Genauigkeits-(0.5%)Bonus pro Stufe darüber. Ansonsten das Gleiche als Malus pro Stufe darunter. Die Boni/Mali pro Stufe können in den Mod-Einstellungen angepasst werden. + + diff --git a/1.4/Languages/German/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml b/1.4/Languages/German/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml new file mode 100644 index 0000000..5d4aeb9 --- /dev/null +++ b/1.4/Languages/German/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml @@ -0,0 +1,10 @@ + + + + Eine neue Mod aus der Giddy-up! Reihe wurde veröffentlicht! + + Ich bin stolz euch Giddy-up! Caravan zu präsentieren! Mit dieser Mod könnt ihr eure Kolonisten in weit entfernte Länder auf Elefanten, Muffalos, Lamas und anderen Tieren reisen lassen. Egal ob aus dem Originalspiel oder aus Mods! + Zu finden im Steam Workshop, oder auf der Mod-Seite im Ludeon Forum. + + + diff --git a/1.4/Languages/German/DefInjected/JobDef/Jobs.xml b/1.4/Languages/German/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..e8e4766 --- /dev/null +++ b/1.4/Languages/German/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,6 @@ + + + Steigt auf + Beritten + Steigt ab + diff --git a/1.4/Languages/German/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/German/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..1ff701e --- /dev/null +++ b/1.4/Languages/German/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,32 @@ + + + + Einfluss auf Genauigkeit(%) pro Stufe in Tierpflege + Wenn die Fähigkeit Tierpflege unter der benötigten Stufe ist, um ein Tier zu Zähmen, ist dies ein Malus pro Stufe. Ansonsten ein Bonus pro Stufe. + Einfluss auf die Bewegung(%) pro Stufe in der Fähigkeit Tierpflege + Wenn die Fähigkeit Tierpflege bei dem Kolonisten niedriger ist, als benötigt, um das Tier zu Zähmen, ist das ein Malus pro Stufe. Ansonsten ein Bonus pro Stufe. + Genauigkeitsmalus + Genauigkeitsmalus für berittene Kolonisten + + Reitbare Tiere.. + Zeichen-Einstellungen.. + Einstellungsauswahl + Nach Körpergröße filtern + Reitbare Tiere nach Körpergröße filtern + Reitbare Tiere auswählen + Benutze den Filter für die Körpergröße und klicke die Felder, um Ausnahmen festzulegen + Setze Zeichenpriorität + Stelle ein, welche Tiere vor deinen Kolonisten gezeichnet werden sollen und welche dahinter. + Die meisten Tiere sollten hinter den Kolonisten gezeichnet werden, aber manche (besonders Tiere mit langem Hals/ Hörnern) sehen besser davor aus. + Reitbar + Nicht reitbar + Tier im Vordergrund + Tier im Hintergrund + + Aufsteigen nicht möglich, Tier in Mod-Einstellungen verboten + Aufsteigen nicht möglich, Tier beschäftigt + Aufsteigen nicht möglich, Tier nicht ausgewachsen + Aufsteigen nicht möglich, Tier nicht 'Gehorsam' + Aufsteigen + Absteigen + diff --git a/1.4/Languages/Japanese/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/Japanese/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..9d461e4 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,8 @@ + + + + Giddy-up!: 動物の取り扱いスキル + ポーンの持つ動物取り扱いスキルは、騎乗がどのくらい効果的であるかに影響します。動物スキルが動物を飼いならすのに必要なレベルを下回っているスキルレベルでは、不足している各レベルごとに移動(2%)と命中精度(0.5%)のペナルティが適用されます。動物スキルのレベルが動物を飼いならすのに必要なレベルを上回っている場合、ペナルティと同じボーナス値が適用されます。この動物スキルレベルごとのボーナス/ペナルティは、mod設定で設定できます。 + + + diff --git a/1.4/Languages/Japanese/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml b/1.4/Languages/Japanese/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml new file mode 100644 index 0000000..39ae5f8 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml @@ -0,0 +1,29 @@ + + + + Giddy-up Core + \nGiddy-up!MechanoidがRimworldバージョン1.1 (拡張を含む) をサポートするように更新されました。今回のアップデートのクレジットは、このアップデートの大部分を担当しているSarg=Bjornsonに送られます。このバージョンはRimworld 1.0もサポートしているので、まだそのバージョンを使っている人は心配する必要はありません。\n\nGiddy-up!MechanoidsはWhat the Hackが更新された時点で\n更新されます (しばらく時間がかかります) 。\n\nこのアップデートには、次の改善と修正が含まれています。\n・バニラの動物用にオーバーレイを追加しました。これらのオーバーレイは、爪が動物の頭や角などのものと重なるのを防ぎます。\n・動物を乗るときに、ポーンの名前が頭に重ならないようにしました。\n・騎乗の仕事の待機で発生することがあったnull参照エラーが修正されました。\n・新しいHugsLibバージョンとの互換性追加。\n + + Giddy-up Core + \nGiddy-upは以下の変更を更新しました!\n\n・パフォーマンスが大幅に改善。ゲームはとてもスムーズに実行されます。\n 今後、Giddy-upが原因ではFPSにほとんど影響は出ません。\n・マルチプレイヤーModの組み込みとサポートが追加\n(クレジットはCody-Springに送られます)\n・許可されたエリアを変更するとポーンがスタックするという厄介な問題を修正\n・マップを離脱した後キャラバンが重量オーバーになる可能性があったGiddy-up Caravanの問題を修正\n この修正によりクレジットはokradonkeyに\n・ポーンの潜在的なインベントリ重量は、ワールドマップを旅する際に騎乗された動物が\n 運ぶことができる重量から差し引かれます。言い換えれば、ポーンが運んでいるものは、\n 騎乗している時、もう異次元空間に重量は消えません\n\n + + Giddy-up Core + \nGiddy-up!Mechanoids以外の全てのGiddy-up!modsがRimworldバージョン1.2 (1.0および1.1のマルチバージョンをサポート)をサポートするように更新されました。「What_the_Hack」のアップデートが完了すると、「Giddy-up!Mechanoids」がアップデートされます。楽しんでね!\nMod作者:Roolo\n\n + + Giddy-up Core + \nGiddy-upは以下の変更を更新しました:\n・パフォーマンスの向上(提供:Karim)\n・マルチプレイヤーMODのサポートを修正(提供:AriAlavia.k.aKIERKEGØRD)\n Giddy-upは、マルチプレイヤーModと完全に互換性がありますが、\n 以下の既知の(小規模な)問題があります。\n・arbiterとbattlemountsを同時に使用している場合、騎乗中に射撃すると\n 非同期が発生します\n・動物に乗っているNPCはホストPCと同期せず、クライアントPCだけと同期します\n(最終的には非同期化する)従って、NPCの騎乗は、デフォルトでマルチプレイヤー\n ユーザーの設定で自動的に無効化します\n\nこのアップデートのテスターに感謝\n・ubergarm\n・Diego75547\n・Poj\n\nMod作者:Roolo\n\n + + Giddy-up Core + \nGiddy-up!シリーズModは更新されてRimworldのversion1.3に対応しました。\nまず、更新作業中に多大な支援をしてくれたOglissに感謝します。\n\nこのアップデートには、次の変更が含まれています。\n・1.3互換性(もちろん)\n・新しい囲い場システムとの互換性。\n・ゲームをリロードするときに騎乗された状態が正しくロードされない問題を修正\n・Giddy-up_Ride_and_Roll:自動騎乗システムを改善し自動騎乗を即時実行\n・Giddy-up_Ride_and_Roll:別の派閥からレンタルされたポーンによる自動騎乗を無効化し、動物と一緒にマップから逃亡しなくなった\n・Giddy-up_Caravan:キャラバンの速度変更方法を変更しました。代わりにバニラシステムが使用されます。まだどの動物も設定することができます\nどのポーンも騎乗できるので、出入りするときにポーンに乗ります。ただし、これは必須ではありません。\n・Giddy-up_Caravan:Giddy-upで構成したものと一致するように、バニラの騎乗できる動物を変更しました。\n\n\n<color=orange><b>既知の問題</b></color>:Ride_and_rollは、動物がマップをうろうろする原因となる場合があります。私はこれを制限しようとしましたが、その発生は修正するのが難しいです。\n例えば、動物が睡眠不足の場合、その動物は勝手に眠りにつくでしょう。Giddy-upではポーンは睡眠不足の動物に騎乗できないため、動物はそのまま放置されます。\nこれらの問題をすべて修正するには、現在よりも時間がかかり、更新を停止したくありませんでした。このような問題に遭遇し、簡単な解決策があると感じた場合は、それを報告してください。\n\nご存知かもしれませんが、私はもうmodderとして活動していませんが、すべてのmodを存続させるつもりです。私が活動を停止した理由は、自分のゲーム<color=orange><b>Cursed Crew</b></color>に取り組んでいるためです。私の作品が気に入ったら、ぜひ確認してみてください!私が作成したすべてのmodのmodページにCursedCrewへのリンクがあります。\n\nアップデートをお楽しみください!\n\nMod作者:Roolo + + Giddy-up Core + \n\n +ペン(囲い場)がRide_and_Rollでどのように機能するかについては不満だったので、システムを改善するために少し時間がかかりました。\nこのアップデートには次の変更が含まれています:\n・修正:ペン(囲い場)への連れ回しオプションが常に表示されない\n・変更:襲撃者が騎乗から降りると、ペン(囲い場)への連れ回しジョブに自動的にキューに入れられます\n・変更:騎乗降り場が削除されました。その代わりに、ペンが同じ目的で使用されるようになりました。コロニー内で禁止されている騎乗ゾーンを使用して、\nポーンが建物に入るときに騎乗動物から簡単に降りられるように、\n戦略的にペンを配置することを強くお勧めします。\n\nご存知かもしれませんが、私はもうmodderとして活動していませんが、すべてのmodを存続させるつもりです。私が活動を停止した理由は、自分のゲーム<color=orange><b>Cursed Crew</b></color>に取り組んでいるためです。私の作品が気に入ったら、ぜひ確認してみてください!私が作成したすべてのmodのmodページにCursedCrewへのリンクがあります。\n\nアップデートをお楽しみください!\n\nMod作者:Roolo + + Giddy-up Core + 最新のアップデート後に有益なフィードバックを得たので、以下の変更/修正を実装しました。\nRide and roll:\n・変更:禁止されている騎乗エリアに入ると、ペン付近でない騎乗動物は近くのペンに移動します。\n・ポーンは、騎乗動物が取り残されないように、常に後続の騎乗動物への騎乗を優先します。\n・変更:騎乗動物がうろうろする状態のままにならないように、騎乗動物へ管理する仕事追加されました。\n・動物の子供は、生まれたときに親から誰(その親と同じ)によって騎乗可能かどうかを決定する設定を継承します。(ただし、哺乳類動物だけに限定して有効)\n\nご存知かもしれませんが、私はもうmodderとして活動していませんが、すべてのmodを存続させるつもりです。私が活動を停止した理由は、自分のゲーム<color=orange><b>Cursed Crew</b></color>に取り組んでいるためです。私の作品が気に入ったら、ぜひ確認してみてください!私が作成したすべてのmodのmodページにCursedCrewへのリンクがあります。\n\nアップデートをお楽しみください!\n\nMod作者:Roolo + + Giddy-up Core + \n以下の変更を実施しました。/修正:\nCore:\n・修正:「誰でも騎乗可能 」のチェックがない訓練不可能な動物.\nCaravan:\n・修正:動物たちがまだ、キャラバンで騎乗するのに服従訓練を必要としていた。\n\nRide and roll:\n・ペンに指定できない動物用に、騎乗降り場を追加しました。ペンが使えない動物は、目的地が禁止騎乗ゾーン内にある場合、最も近い騎乗降り場に移動します。騎乗降り場がない場合は、代わりに最も近いペンが騎乗降り場として使用されます。\nペンで指定できる動物は常に近くのペンに移動します。\n・修正:多くの状況で騎乗ゾーンが無視されるのを禁止します。\n・追加:自動騎乗するかどうかを決定する場合、仕事の目標の1つが、禁止騎乗ゾーン内にある場合はペナルティが適用されます。\nこれにより、動物が近くにいる場合に多くのばかげた経路計算問題を防止することが可能ですが、仕事の目標は禁止騎乗エリア内にあります。\n\nご存知かもしれませんが、私はもうmodderとして活動していませんが、すべてのmodを存続させるつもりです。私が活動を停止した理由は、自分のゲーム<color=orange><b>Cursed Crew</b></color>に取り組んでいるためです。私の作品が気に入ったら、ぜひ確認してみてください!私が作成したすべてのmodのmodページにCursedCrewへのリンクがあります。\n\nアップデートをお楽しみください!\n\nMod作者:Roolo + + \ No newline at end of file diff --git a/1.4/Languages/Japanese/DefInjected/JobDef/Jobs.xml b/1.4/Languages/Japanese/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..d646c44 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,6 @@ + + + 騎乗している + 騎乗済 + 動物から下りた + diff --git a/1.4/Languages/Japanese/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/Japanese/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..7474e98 --- /dev/null +++ b/1.4/Languages/Japanese/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,42 @@ + + + + Giddy up! + 騎乗移動速度(ポーンの移動速度を上書き) + 騎手の騎乗スキル係数 + 騎手の動物手なづけスキル + 動物スキルの条件 + 条件以上のスキルレベル + レベルの速度影響(Mod設定で変更) + 騎乗タイプの係数 + + 動物スキルのレベルによる命中率影響(%) + ポーンの動物スキルが、その動物を飼いならすのに必要なレベルよりも低い場合、これは足りない動物スキルレベルごとのペナルティです。それ必要スキル以上の場合はレベルごとのボーナスです。 + 動物スキルのレベルによる移動影響(%) + ポーンの動物スキルが、その動物を飼いならすのに必要なレベルよりも低い場合、これは足りない動物スキルレベルごとのペナルティです。それ必要スキル以上の場合はレベルごとのボーナスです。 + 命中精度ペナルティ + ポーンが騎乗時している際の命中精度低下ペナルティです。 + + 騎乗可能な動物.. + 表示オプション.. + 設定オプション + 身体の大きさでフィルタ + 身体の大きさで騎乗可能な動物をフィルタリングします。 + 騎乗可能な動物を選択 + 上記のフィルタを使用して身体の大きさでフィルタリングを行い、タイルをクリックして例外を作成します + 描画優先度を設定 + ポーンの前面に描画する動物と、ポーンの背後に描画する動物を設定します。\nほとんどの動物はポーンの背後に表示(描画)されるべきですが、何種類かの動物(特に長い首や角が付いた動物)は、ポーンの前面に表示(描画)された方が見やすくなります。 + 騎乗可能 + 騎乗不可 + 動物を前面に表示 + 動物を背後に表示 + + 騎乗できません、この動物はmodオプションで許可されていません + 騎乗できません、この動物は忙しいようです + 騎乗できません、この動物は大人ではありません + 騎乗できません、この動物は服従訓練を受けていません + 騎乗できません、この動物は誘導されています + 騎乗する + 降りる + + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/Korean/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..55249c1 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,8 @@ + + + + Giddy-up!: 동물 탑승 기술 + 림의 동물 탑승 기술은 마운트를 얼마나 효과적으로 사용할 수 있는지에 영향을줍니다. 운동 능력 (2 %)과 정확도 (0.5 %)에 대한 페널티가 각 레벨에 적용됩니다. 스킬 레벨이 동물을 길들이기 위해 필요한 레벨을 초과하면 동등한 보너스가 적용됩니다. 레벨 당 보너스 / 페널티는 모드 설정에서 구성 할 수 있습니다. + + + diff --git a/1.4/Languages/Korean/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml b/1.4/Languages/Korean/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml new file mode 100644 index 0000000..5fae9a8 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml @@ -0,0 +1,44 @@ + + + + +Giddy-up 시리즈의 새로운 Mod가 출시 되었습니다! + +'Giddy-up! Caravan' 이 Mod에서 당신은 림을 각종 동물들 혹은 Mod로 추가한 다른 동물들을 태우고 먼 곳까지 이동 할 수 있습니다! 자세한 내용은 Steam에서 확인하거나 Ludeon 공식 포럼 mod 페이지에서 확인하십시오. + + + 모든 Giddy-up 모드에 큰 업데이트를 발표하게되어 기쁩니다! + +<color=orange><b> Giddy-up! Core의 큰 변경점 </b></color> +- 적대적 혹은 아군의 NPC 라이더가 떨어진 탈것은 더 이상 야생 동물이되지 않지만 대신 다음 중 하나가 발생할 때까지 계속 싸우게됩니다. +--> 라이더는 다시 탈것에 올라 탑니다. (라이더는 가능하면 다시 탈것에 올라 타려고 시도 합니다.). +--> 동물을 소유 한 라이더가 살해되거나 쓰러질 경우 동물은 공황 상태에서 맵을 방황 할 것입니다. 더 이상 주인이 통제 할 수 없기 때문입니다. +참고 : 위험한 동물을 탑승한 라이더를 죽이는 것이 이제 그 어느 때보 다 중요해졌습니다. +- 적의 탈것이 쓰러지면 야생 동물이되어 여전히 길들이거나 사냥을 할 수 있습니다. + +<color=orange><b> Giddy-up! Caravan의 큰 변경점 </b></color> +- 아군 NPC들은 당신의 식민지에 도착했을 때 그들의 탈것을 주차 한 채 머물고 떠날 때 다시 타고 갈 것입니다. +- 새로운 영역 추가: <color=orange><b> NPC 주차 영역 </b></color>. 아군 NPC가 도착 하면, NPC 주차 영역 근처에 탈 것을 주차하고 내리려고 합니다. 건설 -> 영역 항목을 확인 하세요 +참고 :이 영역을 방에 만들면 손님을 위한 개인 공간이 생깁니다! + +<color=orange><b> 작은 변경점과 수정사항 </b></color> +- Giddy-up! Caravan에서 더 이상 대화 렉이 발생하지 않습니다. +- UI 수정:매복 같은 맵 이벤트중에 탈것이 죽었을 때 발생하는 이슈 수정. +- 기본 이름에서 비슷한 이름을 여러개 사용할 수 없던 문제 수정. +- Giddy-up! Battle Mounts에서 우클릭 메뉴를 활성 하면 탈것의 이름이 표시 됩니다. +- 스페인어 번역 추가 (by mora145) + +Good luck playing! +Roolo + + + Giddy-up을위한 새로운 모드 시리즈 출시! +"이봐, 스테인. 강철 광맥에 다녀와 줄래? 우리 철이 다 떨어지고있어." +"바나스트라, 유일한 광맥이 지도 반대 편에 있어! 니가 가지 그래?" +"근데, 나는 광산 채굴을 할 수 없어. 너도 알 잖아. 왜 그냥 동물을 타고 가면 안되는거야?" +"그게 지금 되니?" + +예, 그렇습니다. Giddy-up! Ride and Roll을 사용하면 림 들이 어디든지 걷는 고통을 덜 수 있습니다. Steam에서 확인해보십시오! + + + diff --git a/1.4/Languages/Korean/DefInjected/JobDef/Jobs.xml b/1.4/Languages/Korean/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..0fb1673 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,6 @@ + + + 탑승 + 탑승중 + 내리기 + diff --git a/1.4/Languages/Korean/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/Korean/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..6388525 --- /dev/null +++ b/1.4/Languages/Korean/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,32 @@ + + + + 동물 탑승 스킬 레벨에 따른 정확도(%) + 만일 동물 탑승 레벨이 길들이는데 필요한 수준보다 낮다면, 레벨당 패널티가 되며 그보다 높을 경우 보너스가 됩니다. + 동물 탑승 스킬 레벨에 따른 이동 영향(%) + 만일 동물 조련 레벨이 길들이는데 필요한 수준보다 낮다면, 레벨당 패널티가 되며 그보다 높을 경우 보너스가 됩니다. + 정확도 패널티 + 탑승시 정확도 패널티 + + 탑승 가능한 동물.. + 그리기 설정.. + 환경 설정 + 몸체 크기 필터 + 동물의 몸체 크기 기준으로 정렬 합니다. + 탑승 동물 선택 + 필터를 사용해 몸체 크기별로 필터링 된 리스트에서, 타일을 클릭하여 편집 합니다. + 그리기 우선 순위 설정 + 림의 앞에 그려야 할 동물과 림의 뒤에 그려야하는 동물을 설정하십시오. +  대부분의 동물은 림 뒤에 그려야하지만 일부 (특히 긴 목이나 뿔이있는 동물)는 림 앞에 그릴 때 더 잘 보입니다. + 탑승 가능 + 탑승 불가 + 동물이 앞쪽에 + 동물이 뒤쪽에 + + 탑승 불가, 모드 옵션 에서 허용 해야 함. + 동물이 무언가 진행 중이라 탑승 할 수 없습니다. + 탑승 하려면 더 자라야 합니다. + 탑승 하기 위해 복종 훈련이 필요 + 올라타기 + 내리기 + diff --git a/1.4/Languages/KoreanFastChannel/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/KoreanFastChannel/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..55249c1 --- /dev/null +++ b/1.4/Languages/KoreanFastChannel/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,8 @@ + + + + Giddy-up!: 동물 탑승 기술 + 림의 동물 탑승 기술은 마운트를 얼마나 효과적으로 사용할 수 있는지에 영향을줍니다. 운동 능력 (2 %)과 정확도 (0.5 %)에 대한 페널티가 각 레벨에 적용됩니다. 스킬 레벨이 동물을 길들이기 위해 필요한 레벨을 초과하면 동등한 보너스가 적용됩니다. 레벨 당 보너스 / 페널티는 모드 설정에서 구성 할 수 있습니다. + + + diff --git a/1.4/Languages/KoreanFastChannel/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml b/1.4/Languages/KoreanFastChannel/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml new file mode 100644 index 0000000..5fae9a8 --- /dev/null +++ b/1.4/Languages/KoreanFastChannel/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml @@ -0,0 +1,44 @@ + + + + +Giddy-up 시리즈의 새로운 Mod가 출시 되었습니다! + +'Giddy-up! Caravan' 이 Mod에서 당신은 림을 각종 동물들 혹은 Mod로 추가한 다른 동물들을 태우고 먼 곳까지 이동 할 수 있습니다! 자세한 내용은 Steam에서 확인하거나 Ludeon 공식 포럼 mod 페이지에서 확인하십시오. + + + 모든 Giddy-up 모드에 큰 업데이트를 발표하게되어 기쁩니다! + +<color=orange><b> Giddy-up! Core의 큰 변경점 </b></color> +- 적대적 혹은 아군의 NPC 라이더가 떨어진 탈것은 더 이상 야생 동물이되지 않지만 대신 다음 중 하나가 발생할 때까지 계속 싸우게됩니다. +--> 라이더는 다시 탈것에 올라 탑니다. (라이더는 가능하면 다시 탈것에 올라 타려고 시도 합니다.). +--> 동물을 소유 한 라이더가 살해되거나 쓰러질 경우 동물은 공황 상태에서 맵을 방황 할 것입니다. 더 이상 주인이 통제 할 수 없기 때문입니다. +참고 : 위험한 동물을 탑승한 라이더를 죽이는 것이 이제 그 어느 때보 다 중요해졌습니다. +- 적의 탈것이 쓰러지면 야생 동물이되어 여전히 길들이거나 사냥을 할 수 있습니다. + +<color=orange><b> Giddy-up! Caravan의 큰 변경점 </b></color> +- 아군 NPC들은 당신의 식민지에 도착했을 때 그들의 탈것을 주차 한 채 머물고 떠날 때 다시 타고 갈 것입니다. +- 새로운 영역 추가: <color=orange><b> NPC 주차 영역 </b></color>. 아군 NPC가 도착 하면, NPC 주차 영역 근처에 탈 것을 주차하고 내리려고 합니다. 건설 -> 영역 항목을 확인 하세요 +참고 :이 영역을 방에 만들면 손님을 위한 개인 공간이 생깁니다! + +<color=orange><b> 작은 변경점과 수정사항 </b></color> +- Giddy-up! Caravan에서 더 이상 대화 렉이 발생하지 않습니다. +- UI 수정:매복 같은 맵 이벤트중에 탈것이 죽었을 때 발생하는 이슈 수정. +- 기본 이름에서 비슷한 이름을 여러개 사용할 수 없던 문제 수정. +- Giddy-up! Battle Mounts에서 우클릭 메뉴를 활성 하면 탈것의 이름이 표시 됩니다. +- 스페인어 번역 추가 (by mora145) + +Good luck playing! +Roolo + + + Giddy-up을위한 새로운 모드 시리즈 출시! +"이봐, 스테인. 강철 광맥에 다녀와 줄래? 우리 철이 다 떨어지고있어." +"바나스트라, 유일한 광맥이 지도 반대 편에 있어! 니가 가지 그래?" +"근데, 나는 광산 채굴을 할 수 없어. 너도 알 잖아. 왜 그냥 동물을 타고 가면 안되는거야?" +"그게 지금 되니?" + +예, 그렇습니다. Giddy-up! Ride and Roll을 사용하면 림 들이 어디든지 걷는 고통을 덜 수 있습니다. Steam에서 확인해보십시오! + + + diff --git a/1.4/Languages/KoreanFastChannel/DefInjected/JobDef/Jobs.xml b/1.4/Languages/KoreanFastChannel/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..0fb1673 --- /dev/null +++ b/1.4/Languages/KoreanFastChannel/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,6 @@ + + + 탑승 + 탑승중 + 내리기 + diff --git a/1.4/Languages/KoreanFastChannel/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/KoreanFastChannel/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..6388525 --- /dev/null +++ b/1.4/Languages/KoreanFastChannel/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,32 @@ + + + + 동물 탑승 스킬 레벨에 따른 정확도(%) + 만일 동물 탑승 레벨이 길들이는데 필요한 수준보다 낮다면, 레벨당 패널티가 되며 그보다 높을 경우 보너스가 됩니다. + 동물 탑승 스킬 레벨에 따른 이동 영향(%) + 만일 동물 조련 레벨이 길들이는데 필요한 수준보다 낮다면, 레벨당 패널티가 되며 그보다 높을 경우 보너스가 됩니다. + 정확도 패널티 + 탑승시 정확도 패널티 + + 탑승 가능한 동물.. + 그리기 설정.. + 환경 설정 + 몸체 크기 필터 + 동물의 몸체 크기 기준으로 정렬 합니다. + 탑승 동물 선택 + 필터를 사용해 몸체 크기별로 필터링 된 리스트에서, 타일을 클릭하여 편집 합니다. + 그리기 우선 순위 설정 + 림의 앞에 그려야 할 동물과 림의 뒤에 그려야하는 동물을 설정하십시오. +  대부분의 동물은 림 뒤에 그려야하지만 일부 (특히 긴 목이나 뿔이있는 동물)는 림 앞에 그릴 때 더 잘 보입니다. + 탑승 가능 + 탑승 불가 + 동물이 앞쪽에 + 동물이 뒤쪽에 + + 탑승 불가, 모드 옵션 에서 허용 해야 함. + 동물이 무언가 진행 중이라 탑승 할 수 없습니다. + 탑승 하려면 더 자라야 합니다. + 탑승 하기 위해 복종 훈련이 필요 + 올라타기 + 내리기 + diff --git a/1.4/Languages/Polish/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/Polish/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..3d9b336 --- /dev/null +++ b/1.4/Languages/Polish/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,7 @@ + + + + Giddy-up!: Umiejętność ujeżdżania zwierząt + Umiejętność ujeżdżania zwierząt u kolonisty wpływa na to jak efektytwnie może on ujeżdżać zwierzę.Za każdy poziom umiejętności poniżej wymaganego do oswojenia zwierzęcia, nadawana jest kara do prędkości ruchu (2%) i kara do celności (0.5%), za każdy poziom różnicy. W wypadku posiadania umiejętności wyższych niż wymagane, nadana zostaje nagroda o takiej samej wartości procentowej za każdy poziom. Wartości nagród i kar można dostosować w ustawieniach modyfikacji. + + \ No newline at end of file diff --git a/1.4/Languages/Polish/DefInjected/JobDef/Jobs.xml b/1.4/Languages/Polish/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..3b3cd92 --- /dev/null +++ b/1.4/Languages/Polish/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,21 @@ + + + + Mount + GiddyUpCore.Jobs.JobDriver_Mount + Ujeżdżanie + false + + + Mounted + GiddyUpCore.Jobs.JobDriver_Mounted + Ujeżdżanie + false + + + Dismount + GiddyUpCore.Jobs.JobDriver_Dismount + Opuść + false + + diff --git a/1.4/Languages/Polish/DefInjected/UpdateFeatureDef/UpdateFeatures.xml b/1.4/Languages/Polish/DefInjected/UpdateFeatureDef/UpdateFeatures.xml new file mode 100644 index 0000000..620a4de --- /dev/null +++ b/1.4/Languages/Polish/DefInjected/UpdateFeatureDef/UpdateFeatures.xml @@ -0,0 +1,57 @@ + + + + Giddy-up Core + GiddyUpCore + https://ludeon.com/forums/index.php?topic=37323 + + + GiddyUpCore_0_18_5 + 0.18.5 + Nowy mod z serii Giddy-up! został wydany! + +Z dumą pragnę zaprezentować Giddy-up! Caravan. Modyfikajce która pozwoli Twoim kolonistą ujeżdżać słonie, mufalo, lamy czy dowolne inne zwierzęta pochodzące z modyfikacji czy vanilli, w celu podróży do dalekich krain. + Sprawdź już teraz na steam, lub na stronie modyfikacji na forum Ludeon studios. + + + + GiddyUpCore_0_18_6 + 0.18.6 + Z radością zapowiadam dużą aktualizacje która wkrótce trafi do wszystkich modyfikacji z serii Giddy-up!. + +<color=orange><b> Duże zmiany w Giddy-up! Core: </b></color> +- Przyjazde i wrogo nastawione wierzchowce których ujeżdżający kolonista zostanie zrzucony nie będą dłużej stawały się dzikimi zwierzętami, lecz będą walczyły aż nie wydarzy się jedno z poniższych: +--> Ujeżdżający uprzednio bohater wróci na zwierzę (Bohaterowie będą próbowali wrócić na wierzchowce jeśli będzie taka możliwość). +--> Właściciel zwierzęcia zostanie zabity lub powalony. W takiej sytuacji zwierzę ucieknie w ponice i opuści mapę, ponieważ nie będzie na m,apie nikogo kto mógłby je kontrolować. +Notatka: W wypadku potężniejszego zwierzęcia, aby zwierze uciekło musi zostać zabity jeźdzca. +- Jeśli wrogi wierzchowiec zostanie powalony, stanie się dzikim zwierzęciem, więc będziesz mógł go oswoić lub upolować. + +<color=orange><b> Wielkie zmiany w Giddy-up! Caravan: </b></color> +- Sojusznicy będą teraz parkowali swoje wierzchowce kiedy przybędą do kolonii, oraz będą na nie wracali podczas opuszczania jej. +- Została dodana nowa strea nazwana: <color=orange><b> Miejsce dla wierzchowców NPC </b></color>. Kiedy sojusnzicy przybędą, będą zostawiali swoje wierzchowce w najbliżsym wyznaczonym miejscu. Sprawdź co i jak w zakładce stref. +Notatka: Ustaw to miejsce w pomieszczeniu i gotowe! Masz własną stajnie dla gości! + +<color=orange><b> Drobne zmiany i poprawki </b></color> +- Okienko Giddy-up Caravan nie powinno już powodować lagów gry. +- Naprawiaono problem z UI w okienku dialogowym karawanu które pojawiało się gdy wierzchowiec zginął podczas wydarzenia na mapie (np. zasadka). +- Naprawiaono problem z UI w okienku dialogowym karawanu który powodował że nie można było używać podobnych wierzchowców domyślnym imieniem. +- Kliknięcie prawym przyciskiem myszki na przedmiot do ujeżdżania teraz również wyświetla nazwę wierzchowca kiedy korzysta się z Giddy-up! Battle Mounts. +- Zaktualizowano Hispzańskie tłumaczenie (stworzone przez: mora145) + +Powodzenia podczas gry! +Roolo + + + + GiddyUpCore_0_18_7 + 0.18.7 + Nowy mod z serii Giddy-up! został wydany! +"Hej Stein, możesz wykopać dla mnie trochę stali? Mamy jej coraz mniej." +"Ale Banastra,jedyne skupisko jest po drugiej stronie mapy! Czemu się tym nie zajmiesz?" +"Cóż, nie mogę wydobywać minerałów, wiesz o tym. Czemu nie weźmiesz zwierzaka i nie przejedziesz się na nim" +"Tak się da?" + +Tak, dokładnie. Wraz z Giddy-up! Ride and Roll uratujesz swoich kolonistów od bólu podróży wszędzie z buta. Modyfikacja pozwala ujeżdżać wierzchowce kiedykolwiek miałoby to sens! Sprawdź już teraz na steam! + + + \ No newline at end of file diff --git a/1.4/Languages/Polish/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/Polish/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..ff655da --- /dev/null +++ b/1.4/Languages/Polish/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,32 @@ + + + + Wpływ celności(%) za każdy poziom umięjętności oswajania + Jeżeli poziom oswajania u kolonisty jest poniżej poziomu wymaganego do oswojenia zwierzęcia, zostanie nadana kara za każdy poziom poniżej wymogu. W przeciwnym wypadku nadawany jest bonu za każdy poziom ponad wymóg. + Wpływ na ruch(%) za każdy poziom umięjętności oswajania + Jeżeli poziom oswajania u kolonisty jest poniżej poziomu wymaganego do oswojenia zwierzęcia, zostanie nadana kara za każdy poziom poniżej wymogu. W przeciwnym wypadku nadawany jest bonus za każdy poziom ponad wymóg. + Kara do celności + Kara do celności kiedy kolonista jest na wierzchowcu + + Zwierzęta możliwe do ujeżdżania. + Opcje rysowania. + Konfiguracja + Sortuj po rozmiarze ciała + Sortuj zwierzęta możliwe do ujeżdżania po rozmiarze ciała + Wybierz zwierze możliwe do ujeżdżania + Skorzystaj z filtrów powyżej aby sortować po rozmiarze ciała, kliknij pozycje aby stworzyć wyjątek. + Ustaw piorytet rysowania + Skonfiguruj które zwierzęta powinny być rysowane przed kolonistami, a które za nimi. + Większość zwierząt powinna być rysowana za kolonistami, ale pewna część (Szczególnie zwierzęta z długimi szyjami lub rogami) wyglądają lepiej kiedy są rysowane przed kolonistami. + Można ujeżdżać + Brat możliwości ujeżdżania + Zwierze przed kolonistą + Zwierze za kolonistą + + Nie można ujeżdżać, zwierzę nie dozwolone w ustawieniach modyfikacji + Nie można ujeżdzać, zwierzę zajęte + Nie można ujeżdzać, zwierzę nie urosło wystarczająco + Nie można ujeżdzaćt, zwierzę wymaga ukończenia treningu + Ujeżdżaj + Zsiądź + diff --git a/1.4/Languages/PortugueseBrazilian/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/PortugueseBrazilian/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..240f4be --- /dev/null +++ b/1.4/Languages/PortugueseBrazilian/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,8 @@ + + + + Giddy-up!: Habilidade de manejo com animais + A habilidade de manejo com animais de um peão afeta a eficácia do uso de montarias. Por nível em que a habilidade está abaixo do nível necessário para domar um animal, uma penalidade de movimento (2%) e precisão (0,5%) é aplicada para cada nível. Se o nível de habilidade está acima do nível necessário para domar o animal, um bônus igual é aplicado. Os bônus/penalidades por nível podem ser configurados nas configurações do mod. + + + diff --git a/1.4/Languages/PortugueseBrazilian/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml b/1.4/Languages/PortugueseBrazilian/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml new file mode 100644 index 0000000..d8856e6 --- /dev/null +++ b/1.4/Languages/PortugueseBrazilian/DefInjected/HugsLib.UpdateFeatureDef/UpdateFeatures.xml @@ -0,0 +1,65 @@ + + + + + + \ No newline at end of file diff --git a/1.4/Languages/PortugueseBrazilian/DefInjected/JobDef/Jobs.xml b/1.4/Languages/PortugueseBrazilian/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..bfaf060 --- /dev/null +++ b/1.4/Languages/PortugueseBrazilian/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,6 @@ + + + Montando + Montado + Desmontando + diff --git a/1.4/Languages/PortugueseBrazilian/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/PortugueseBrazilian/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..10b6a7f --- /dev/null +++ b/1.4/Languages/PortugueseBrazilian/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,40 @@ + + + + Giddy up! + Velocidade de movimento da montaria (substitui a velocidade de movimento do peão) + Multiplicador para habilidade de manejo do cavaleiro + Habilidade de manejo com animais do cavaleiro + Requisito de habilidade para animal + Níveis acima do requisito de habilidade + Impacto da velocidade por nível (definido nas configurações do mod) + Multiplicador para tipo de montaria + + Impacto de precisão(%) por nível de manejo com animal + Se a habilidade de manejo com animais de um peão estiver abaixo do nível que seria necessário para domar o animal, esta é uma penalidade por nível. Caso contrário, é um bônus por nível. + Impacto de movimento(%) por nível de manejo com animal + Se a habilidade de manejo com animais de um peão estiver abaixo do nível que seria necessário para domar o animal, esta é uma penalidade por nível. Caso contrário, é um bônus por nível. + Penalidade de precisão + Penalidade de precisão quando os peões estão montados + Animais montáveis.. + Opções de desenho.. + Opções de configuração + Filtrar por tamanho do corpo + Filtrar animais montáveis por tamanho do corpo + Selecione animais montáveis + Use o filtro acima para filtrar por tamanho do corpo e clique nos blocos para fazer exceções + Definir prioridade de desenho + Configure quais animais devem ser puxados na frente dos peões e quais devem ser puxados atrás dos peões. + A maioria dos animais deve ser puxada atrás dos peões, mas alguns (especialmente animais com pescoços ou chifres longos) parecem melhores quando puxados na frente dos peões + Montável + Não Montável + Animal na frente + Animal atrás do peão + + Não pode montar, animal não é permitido nas opções de mod + Não pode montar, animal ocupado + Não pode montar, o animal não está totalmente crescido + Não pode montar, o animal precisa de treinamento em Defender + Montar + Desmontar + diff --git a/1.4/Languages/Russian/DefInjected/ConceptDefs.xml b/1.4/Languages/Russian/DefInjected/ConceptDefs.xml new file mode 100644 index 0000000..ad1be4a --- /dev/null +++ b/1.4/Languages/Russian/DefInjected/ConceptDefs.xml @@ -0,0 +1,6 @@ + + +Giddy-up!: Навык животноводства +Навык животноводства ваших колонистов влияет на то, насколько эффективно они используют ездовых животных. Если уровень навыка наездника ниже уровня навыка, требуемого для приручения данного животного, накладывается штраф: за каждый уровень разницы снижается скорость (2%) и меткость (0.5%). Если уровень навыка выше требуемого для приручения животного, то даётся бонус по тем же правилам. Штрафы/бонусы за каждый уровень разницы можно изменить в настройках мода. + + \ No newline at end of file diff --git a/1.4/Languages/Russian/DefInjected/UpdateFeatures.xml b/1.4/Languages/Russian/DefInjected/UpdateFeatures.xml new file mode 100644 index 0000000..728e94e --- /dev/null +++ b/1.4/Languages/Russian/DefInjected/UpdateFeatures.xml @@ -0,0 +1,42 @@ + + + Вышел новый мод из серии Giddy-up! + +С гордостью представляю вам "Giddy-up! Caravan". Этот мод позволит вашим подопечным ездить в далёкие земли на слонах, муффало, ламах и всех прочих животных, будь те их игры или из мода! +Заценить его можно в Стиме или на странице мода на форумах Ludeon. + + + Я рад объявить о крупном обновлении всех модов "Giddy-up!". + +<color=orange><b> Большие изменения в "Giddy-up! Core": </b></color> +- Животные, с которых был сброшен дружелюбный/враждебный всадник-НИП, больше не превращаются в диких животных, но продолжат сражаться, пока не произойдёт одно из событий: +--> Их наездник вновь оседлает животное (теперь наездники будут пытаться оседлать животное заново, если возможно). +--> Наездник животного умрёт или потеряет сознание. В этом случае животное начнёт панически отступать и уйдёт с карты, так как у него больше нет хозяина, способного с ним управиться. +На заметку: теперь стало ещё важнее убивать противников, оседлавших опасных животных, чтобы оно начало убегать. +- Если вражеское ездовое животное теряет сознание, то оно превращается в обычного дикого животного, которого можно приручать и убивать на охоте. + +<color=orange><b> Большие изменения в "Giddy-up! Caravan": </b></color> +- Дружелюбные НИПы теперь будут "парковать" своих ездовых животных по прибытию в колонию и снова седлать их во время отъезда. +- Была добавлена новая зона под названием "<color=orange><b> Область для ездовых животных </b></color>". Когда в колонию прибудут дружелюбные наездники, они оставят своих животных на ближайшей области для ездовых животных. Зону можно найти во вкладке Проекты->Области +На заметку: Разместите "парковку" в комнате, чтобы сделать конюшню для своих гостей! + +<color=orange><b> Небольшие изменения и правки </b></color> +- Окно создания каравана больше не должно лагать при использовании "Giddy-up! Caravan". +- Исправлена проблема интерфейса в сообщении каравана, появлявшегося при смерти ездового животного во время события на мировой карте (вроде засады). +- Исправлена проблема интерфейса в окне создания каравана, не дававшая одновременно седлать несколько одинаковых животных со стандартным именем (Бумалопа 1 и Бумалопа 2, например). +- Теперь при выборе животного для седлания (в "Giddy-up! Battle Mounts") в пункте контекстного меню также отображается имя животного. + +Удачной игры! +Roolo + + + Вышел новый мод из серии Giddy-up! +"Эй, Иосиф, можешь сгонять и накопать стали? У нас она почти кончилась." +"Но Оса, единственные залежи - на другом конце карты! Может, ты сходишь?" +"Не могу. Ты же знаешь, что я неспособна заниматься шахтёрством. Слушай, а почему бы тебе не оседлать животное и доехать на работы верхом?" +"Так что, теперь можно?" + +Да, можно. С модом "Giddy-up! Ride and Roll" ваши колонисты больше не будут тащиться пешком на задание за полкарты, ведь они могут поехать туда верхом (если это удобнее)! Заценить мод можно на Стиме. + + + \ No newline at end of file diff --git a/1.4/Languages/Russian/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/Russian/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..eb92157 --- /dev/null +++ b/1.4/Languages/Russian/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,32 @@ + + + + Изменение шанса попадания(%) за уровень животноводства + Если навык животноводства наездника ниже уровня, требуемого для приручения животного - это штраф за уровень разницы. Если навык выше - это бонус за уровень разницы. + Изменение движения (%) за уровень животноводства + Если навык животноводства наездника ниже уровня, требуемого для приручения животного - это штраф за уровень разницы. Если навык выше - это бонус за уровень разницы. + Штраф к меткости + Штраф к меткости атак наездника + + Седлаемые животные.. + Настройки изображений.. + Настройки конфигураций + Сортировать по габаритам + Отсортировать седлаемых животных по размеру тела + Выбрать седлаемых животных + Используйте фильтр выше, чтобы отсортировать по габаритам, а затем кликните по клеткам, чтобы внести исключения + Указать приоритет изображений + Настройте, какие животные должны отображаться перед наездником, а какие - за ним. + Многие животные должны отображаться позади наездника, но некоторым(особенно длинношеим или рогатым) больше подходит передний план + Седлаемые + Не седлаемые + Животное спереди + Животное позади наездника + + Нельзя оседлать, животное запрещено в настройках мода + Нельзя оседлать, животное занято + Нельзя оседлать, животное ещё не полностью выросло + Нельзя оседлать, животное нужно обучить покорности + Оседлать + Спешиться + diff --git a/1.4/Languages/Spanish/DefInjected/ConceptDef/ConceptDefs.xml b/1.4/Languages/Spanish/DefInjected/ConceptDef/ConceptDefs.xml new file mode 100644 index 0000000..9aaf1f7 --- /dev/null +++ b/1.4/Languages/Spanish/DefInjected/ConceptDef/ConceptDefs.xml @@ -0,0 +1,8 @@ + + + + Giddy-up!: Habilidad de manejo de animales + La habilidad de manejo de animales de un colono afecta la efectividad de las monturas. Por nivel en que la habilidad está por debajo del nivel necesario para domar a un animal, se aplica una penalización por movimiento (2%) y precisión (0.5%) para cada nivel. Si el nivel de habilidad está por encima del nivel necesario para domar al animal, se aplica una bonificación equivalente. Las bonificaciones/penalizaciones por nivel se pueden configurar en la configuración de modificación. + + + \ No newline at end of file diff --git a/1.4/Languages/Spanish/DefInjected/JobDef/Jobs.xml b/1.4/Languages/Spanish/DefInjected/JobDef/Jobs.xml new file mode 100644 index 0000000..79a91fd --- /dev/null +++ b/1.4/Languages/Spanish/DefInjected/JobDef/Jobs.xml @@ -0,0 +1,8 @@ + + + + Montando + Montado + + + \ No newline at end of file diff --git a/1.4/Languages/Spanish/Keyed/GiddyUpCore_Keys.xml b/1.4/Languages/Spanish/Keyed/GiddyUpCore_Keys.xml new file mode 100644 index 0000000..dd4141b --- /dev/null +++ b/1.4/Languages/Spanish/Keyed/GiddyUpCore_Keys.xml @@ -0,0 +1,33 @@ + + + + Impacto de precisión(%) por nivel de manejo de animales + Si la habilidad de manejo del animal de un colono está por debajo del nivel que se necesitaría para domar al animal, esta es una penalización por nivel. De lo contrario, es una bonificación por nivel. + Impacto del movimiento(%) por nivel de manejo de animales + Si la habilidad de manejo del animal de un colono está por debajo del nivel que se necesitaría para domar al animal, esta es una penalización por nivel. De lo contrario, es una bonificación por nivel. + Penalización de puntería + Penalización de puntería cuando los personajes están montados + + Monturas + Opciones de diseño + Opciones de configuración + Filtrar por tamaño + Filtrar monturas por tamaño + Seleccionar monturas + Utiliza el filtro de abajo para filtrar por tamaño y pulsa las teclas para añadir excepciones + Establecer prioridad del diseño + Configura qué animales deberían ser dibujados frente a los personajes y cuales deberían dibujarse detrás de los personajes. +Muchos animales deberían dibujarse detrás de los personajes, pero algunos (especialmente los animales con un gran cuello o con grandes cuernos) se podrán ver mejor cuando se dibujen frente a los personajes + Montable + No Montable + Animal al frente + Animal detrás del personaje + + No se puede montar, el animal no está permitido en el mod + No se puede montar, el animal está ocupado + No se puede montar, el animal no ha crecido lo suficiente + No se puede montar, el animal necesita el entrenamiento de obediencia + Montar + Desmontar + + diff --git a/1.4/Patches/Patches.xml b/1.4/Patches/Patches.xml new file mode 100644 index 0000000..0bfb6d4 --- /dev/null +++ b/1.4/Patches/Patches.xml @@ -0,0 +1,344 @@ + + + + + + Always + +
  • + */ThingDef[defName = "Ostrich"]/comps + +
  • + + + Things/Pawn/Ostrich_overlay_south + Graphic_Single + 1.8 + false + + (0,0,0,0) + + +
  • + + +
    +
    + + + Always + +
  • + */ThingDef[defName = "Emu"]/comps + +
  • + + + Things/Pawn/Emu_overlay_south + Graphic_Single + 1.6 + false + + (0,0,0,0) + + +
  • + + +
    +
    + + + Defs/StatDef[defName="ArmorRating_Sharp" or defName="ArmorRating_Blunt"]/parts + +
  • + 999 +
  • +
    +
    + + Defs/StatDef[defName="MoveSpeed"]/parts + +
  • + + + + + Always + +
  • + */ThingDef[defName = "Caribou"]/comps + +
  • + + + Things/Pawn/Caribou_overlay_front + Graphic_Single + 4.38 + false + + (0,0,0,0) + + + + Things/Pawn/Caribou_overlay_side + Graphic_Single + 4.38 + false + + (0,0,0,0) + +
  • +
    + + +
    + + + Always + +
  • + */ThingDef[defName = "Horse" and not (comps)] + + + + +
  • +
    +
    + + + Always + +
  • + */ThingDef[defName = "Horse"]/comps + +
  • + + + Graphic_Single + 2.1 + false + + +
  • + Things/Pawn/Horse_overlay_south +
  • +
  • + Things/Pawn/Horse1_overlay_south +
  • +
  • + Things/Pawn/Horse2_overlay_south +
  • +
  • + Things/Pawn/Horse3_overlay_south +
  • +
  • + Things/Pawn/Horse4_overlay_south +
  • +
  • + Things/Pawn/Horse5_overlay_south +
  • +
  • + Things/Pawn/Horse6_overlay_south +
  • + + (0,0,0,0) + + + + +
    +
    + + + Always + +
  • + */ThingDef[defName = "Cougar" and not (comps)] + + + + +
  • +
    +
    + + + Always + +
  • + */ThingDef[defName = "Cougar"]/comps + +
  • + + + Things/Pawn/Cougar_overlay_south + (177,136,112) + Graphic_Single + 2.18 + false + + + (0,0,0,0) + +
  • + + +
    +
    + + + Always + +
  • + */ThingDef[defName = "Panther" and not (comps)] + + + + +
  • +
    +
    + + + Always + +
  • + */ThingDef[defName = "Panther"]/comps + +
  • + + + Things/Pawn/Cougar_overlay_south + (60,60,60) + Graphic_Single + 2.12 + false + + + (0,0,0,0) + +
  • + + +
    +
    + + + + Always + +
  • + */ThingDef[defName = "Ibex" and not (comps)] + + + +
  • +
    +
    + + + Always + +
  • + */ThingDef[defName = "Ibex"]/comps + +
  • + + + Things/Pawn/IbexMale_overlay_front + Graphic_Single + 1.8 + false + + + Things/Pawn/IbexFemale_overlay_front + Graphic_Single + 1.7 + false + + (0,0,0,0) + + + + Things/Pawn/IbexMale_overlay_side + Graphic_Single + 1.8 + false + + + Things/Pawn/IbexFemale_overlay_side + Graphic_Single + 1.7 + false + + (0,0,0,0) + +
  • + + +
    +
    + + + + + Always + +
  • + */ThingDef[defName = "LabradorRetriever"]/comps + +
  • + true +
  • + + +
    +
    + + Always + +
  • + */ThingDef[defName = "LabradorRetriever" and not(comps)] + + +
  • + true +
  • + + + +
    +
    + + Always + +
  • + */ThingDef[defName = "Alpaca" or defName = "Elk" or defName = "Thrumbo"]/comps + +
  • + true +
  • + + +
    +
    + + Always + +
  • + */ThingDef[(defName = "Alpaca" or defName = "Elk" or defName = "Thrumbo") and not(comps)] + + +
  • + true +
  • + + + +
    +
    + +
    diff --git a/1.4/Source/Giddy-up-Core/AnimalRecord.cs b/1.4/Source/Giddy-up-Core/AnimalRecord.cs new file mode 100644 index 0000000..db2a1c3 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/AnimalRecord.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace GiddyUpCore +{ + public class AnimalRecord + { + public bool isSelected = false; + public bool isException = false; + public String label = ""; + public AnimalRecord(bool isSelected, bool isException, String label) + { + this.isException = isException; + this.isSelected = isSelected; + this.label = label; + } + public override string ToString() + { + return this.isSelected + "," + this.isException + "," + this.label; + } + } + +} diff --git a/1.4/Source/Giddy-up-Core/Base.cs b/1.4/Source/Giddy-up-Core/Base.cs new file mode 100644 index 0000000..9d8dfe1 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Base.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using HugsLib; +using HugsLib.Utils; +using GiddyUpCore.Storage; +using GiddyUpCore.Utilities; +using Verse; +using UnityEngine; +using HugsLib.Settings; +using RimWorld; +using GiddyUpCore.Concepts; + +namespace GiddyUpCore +{ + public class Base : ModBase + { + private ExtendedDataStorage _extendedDataStorage; + public static Base Instance { get; private set; } + internal static SettingHandle handlingMovementImpact; + internal static SettingHandle accuracyPenalty; + internal static SettingHandle handlingAccuracyImpact; + public static SettingHandle animalSelecter; + public static SettingHandle drawSelecter; + internal static SettingHandle tabsHandler; + internal static SettingHandle bodySizeFilter; + private static Color highlight1 = new Color(0.5f, 0, 0, 0.1f); + String[] tabNames = { "GUC_tab1".Translate(), "GUC_tab2".Translate()}; + internal static bool GiddyUpMechanoidsLoaded = false; + internal static List animalsWithBiome = new List(); + internal static List animalsWithoutBiome = new List(); + private int minPercentage = 0; + private int maxPercentage = 100; + internal static bool facialStuffLoaded; + public override string ModIdentifier + { + get { return "GiddyUpCore"; } + } + public Base() + { + Instance = this; + } + public override void DefsLoaded() + { + base.DefsLoaded(); + if (AssemblyExists("GiddyUpMechanoids")) + { + GiddyUpMechanoidsLoaded = true; + } + if (AssemblyExists("FacialStuff")) + { + facialStuffLoaded = true; + } + + List allAnimals = DefUtility.getAnimals(); + allAnimals = allAnimals.OrderBy(o => o.defName).ToList(); + + handlingMovementImpact = Settings.GetHandle("handlingMovementImpact", "GUC_HandlingMovementImpact_Title".Translate(), "GUC_HandlingMovementImpact_Description".Translate(), 2.5f, Validators.FloatRangeValidator(0f, 10f)); + accuracyPenalty = Settings.GetHandle("accuracyPenalty", "GUC_AccuracyPenalty_Title".Translate(), "GUC_AccuracyPenalty_Description".Translate(), 10, Validators.IntRangeValidator(minPercentage, maxPercentage)); + handlingAccuracyImpact = Settings.GetHandle("handlingAccuracyImpact", "GUC_HandlingAccuracyImpact_Title".Translate(), "GUC_HandlingAccuracyImpact_Description".Translate(), 0.5f, Validators.FloatRangeValidator(0f, 2f)); + + + tabsHandler = Settings.GetHandle("tabs", "GUC_Tabs_Title".Translate(), "", "none"); + bodySizeFilter = Settings.GetHandle("bodySizeFilter", "GUC_BodySizeFilter_Title".Translate(), "GUC_BodySizeFilter_Description".Translate(), 0.8f); + animalSelecter = Settings.GetHandle("Animalselecter", "GUC_Animalselection_Title".Translate(), "GUC_Animalselection_Description".Translate(), null); + drawSelecter = Settings.GetHandle("drawSelecter", "GUC_Drawselection_Title".Translate(), "GUC_Drawselection_Description".Translate(), null); + + + tabsHandler.CustomDrawer = rect => { return DrawUtility.CustomDrawer_Tabs(rect, tabsHandler, tabNames); }; + + bodySizeFilter.CustomDrawer = rect => { return DrawUtility.CustomDrawer_Filter(rect, bodySizeFilter, false, 0, 5, highlight1); }; + animalSelecter.CustomDrawer = rect => { return DrawUtility.CustomDrawer_MatchingAnimals_active(rect, animalSelecter, allAnimals, bodySizeFilter, "GUC_SizeOk".Translate(), "GUC_SizeNotOk".Translate()); }; + bodySizeFilter.VisibilityPredicate = delegate { return tabsHandler.Value == tabNames[0]; }; + animalSelecter.VisibilityPredicate = delegate { return tabsHandler.Value == tabNames[0]; }; + + + drawSelecter.CustomDrawer = rect => { return DrawUtility.CustomDrawer_MatchingAnimals_active(rect, drawSelecter, allAnimals, null, "GUC_DrawFront".Translate(), "GUC_DrawBack".Translate()); }; + drawSelecter.VisibilityPredicate = delegate { return tabsHandler.Value == tabNames[1]; }; + + + DrawUtility.filterAnimals(ref animalSelecter, allAnimals, bodySizeFilter); + DrawUtility.filterAnimals(ref drawSelecter, allAnimals, null); + + foreach (ThingDef td in allAnimals) + { + if (td.HasModExtension()) + { + td.GetModExtension().Init(); + } + } + + foreach(BiomeDef biomeDef in DefDatabase.AllDefs) + { + foreach(PawnKindDef animalKind in biomeDef.AllWildAnimals) + { + if (!animalsWithBiome.Contains(animalKind)) + { + animalsWithBiome.Add(animalKind); + } + } + } + foreach (PawnKindDef animalWithoutBiome in from d in DefDatabase.AllDefs + where d.RaceProps.Animal && !animalsWithBiome.Contains(d) && !animalsWithoutBiome.Contains(d) + select d) + { + animalsWithoutBiome.Add(animalWithoutBiome); + } + /* + foreach (PawnKindDef pd in DefDatabase.AllDefs) + { + if (pd.HasModExtension()) + { + pd.GetModExtension().Init(); + } + } + */ + } + + + public override void WorldLoaded() + { + base.WorldLoaded(); + + _extendedDataStorage = Find.World.GetComponent(); + _extendedDataStorage.Cleanup(); + LessonAutoActivator.TeachOpportunity(GUC_ConceptDefOf.GUC_Animal_Handling, OpportunityType.GoodToKnow); + + } + + //Mod names sometimes change when Rimworld changes its version. Checking for the assembly name, which probably won't change is therefore a better idea than using ModLister.HasActiveModWithName + private bool AssemblyExists(string assemblyName) + { + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + if (assembly.FullName.StartsWith(assemblyName)) + return true; + } + return false; + } + + public ExtendedDataStorage GetExtendedDataStorage() + { + return _extendedDataStorage; + } + } + + +} diff --git a/1.4/Source/Giddy-up-Core/Components/CompBattlemounts.cs b/1.4/Source/Giddy-up-Core/Components/CompBattlemounts.cs new file mode 100644 index 0000000..7133fb4 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Components/CompBattlemounts.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore +{ + class CompMount : ThingComp + { + + public override void Initialize(CompProperties props) + { + base.Initialize(props); + } + + public override void PostExposeData() + { + base.PostExposeData(); + } + + } +} diff --git a/1.4/Source/Giddy-up-Core/Components/CompOverlay.cs b/1.4/Source/Giddy-up-Core/Components/CompOverlay.cs new file mode 100644 index 0000000..82bb751 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Components/CompOverlay.cs @@ -0,0 +1,100 @@ +using GiddyUpCore.Utilities; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore +{ + class CompOverlay : ThingComp + { + public CompProperties_Overlay Props => props as CompProperties_Overlay; + public override void PostDraw() + { + + if (!(parent is Pawn)) + { + return; + } + Pawn pawn = parent as Pawn; + + if (!IsMountableUtility.IsCurrentlyMounted(pawn)) + { + return; + } + base.PostDraw(); + + + CompProperties_Overlay.GraphicOverlay overlay = Props.GetOverlay(parent.Rotation); + if(overlay == null) + { + return; + } + + Vector3 drawPos = parent.DrawPos; + GraphicData gd; + + + + + gd = (pawn.gender == Gender.Female) ? overlay.graphicDataFemale : overlay.graphicDataMale; + if(gd == null) + { + gd = overlay.graphicDataDefault; + } + if (gd == null) + { + return; + } + + //support multi texture animals + if(overlay.allVariants != null) + { + string graphicPath = pawn.Drawer.renderer.graphics.nakedGraphic.path; + string graphicName = graphicPath.Split('/').Last(); + bool foundTex = false; + foreach (var variant in overlay.allVariants) + { + + string variantName = variant.texPath.Split('/').Last().Split(overlay.stringDelimiter.ToCharArray()).First(); + if (graphicName == variantName) + { + //set required properties + string texPath = variant.texPath; + variant.CopyFrom(gd); + variant.texPath = texPath; + gd = variant; + foundTex = true; + } + } + if (!foundTex) + { + //Don't throw errors when there's no valid texture. + return; + } + } + + + //g.data. + drawPos.y += 0.2f; + Vector3 offset = (pawn.gender == Gender.Female) ? overlay.offsetFemale : overlay.offsetMale; + if(offset == Vector3.zero) + { + offset = overlay.offsetDefault; + } + if(pawn.Rotation == Rot4.West) + { + offset.x = -offset.x; + } + + drawPos += offset; + + //Somehow the rotation is flipped, hence the use of GetOpposite. + gd.Graphic.Draw(drawPos, parent.Rotation, parent, 0f); + } + } + +} diff --git a/1.4/Source/Giddy-up-Core/Components/CompProperties_BattleMounts.cs b/1.4/Source/Giddy-up-Core/Components/CompProperties_BattleMounts.cs new file mode 100644 index 0000000..507ae30 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Components/CompProperties_BattleMounts.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore +{ + class CompProperties_Mount : CompProperties + { + public CompProperties_Mount() + { + compClass = typeof(CompMount); + } + + public bool drawFront = false; + public bool isException = false; + } +} diff --git a/1.4/Source/Giddy-up-Core/Components/CompProperties_Overlays.cs b/1.4/Source/Giddy-up-Core/Components/CompProperties_Overlays.cs new file mode 100644 index 0000000..c2be072 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Components/CompProperties_Overlays.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore +{ + public class CompProperties_Overlay : CompProperties + { + public GraphicOverlay overlayFront; + public GraphicOverlay overlaySide; + public GraphicOverlay overlayBack; + + public class GraphicOverlay + { + public GraphicData graphicDataDefault; + public GraphicData graphicDataFemale; + public GraphicData graphicDataMale; + + public Vector3 offsetDefault = Vector3.zero; + public Vector3 offsetFemale = Vector3.zero; + public Vector3 offsetMale = Vector3.zero; + + public List allVariants; + + public string stringDelimiter = "_"; + + } + public GraphicOverlay GetOverlay(Rot4 dir) + { + if (dir == Rot4.South) + { + return overlayFront; + } + if (dir == Rot4.North) + { + return overlayBack; + } + return overlaySide; + } + + public CompProperties_Overlay() + { + compClass = typeof(CompOverlay); + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Concepts/GUC_ConceptDefOf.cs b/1.4/Source/Giddy-up-Core/Concepts/GUC_ConceptDefOf.cs new file mode 100644 index 0000000..4cf0252 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Concepts/GUC_ConceptDefOf.cs @@ -0,0 +1,14 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace GiddyUpCore.Concepts +{ + [DefOf] + class GUC_ConceptDefOf + { + public static ConceptDef GUC_Animal_Handling; + } +} diff --git a/1.4/Source/Giddy-up-Core/DictAnimalRecordHandler.cs b/1.4/Source/Giddy-up-Core/DictAnimalRecordHandler.cs new file mode 100644 index 0000000..e60508c --- /dev/null +++ b/1.4/Source/Giddy-up-Core/DictAnimalRecordHandler.cs @@ -0,0 +1,47 @@ +using GiddyUpCore.Utilities; +using HugsLib.Settings; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace GiddyUpCore +{ + public class DictAnimalRecordHandler : SettingHandleConvertible + { + public Dictionary inner = new Dictionary(); + public Dictionary InnerList { get { return inner; } set { inner = value; } } + + public override void FromString(string settingValue) + { + inner = new Dictionary(); + if (!settingValue.Equals(string.Empty)) + { + foreach (string str in settingValue.Split('|')) + { + string[] split = str.Split(','); + if(split.Count() < 4) //ensures that it works for users that still have old AnimalRecords saved. + { + inner.Add(str.Split(',')[0], new AnimalRecord(Convert.ToBoolean(str.Split(',')[1]), Convert.ToBoolean(str.Split(',')[2]), "")); + } + else + { + inner.Add(str.Split(',')[0], new AnimalRecord(Convert.ToBoolean(str.Split(',')[1]), Convert.ToBoolean(str.Split(',')[2]), str.Split(',')[3])); + } + } + } + } + + public override string ToString() + { + List strings = new List(); + foreach (KeyValuePair item in inner) + { + strings.Add(item.Key +","+item.Value.ToString()); + } + + return inner != null ? String.Join("|", strings.ToArray()) : ""; + } + } + +} diff --git a/1.4/Source/Giddy-up-Core/GiddyUpCore.csproj b/1.4/Source/Giddy-up-Core/GiddyUpCore.csproj new file mode 100644 index 0000000..c01e4bc --- /dev/null +++ b/1.4/Source/Giddy-up-Core/GiddyUpCore.csproj @@ -0,0 +1,156 @@ + + + + Debug + AnyCPU + {8092BA5D-6451-4BA3-A1F5-914AC774A8B3} + Library + Properties + GiddyUpCore + GiddyUpCore + net472 + 512 + false + false + false + + + + false + none + false + ..\..\Assemblies\ + DEBUG;TRACE + prompt + 4 + false + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.0.3 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + 10.0.1 + runtime + compile; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + ..\..\Assemblies\0MultiplayerAPI.dll + False + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + False + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + False + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll + False + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll + False + + + + + $(PkgKrafs_Rimworld_Ref)\ref\net472\Assembly-CSharp.dll + $(PkgKrafs_Rimworld_Ref)\ref\net472\ + $(PubliciseOutputPath)Assembly-CSharp_publicised.dll + + + + + false + $(AssemblyCSharp_Publicised) + true + false + + + + + + + + + + \ No newline at end of file diff --git a/1.4/Source/Giddy-up-Core/GiddyUpCore.sln b/1.4/Source/Giddy-up-Core/GiddyUpCore.sln new file mode 100644 index 0000000..c8a9dc5 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/GiddyUpCore.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.16 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GiddyUpCore", "GiddyUpCore.csproj", "{8092BA5D-6451-4BA3-A1F5-914AC774A8B3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8092BA5D-6451-4BA3-A1F5-914AC774A8B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8092BA5D-6451-4BA3-A1F5-914AC774A8B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8092BA5D-6451-4BA3-A1F5-914AC774A8B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8092BA5D-6451-4BA3-A1F5-914AC774A8B3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {90CEBB6F-C385-4B55-A4D3-664D4E3C7466} + EndGlobalSection +EndGlobal diff --git a/1.4/Source/Giddy-up-Core/Harmony/ArmorUtility.cs b/1.4/Source/Giddy-up-Core/Harmony/ArmorUtility.cs new file mode 100644 index 0000000..420840d --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/ArmorUtility.cs @@ -0,0 +1,32 @@ +using GiddyUpCore.Utilities; +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(ArmorUtility), "ApplyArmor")] + class ArmorUtility_ApplyArmor + { + static void Postfix(ref float armorRating, Pawn pawn) + { + + if (IsMountableUtility.IsCurrentlyMounted(pawn) && pawn.def.GetModExtension() is CustomStatsPatch modExt) + { + armorRating *= modExt.armorModifier; + } + } + static void Postfix(ref float damAmount, Pawn pawn, ref bool metalArmor) + { + + if (IsMountableUtility.IsCurrentlyMounted(pawn) && pawn.def.GetModExtension() is CustomStatsPatch modExt) + { + damAmount /= modExt.armorModifier; + metalArmor = modExt.useMetalArmor; + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/Building_Door.cs b/1.4/Source/Giddy-up-Core/Harmony/Building_Door.cs new file mode 100644 index 0000000..7a0f18d --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Building_Door.cs @@ -0,0 +1,48 @@ +using GiddyUpCore.Jobs; +using GiddyUpCore.Storage; +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(Building_Door), "get_BlockedOpenMomentary")] + static class Building_Door_get_BlockedOpenMomentary + { + static void Postfix(Building_Door __instance, ref bool __result) + { + if (__result == true) //if true, check for false positives + { + List thingList = __instance.Position.GetThingList(__instance.Map); + for (int i = 0; i < thingList.Count; i++) + { + Thing thing = thingList[i]; + if (thing.def.category == ThingCategory.Item) + { + __result = true; + return; + } + else if(thing.def.category == ThingCategory.Pawn) //ignore mounted animals when determining whether door is blocked + { + Pawn pawn = thing as Pawn; + if (pawn.CurJob != null && pawn.CurJob.def == GUC_JobDefOf.Mounted) + { + __result = false; //dont return, blocking things can still be found + } + else + { + __result = true; + return; + } + } + } + } + + } + } + +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/GenDraw_DrawAimPie.cs b/1.4/Source/Giddy-up-Core/Harmony/GenDraw_DrawAimPie.cs new file mode 100644 index 0000000..57796c9 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/GenDraw_DrawAimPie.cs @@ -0,0 +1,47 @@ +using GiddyUpCore.Storage; +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Harmony +{ + /* + [HarmonyPatch(typeof(GenDraw), "DrawAimPie")] + static class GenDraw_DrawAimPie + { + + static bool Prefix(ref Thing shooter, ref LocalTargetInfo target, ref int degreesWide, ref float offsetDist) + { + if (!(shooter is Pawn)) + { + return true; + } + Pawn pawn = shooter as Pawn; + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + + if(pawnData.drawOffset > -1){ + float facing = 0f; + if (target.Cell != shooter.Position) + { + if (target.Thing != null) + { + facing = (target.Thing.DrawPos - shooter.Position.ToVector3Shifted()).AngleFlat(); + } + else + { + facing = (target.Cell - shooter.Position).AngleFlat; + } + } + GenDraw.DrawAimPieRaw(shooter.DrawPos + new Vector3(0f, offsetDist, pawnData.drawOffset), facing, degreesWide); + return false; + } + return true; + + } + } + */ +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/PawnUIOverlay.cs b/1.4/Source/Giddy-up-Core/Harmony/PawnUIOverlay.cs new file mode 100644 index 0000000..6a58c81 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/PawnUIOverlay.cs @@ -0,0 +1,29 @@ +using GiddyUpCore.Storage; +using GiddyUpCore.Utilities; +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(PawnUIOverlay), "DrawPawnGUIOverlay")] + class PawnUIOverlay_DrawPawnGUIOverlay + { + static bool Prefix(PawnUIOverlay __instance) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue() as Pawn; + if (pawn.GetExtendedPawnData() is ExtendedPawnData data && data.mount != null) + { + Vector2 pos = GenMapUI.LabelDrawPosFor(pawn, -(data.drawOffset + 0.6f)); + GenMapUI.DrawPawnLabel(pawn, pos, 1f, 9999f, null, GameFont.Tiny, true, true); + return false; + } + return true; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/PawnUtility.cs b/1.4/Source/Giddy-up-Core/Harmony/PawnUtility.cs new file mode 100644 index 0000000..49ed02d --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/PawnUtility.cs @@ -0,0 +1,26 @@ +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(PawnUtility), "TrySpawnHatchedOrBornPawn")] + class PawnUtility_TrySpawnHatchedOrBornPawn + { + static void Postfix(Pawn pawn, Thing motherOrEgg) + { + if(motherOrEgg is Pawn mother) + { + var pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + var motherData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(mother); + pawnData.mountableByAnyone = motherData.mountableByAnyone; + pawnData.mountableByMaster = motherData.mountableByMaster; + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/Pawn_DrawTracker_get_DrawPos.cs b/1.4/Source/Giddy-up-Core/Harmony/Pawn_DrawTracker_get_DrawPos.cs new file mode 100644 index 0000000..66ea1eb --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Pawn_DrawTracker_get_DrawPos.cs @@ -0,0 +1,78 @@ +using GiddyUpCore.Storage; +using GiddyUpCore.Utilities; +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Harmony +{ + + [HarmonyPatch(typeof(Pawn_DrawTracker), "get_DrawPos")] + //[HarmonyPatch(new Type[] { typeof(Vector3), typeof(bool) })] + static class Pawn_DrawTracker_get_DrawPos + { + static void Postfix(Pawn_DrawTracker __instance, ref Vector3 __result, ref Pawn ___pawn) + { + Vector3 drawLoc = __result; + ExtendedDataStorage store = Base.Instance.GetExtendedDataStorage(); + + if (store == null) + { + return; + } + ExtendedPawnData pawnData = store.GetExtendedDataFor(___pawn); + + if (pawnData != null && pawnData.mount != null) + { + drawLoc = pawnData.mount.Drawer.DrawPos; + + if (pawnData.drawOffset != -1) + { + drawLoc.z = pawnData.mount.Drawer.DrawPos.z + pawnData.drawOffset; + } + if (pawnData.mount.def.HasModExtension()) + { + drawLoc += AddCustomOffsets(___pawn, pawnData); + } + if (___pawn.Rotation == Rot4.South) + { + AnimalRecord value; + bool found = Base.drawSelecter.Value.InnerList.TryGetValue(pawnData.mount.def.defName, out value); + //if (found && value.isSelected) + //{ + // drawLoc.y = pawnData.mount.Drawer.DrawPos.y - 1; + //} + } + __result = drawLoc; + __result.y += 0.1f; + } + //if (IsMountableUtility.IsCurrentlyMounted(pawn)) + //{ + // __result.y -= 5; + //} + } + + private static Vector3 AddCustomOffsets(Pawn __instance, ExtendedPawnData pawnData) + { + DrawingOffsetPatch customOffsets = pawnData.mount.def.GetModExtension(); + if (__instance.Rotation == Rot4.North) + { + return customOffsets.northOffset; + } + if (__instance.Rotation == Rot4.South) + { + return customOffsets.southOffset; + } + if (__instance.Rotation == Rot4.East) + { + return customOffsets.eastOffset; + } + return customOffsets.westOffset; + } + } + +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/Pawn_HealthTracker.cs b/1.4/Source/Giddy-up-Core/Harmony/Pawn_HealthTracker.cs new file mode 100644 index 0000000..e211248 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Pawn_HealthTracker.cs @@ -0,0 +1,67 @@ +using GiddyUpCore.Jobs; +using GiddyUpCore.Storage; +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(Pawn_HealthTracker), "MakeDowned")] + static class Pawn_HealthTracker_MakeDowned + { + static void Postfix(Pawn_HealthTracker __instance) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue() as Pawn; + + //If an enemy animal is downed, make it a wild animal so it can be rescued. + if (pawn.RaceProps.Animal && pawn.Faction != null && !pawn.Faction.IsPlayer) + { + pawn.SetFaction(null); + } + + //If the owner of an NPC mount is downed, let the animal flee + if (pawn.RaceProps.Humanlike && pawn.Faction != null && !pawn.Faction.IsPlayer) + { + ExtendedDataStorage dataStorage = Base.Instance.GetExtendedDataStorage(); + if(dataStorage != null) + { + ExtendedPawnData pawnData = dataStorage.GetExtendedDataFor(pawn); + if (pawnData != null && pawnData.owning != null && !pawnData.owning.Dead && pawnData.owning.Spawned && pawnData.owning.RaceProps.Animal) + { + pawnData.owning.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.PanicFlee); + } + } + } + } + + } + [HarmonyPatch(typeof(Pawn_HealthTracker), "SetDead")] + static class Pawn_HealthTracker_SetDead + { + static void Postfix(Pawn_HealthTracker __instance, ref Pawn ___pawn) + { + + //If the owner of an NPC mount is downed, let the animal flee + if (___pawn.RaceProps.Humanlike && ___pawn.Faction != null && !___pawn.Faction.IsPlayer) + { + ExtendedDataStorage dataStorage = Base.Instance.GetExtendedDataStorage(); + if (dataStorage != null) + { + ExtendedPawnData pawnData = dataStorage.GetExtendedDataFor(___pawn); + if (pawnData != null && pawnData.owning != null && !pawnData.owning.Dead && pawnData.owning.Spawned) + { + pawnData.owning.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.PanicFlee); + } + } + } + } + } + + + +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/Pawn_JobTracker.cs b/1.4/Source/Giddy-up-Core/Harmony/Pawn_JobTracker.cs new file mode 100644 index 0000000..3601e03 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Pawn_JobTracker.cs @@ -0,0 +1,92 @@ +using GiddyUpCore.Jobs; +using GiddyUpCore.Storage; +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(Pawn_JobTracker), "StartJob")] + static class Pawn_JobTracker_StartJob + { + static bool Prefix(Pawn_JobTracker __instance) + { + if (__instance.curDriver != null && __instance.curDriver.pawn != null && __instance.curDriver.pawn.CurJob != null && __instance.curDriver.pawn.CurJob.def == GUC_JobDefOf.Mounted) + { + return false; + } + return true; + } + } + + [HarmonyPatch(typeof(Pawn_JobTracker), "DetermineNextJob")] + static class Pawn_JobTracker_DetermineNextJob + { + static void Postfix(Pawn_JobTracker __instance, ref ThinkResult __result) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue() as Pawn; + //Remove mount in case the mount somehow isn't mounted by pawn. + if (pawn.IsColonist) + { + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + if (pawnData.mount != null) + { + if (pawnData.mount.CurJob == null || pawnData.mount.CurJobDef != GUC_JobDefOf.Mounted) + { + pawnData.reset(); + } + else if (pawnData.mount.jobs.curDriver is JobDriver_Mounted driver && driver.Rider != pawn) + { + pawnData.reset(); + } + } + } + //If a hostile pawn owns an animal, make sure it mounts it whenever possible + + if (pawn.RaceProps.Humanlike && pawn.Faction != null && pawn.Faction.HostileTo(Faction.OfPlayer) && !pawn.Downed && !pawn.IsBurning() && !pawn.IsPrisoner) + { + + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + if (pawnData.owning == null || pawnData.owning.Faction != pawn.Faction || pawnData.mount != null || pawnData.owning.Downed || pawnData.owning.Dead || !pawnData.owning.Spawned || pawnData.owning.IsBurning()) + { + return; + } + QueuedJob qJob = pawn.jobs.jobQueue.FirstOrFallback(null); + if (qJob != null && (qJob.job.def == GUC_JobDefOf.Mount)) + { + return; + } + if (__result.Job.def == GUC_JobDefOf.Mount) + { + return; + } + + Job mountJob = new Job(GUC_JobDefOf.Mount, pawnData.owning); + mountJob.count = 1; + __instance.jobQueue.EnqueueFirst(mountJob); + + + } + } + } + [HarmonyPatch(typeof(Pawn_JobTracker), "Notify_MasterDraftedOrUndrafted")] + static class Pawn_JobTracker_Notify_MasterDraftedOrUndrafted + { + static bool Prefix(Pawn_JobTracker __instance) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue() as Pawn; + if (pawn != null && pawn.CurJob != null && pawn.CurJob.def == GUC_JobDefOf.Mounted) + { + return false; + } + return true; + + } + + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/Pawn_PlayerSettings .cs b/1.4/Source/Giddy-up-Core/Harmony/Pawn_PlayerSettings .cs new file mode 100644 index 0000000..7abcac4 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Pawn_PlayerSettings .cs @@ -0,0 +1,102 @@ +using GiddyUpCore.Jobs; +using HarmonyLib; +using RimWorld; +using Multiplayer.API; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Text; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Harmony +{ + + [HarmonyPatch(typeof(Pawn_PlayerSettings), "GetGizmos")] + static class Pawn_PlayerSettings_GetGizmos + { + //purpose: Make sure animals don't throw of their rider when released. + + static bool Prefix(Pawn_PlayerSettings __instance, ref IEnumerable __result) + { + __result = helpIterator(__instance); + return false; + } + //Almost literal copy of vanilla code. Only added a check around the EndCurrentJob call + static IEnumerable helpIterator(Pawn_PlayerSettings __instance) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue() as Pawn; + if (pawn.Drafted) + { + if (PawnUtility.SpawnedMasteredPawns(pawn).Any((Pawn p) => p.training.HasLearned(TrainableDefOf.Release))) + { + yield return new Command_Toggle + { + defaultLabel = "CommandReleaseAnimalsLabel".Translate(), + defaultDesc = "CommandReleaseAnimalsDesc".Translate(), + icon = TexCommand.ReleaseAnimals, + hotKey = KeyBindingDefOf.Misc7, + isActive = (() => __instance.animalsReleased), + toggleAction = () => UpdateAnimalRelease(pawn, __instance) + + }; + } + } + } + + [SyncMethod] + private static void UpdateAnimalRelease(Pawn pawn, Pawn_PlayerSettings __instance) + { + __instance.animalsReleased = !__instance.animalsReleased; + if (__instance.animalsReleased) + { + foreach (Pawn current in PawnUtility.SpawnedMasteredPawns(pawn)) + { + if (current.caller != null) + { + current.caller.Notify_Released(); + } + if (current.CurJob.def != GUC_JobDefOf.Mounted) + { + current.jobs.EndCurrentJob(JobCondition.InterruptForced, true); + } + } + } + } + + //I'd preferably use this transpiler, but because the target method is an iterator method this doesn't work like it normally does. Therefore the prefix + /* + static IEnumerable Transpiler(IEnumerable instructions) + { + //Log.Message("calling transpiler"); + + var instructionsList = new List(instructions); + for (var i = 0; i < instructionsList.Count; i++) + { + + //Log.Message(instructionsList[i].labels.ToString()); + if(instructionsList[i].operand != null) + //Log.Message(instructionsList[i].operand.ToString()); + + if (instructionsList[i].operand == typeof(Pawn_JobTracker).GetMethod("EndCurrentJob")) + { + //Log.Message("found EndCurrentJob"); + yield return new CodeInstruction(OpCodes.Call, typeof(Pawn_PlayerSettings_GetGizmos).GetMethod("EndCurrentJob"));//Injected code + } + else + { + yield return instructionsList[i]; + } + + } + } + public static void EndCurrentJob(Pawn pawn, JobCondition condition, bool startNewJob = true) + { + //Log.Message("EndCurrentJob called, pawn: " + pawn.Name); + } + */ + + } + +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/Pawn_RotationTracker.cs b/1.4/Source/Giddy-up-Core/Harmony/Pawn_RotationTracker.cs new file mode 100644 index 0000000..6723c07 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Pawn_RotationTracker.cs @@ -0,0 +1,80 @@ +using GiddyUpCore.Jobs; +using GiddyUpCore.Storage; +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Reflection.Emit; +using System.Text; +using Verse; + +namespace GiddyUpCore.Harmony +{ + /* PATCHED FUNCTION PREVIEW + + + set + { + if (value == rotationInt) + { + return; + } + if (Spawned && (def.size.x != 1 || def.size.z != 1)) + { + if (def.AffectsRegions) + { + Log.Warning("Changed rotation of a spawned non-single-cell thing which affects regions. This is not supported."); + } + RegionListersUpdater.DeregisterInRegions(this, Map); + Map.thingGrid.Deregister(this); + } + rotationInt = value; + + -> PATCH IS INJECTED HERE <- + + if (Spawned && (def.size.x != 1 || def.size.z != 1)) + { + Map.thingGrid.Register(this); + RegionListersUpdater.RegisterInRegions(this, Map); + if (def.AffectsReachability) + { + Map.reachability.ClearCache(); + } + } + } + + */ + + [HarmonyPatch(typeof(Thing), "Rotation", MethodType.Setter)] + public static class Pawn_RotationTracker_UpdateRotation + { + public static MethodInfo mChanged = AccessTools.Method(typeof(Pawn_RotationTracker_UpdateRotation), nameof(Pawn_RotationTracker_UpdateRotation.RotChanged)); + + public static void RotChanged(Thing __instance) + { + if (!(__instance is Pawn)) { return; } + + var pawn = __instance as Pawn; + if (!__instance.Destroyed && pawn.jobs != null && pawn.jobs.curDriver is JobDriver_Mounted jobDriver) + { + __instance.Rotation = jobDriver.Rider.Rotation; + } + } + + static IEnumerable Transpiler(IEnumerable instructions) + { + var codes = instructions.ToList(); + + for (int i = 0; i < codes.Count; i++) + { + yield return codes[i]; + if (codes[i].opcode == OpCodes.Stfld) + { + yield return new CodeInstruction(OpCodes.Ldarg_0); + yield return new CodeInstruction(OpCodes.Call, mChanged); + } + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/Pawn_TicksPerMove.cs b/1.4/Source/Giddy-up-Core/Harmony/Pawn_TicksPerMove.cs new file mode 100644 index 0000000..e4ecd37 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Pawn_TicksPerMove.cs @@ -0,0 +1,37 @@ +using GiddyUpCore.Storage; +using GiddyUpCore.Utilities; +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Harmony +{ + /* + [HarmonyPatch(typeof(Pawn), "TicksPerMove")] + static class Pawn_TicksPerMove + { + [HarmonyPriority(Priority.Low)] + static void Postfix(Pawn __instance, ref bool diagonal, ref int __result) + { + + if(Base.Instance.GetExtendedDataStorage() == null) + { + return; + } + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(__instance); + if (pawnData.mount != null) + { + __result = TicksPerMoveUtility.adjustedTicksPerMove(__instance, pawnData.mount, diagonal); + } + + + } + } + */ +} + diff --git a/1.4/Source/Giddy-up-Core/Harmony/Projectile_Launch.cs b/1.4/Source/Giddy-up-Core/Harmony/Projectile_Launch.cs new file mode 100644 index 0000000..a8ef56a --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/Projectile_Launch.cs @@ -0,0 +1,34 @@ +using GiddyUpCore.Storage; +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Harmony +{ + /* + [HarmonyPatch(typeof(Projectile), "Launch")] + [HarmonyPriority(Priority.High)] + [HarmonyPatch(new Type[] { typeof(Thing), typeof(Vector3), typeof(LocalTargetInfo), typeof(LocalTargetInfo), typeof(ProjectileHitFlags), typeof(Thing), typeof(ThingDef) })] + static class Projectile_Launch + { + static void Prefix(ref Thing launcher, ref Vector3 origin) + { + if (!(launcher is Pawn)) + { + return; + } + Pawn pawn = launcher as Pawn; + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + + if (pawnData.drawOffset > -1) + { + origin.z += pawnData.drawOffset; + } + } + } + */ +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/SelfDefenceUtility.cs b/1.4/Source/Giddy-up-Core/Harmony/SelfDefenceUtility.cs new file mode 100644 index 0000000..f8579ec --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/SelfDefenceUtility.cs @@ -0,0 +1,25 @@ +using GiddyUpCore.Jobs; +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(SelfDefenseUtility), "ShouldFleeFrom")] + class SelfDefenceUtility_ShouldFleeFrom + { + static bool Prefix(Pawn pawn, ref bool __result) + { + if(pawn.CurJob != null && pawn.CurJob.def == GUC_JobDefOf.Mounted) + { + __result = false; + return false; + } + return true; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/ShieldBelt_DrawWornExtras.cs b/1.4/Source/Giddy-up-Core/Harmony/ShieldBelt_DrawWornExtras.cs new file mode 100644 index 0000000..1e705c5 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/ShieldBelt_DrawWornExtras.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; +using HarmonyLib; +using RimWorld; +using GiddyUpCore.Storage; + +namespace GiddyUpCore.Harmony +{ + //TODO: remove this? + /* + [HarmonyPatch(typeof(ShieldBelt), "DrawWornExtras")] + static class ShieldBelt_DrawWornExtras + { + static bool Prefix(ShieldBelt __instance) + { + bool ShouldDisplay = Traverse.Create(__instance).Property("ShouldDisplay").GetValue(); + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(__instance.Wearer); + Pawn mount = pawnData.mount; + + if (mount == null) + { + return true; + } + + if (__instance.ShieldState == ShieldState.Active && ShouldDisplay) + { + float energy = Traverse.Create(__instance).Field("energy").GetValue(); + int lastAbsorbDamageTick = Traverse.Create(__instance).Field("lastAbsorbDamageTick").GetValue(); + Vector3 impactAngleVect = Traverse.Create(__instance).Field("impactAngleVect").GetValue(); + Material BubbleMat = MaterialPool.MatFrom("Other/ShieldBubble", ShaderDatabase.Transparent); + ; + + float num = Mathf.Lerp(1.2f, 1.55f, energy); + Vector3 vector = __instance.Wearer.Drawer.DrawPos; + vector.z += pawnData.drawOffset; + vector.y = Altitudes.AltitudeFor(AltitudeLayer.MoteOverhead); + int num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick; + if (num2 < 8) + { + float num3 = (float)(8 - num2) / 8f * 0.05f; + vector += impactAngleVect * num3; + num -= num3; + } + float angle = (float)Rand.Range(0, 360); + Vector3 s = new Vector3(num, 1f, num); + Matrix4x4 matrix = default(Matrix4x4); + matrix.SetTRS(vector, Quaternion.AngleAxis(angle, Vector3.up), s); + Graphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0); + } + return false; + } + } + */ + +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/VerbProperties_AdjustedAccuracy.cs b/1.4/Source/Giddy-up-Core/Harmony/VerbProperties_AdjustedAccuracy.cs new file mode 100644 index 0000000..cca12aa --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/VerbProperties_AdjustedAccuracy.cs @@ -0,0 +1,47 @@ +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(VerbProperties), "AdjustedAccuracy")] + static class VerbProperties_AdjustedAccuracy + { + static void Postfix(VerbProperties __instance, ref Thing equipment, ref float __result) + { + + if (equipment == null || equipment.holdingOwner == null || !(equipment.holdingOwner.Owner is Pawn_EquipmentTracker)) + { + return; + } + if (equipment == null || equipment.holdingOwner == null || equipment.holdingOwner.Owner == null) + { + return; + } + Pawn_EquipmentTracker eqt = (Pawn_EquipmentTracker)equipment.holdingOwner.Owner; + Pawn pawn = eqt.pawn; + if (pawn == null || pawn.stances == null) + { + return; + } + Pawn mount = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn).mount; + if (mount == null) + { + return; + } + float adjustedLevel = 5; + if(pawn.skills != null && pawn.skills.GetSkill(SkillDefOf.Animals) is SkillRecord record) + { + adjustedLevel = record.levelInt - Mathf.RoundToInt(mount.GetStatValue(StatDefOf.MinimumHandlingSkill, true)); + } + float animalHandlingOffset = adjustedLevel * Base.handlingAccuracyImpact; + float factor = (100f - ((float)Base.accuracyPenalty.Value - animalHandlingOffset)) / 100f; + __result *= factor; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/WorkGiver_TakeToPen.cs b/1.4/Source/Giddy-up-Core/Harmony/WorkGiver_TakeToPen.cs new file mode 100644 index 0000000..7f61e84 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/WorkGiver_TakeToPen.cs @@ -0,0 +1,34 @@ +using GiddyUpCore.Storage; +using GiddyUpCore.Utilities; +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(WorkGiver_TakeToPen), "JobOnThing")] + class WorkGiver_TakeToPen_JobOnThing + { + static bool Prefix(WorkGiver_Train __instance, Pawn pawn, Thing t, ref Job __result) + { + if (t is Pawn animal && animal.RaceProps.Animal) + { + if (IsMountableUtility.IsCurrentlyMounted(animal)) + { + __result = null; + return false; + } + } + + + + return true; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Harmony/WorkGiver_Train.cs b/1.4/Source/Giddy-up-Core/Harmony/WorkGiver_Train.cs new file mode 100644 index 0000000..e5afd9d --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Harmony/WorkGiver_Train.cs @@ -0,0 +1,26 @@ +using GiddyUpCore.Utilities; +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Harmony +{ + [HarmonyPatch(typeof(WorkGiver_Train), "JobOnThing")] + class WorkGiver_Train_JobOnThing + { + static bool Prefix(WorkGiver_Train __instance, Pawn pawn, Thing t, ref Job __result) + { + if (t is Pawn animal && animal.RaceProps.Animal && IsMountableUtility.IsCurrentlyMounted(animal)) + { + __result = null; + return false; + } + return true; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Jobs/GUC_JobDefOf.cs b/1.4/Source/Giddy-up-Core/Jobs/GUC_JobDefOf.cs new file mode 100644 index 0000000..ec38d52 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Jobs/GUC_JobDefOf.cs @@ -0,0 +1,18 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore.Jobs +{ + [DefOf] + public static class GUC_JobDefOf + { + public static JobDef Mount; + public static JobDef Mounted; + public static JobDef Dismount; + } + +} diff --git a/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Dismount.cs b/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Dismount.cs new file mode 100644 index 0000000..1a1df6e --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Dismount.cs @@ -0,0 +1,62 @@ +using GiddyUpCore.Storage; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Jobs +{ + class JobDriver_Dismount : JobDriver + { + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return true; + } + protected override IEnumerable MakeNewToils() + { + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + + //yield return TalkToAnimal(pawnData.mount); + yield return dismount(); + } + private Toil TalkToAnimal(Pawn animal) + { + Toil toil = new Toil(); + toil.AddFailCondition(delegate { return animal.CurJob.def != GUC_JobDefOf.Mounted; }); + toil.initAction = delegate + { + Pawn actor = toil.GetActor(); + actor.interactions.TryInteractWith(animal, InteractionDefOf.AnimalChat); + }; + toil.defaultCompleteMode = ToilCompleteMode.Delay; + toil.defaultDuration = 150; + return toil; + } + + private Toil dismount() + { + ExtendedDataStorage store = Base.Instance.GetExtendedDataStorage(); + + Toil toil = new Toil(); + toil.defaultCompleteMode = ToilCompleteMode.Never; + toil.initAction = delegate { + if(store == null) + { + ReadyForNextToil(); + return; + } + ExtendedPawnData pawnData = store.GetExtendedDataFor(pawn); + if(pawnData.mount != null) + { + pawnData.mount.jobs.EndCurrentJob(JobCondition.InterruptForced); + } + ReadyForNextToil(); + }; + return toil; + + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Mount.cs b/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Mount.cs new file mode 100644 index 0000000..c351130 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Mount.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; +using Verse.AI; +using GiddyUpCore.Utilities; +using GiddyUpCore.Storage; +using RimWorld; + +namespace GiddyUpCore.Jobs +{ + public class JobDriver_Mount : JobDriver + { + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return true; + } + public Pawn Mount { get { return job.targetA.Thing as Pawn; } } + + protected override IEnumerable MakeNewToils() + { + job.canBashDoors = true; + job.canBashFences = true; + this.FailOnDespawnedNullOrForbidden(TargetIndex.A); + this.FailOnDowned(TargetIndex.A); + + yield return letMountParticipate(); + //yield return Toils_General.Wait(1);//wait one tick to ensure animal is waiting to get mounted before proceding. + yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); + if(this.pawn.interactions != null) + { + yield return Toils_Interpersonal.WaitToBeAbleToInteract(this.pawn); + } + yield return TalkToAnimal(TargetIndex.A); + } + private Toil letMountParticipate() + { + Toil toil = new Toil(); + + toil.defaultCompleteMode = ToilCompleteMode.Never; + toil.initAction = delegate + { + Mount.jobs.StopAll(); + Mount.pather.StopDead(); + Job jobAnimal = new Job(GUC_JobDefOf.Mounted, pawn); + jobAnimal.count = 1; + Mount.jobs.TryTakeOrderedJob(jobAnimal); + ReadyForNextToil(); + }; + return toil; + } + + private Toil TalkToAnimal(TargetIndex tameeInd) + { + Toil toil = new Toil(); + toil.AddFailCondition(delegate { return Mount.CurJob.def != GUC_JobDefOf.Mounted; }); + //toil.AddFailCondition(delegate { return Mount.CurJob.targetA.Thing != pawn; }); + toil.initAction = delegate + { + Pawn actor = toil.GetActor(); + if(actor.interactions != null) + { + actor.interactions.TryInteractWith(Mount, InteractionDefOf.AnimalChat); + } + }; + toil.defaultCompleteMode = ToilCompleteMode.Delay; + toil.defaultDuration = 150; + toil.AddFinishAction(delegate + { + FinishAction(); + }); + return toil; + } + + public void FinishAction() + { + if (Mount.CurJob != null && Mount.CurJob.def == GUC_JobDefOf.Mounted) + { + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(this.pawn); + ExtendedPawnData animalData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(Mount); + pawnData.mount = Mount; + TextureUtility.setDrawOffset(pawnData); + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Mounted.cs b/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Mounted.cs new file mode 100644 index 0000000..aa0394f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Jobs/JobDriver_Mounted.cs @@ -0,0 +1,224 @@ +using GiddyUpCore.Storage; +using RimWorld; +using RimWorld.Planet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Jobs +{ + public class JobDriver_Mounted : JobDriver + { + public Pawn Rider { get { return job.targetA.Thing as Pawn; } } + ExtendedPawnData riderData; + public bool interrupted = false; + bool isFinished = false; + + protected override IEnumerable MakeNewToils() + { + this.FailOnDespawnedNullOrForbidden(TargetIndex.A); + yield return waitForRider(); + yield return delegateMovement(); + } + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return true; + } + + + public bool shouldCancelJob(ExtendedPawnData riderData) + { + if (interrupted) + { + //Log.Message("cancel job, shouldEnd called"); + return true; + } + + if (riderData == null || riderData.mount == null) + { + //Log.Message("riderData is null or riderData.mount is null"); + return true; + } + + Thing thing = pawn as Thing; + if (Rider.Downed || Rider.Dead || pawn.Downed || pawn.Dead || pawn.IsBurning() || Rider.IsBurning() || Rider.GetPosture() != PawnPosture.Standing) + { + //Log.Message("cancel job, rider downed or dead"); + return true; + } + if (pawn.InMentalState || (Rider.InMentalState && Rider.MentalState.def != MentalStateDefOf.PanicFlee)) + { + //Log.Message("cancel job, rider or mount in mental state"); + return true; + } + if (!Rider.Spawned) + { + if (!Rider.IsColonist && !Rider.Dead) + { + //Log.Message("rider not spawned, despawn"); + pawn.ExitMap(false, CellRect.WholeMap(base.Map).GetClosestEdge(this.pawn.Position)); + return true; + } + else if(Rider.IsColonist && Rider.GetCaravan() != null) + { + //Log.Message("rider moved to map, despawn"); + pawn.ExitMap(true, CellRect.WholeMap(base.Map).GetClosestEdge(this.pawn.Position)); + return true; + } + else + { + //Log.Message("rider died, dismount"); + return true; + } + } + + if (!Rider.Drafted && Rider.IsColonist) //TODO refactor this as a postfix in Giddy-up Caravan. + { + if((Rider.mindState != null && Rider.mindState.duty != null && (Rider.mindState.duty.def == DutyDefOf.TravelOrWait || Rider.mindState.duty.def == DutyDefOf.TravelOrLeave || Rider.mindState.duty.def == DutyDefOf.PrepareCaravan_GatherAnimals || Rider.mindState.duty.def == DutyDefOf.PrepareCaravan_GatherDownedPawns))) + { + if(riderData.caravanMount == pawn) + { + return false; + } + return true; + //if forming caravan, stay mounted. + } + else if(riderData.owning == pawn) + { + //Log.Message("cancel job, rider not drafted while being colonist"); + //Log.Message("riderData.owning: " + riderData.owning); + return false; + } + else + { + return true; + } + } + + + + if (riderData.mount == null) + { + //Log.Message("cancel job, rider has no mount"); + return true; + } + return false; + + } + + private Toil waitForRider() + { + Toil toil = new Toil(); + + toil.defaultCompleteMode = ToilCompleteMode.Never; + toil.tickAction = delegate + { + //Log.Message("waiting for rider"); + + if (Rider == null || Rider.Dead || !Rider.Spawned || Rider.Downed || Rider.InMentalState) + { + interrupted = true; + ReadyForNextToil(); + return; + } + + riderData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(Rider); + if (riderData.mount != null && riderData.mount == pawn) + { + ReadyForNextToil(); + } + + if (Rider.CurJob.def != GUC_JobDefOf.Mount && Rider.CurJob.def != JobDefOf.Vomit && Rider.CurJob.def != JobDefOf.Wait_MaintainPosture && Rider.CurJob.def != JobDefOf.SocialRelax && Rider.CurJob.def != JobDefOf.Wait && riderData.mount == null) + { + //Log.Message("cancel wait for rider, rider is not mounting, curJob: " + Rider.CurJob.def.defName); + interrupted = true; + ReadyForNextToil(); + } + + }; + return toil; + } + + + + public Toil delegateMovement() + { + Toil toil = new Toil(); + toil.defaultCompleteMode = ToilCompleteMode.Never; + + toil.tickAction = delegate + { + if (isFinished) + { + return; + } + riderData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(Rider); + if (shouldCancelJob(riderData)) + { + ReadyForNextToil(); + return; + } + pawn.Drawer.tweener = Rider.Drawer.tweener; + + pawn.Position = Rider.Position; + tryAttackEnemy(); + pawn.Rotation = Rider.Rotation; + }; + + toil.AddFinishAction(delegate + { + + FinishAction(); + }); + + return toil; + + } + + private void FinishAction() + { + isFinished = true; + riderData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(Rider); + riderData.reset(); + pawn.Drawer.tweener = new PawnTweener(pawn); + if (!interrupted) + { + pawn.Position = Rider.Position; + } + + pawn.pather.ResetToCurrentPosition(); + } + + public void tryAttackEnemy() + { + Thing targetThing = null; + + if (Rider == null) + return; + + if (Rider.TargetCurrentlyAimingAt != null) + { + targetThing = Rider.TargetCurrentlyAimingAt.Thing; + } + else if (Rider.CurJob?.def == JobDefOf.AttackMelee && Rider.CurJob.targetA.Thing.HostileTo(Rider)) + { + targetThing = Rider.CurJob.targetA.Thing; + } + if (targetThing != null && targetThing.HostileTo(Rider)) + { + if (pawn.meleeVerbs == null || pawn.meleeVerbs.TryGetMeleeVerb(targetThing) == null || !pawn.meleeVerbs.TryGetMeleeVerb(targetThing).CanHitTarget(targetThing)) + { + pawn.TryStartAttack(targetThing); //Try start ranged attack if possible + } + else + { + pawn.meleeVerbs.TryMeleeAttack(targetThing); + } + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/ModExtensions/AllowedLifeStagesPatch.cs b/1.4/Source/Giddy-up-Core/ModExtensions/AllowedLifeStagesPatch.cs new file mode 100644 index 0000000..589ed00 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/ModExtensions/AllowedLifeStagesPatch.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore +{ + class AllowedLifeStagesPatch : DefModExtension + { + //Can be used in xml patches to allow other life stages than the final one. + + string allowedLifeStagesCSV = ""; + + public List getAllowedLifeStagesAsList() + { + List result = new List(); + if (!allowedLifeStagesCSV.NullOrEmpty()) + { + result = allowedLifeStagesCSV.Split(',').ToList().Select(int.Parse).ToList(); + } + return result; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/ModExtensions/CustomMountsPatch.cs b/1.4/Source/Giddy-up-Core/ModExtensions/CustomMountsPatch.cs new file mode 100644 index 0000000..6280435 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/ModExtensions/CustomMountsPatch.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore +{ + class CustomMountsPatch : DefModExtension + { + public List possibleMountsCSV; + public int mountChance = 0; + public Dictionary possibleMounts = new Dictionary(); + + public void Init() + { + foreach(string mountCSV in possibleMountsCSV) + { + List list = mountCSV.Split(',').ToList(); + if(list.Count == 2) + { + possibleMounts.Add(list[0], int.Parse(list[1])); + } + } + } + + } + + +} diff --git a/1.4/Source/Giddy-up-Core/ModExtensions/CustomStatsPatch.cs b/1.4/Source/Giddy-up-Core/ModExtensions/CustomStatsPatch.cs new file mode 100644 index 0000000..9aacefd --- /dev/null +++ b/1.4/Source/Giddy-up-Core/ModExtensions/CustomStatsPatch.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore +{ + class CustomStatsPatch : DefModExtension + { + public float speedModifier = 1.0f; + public float armorModifier = 1.0f; + public bool useMetalArmor = false; + } +} diff --git a/1.4/Source/Giddy-up-Core/ModExtensions/DrawingOffsetPatch.cs b/1.4/Source/Giddy-up-Core/ModExtensions/DrawingOffsetPatch.cs new file mode 100644 index 0000000..3da5f0f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/ModExtensions/DrawingOffsetPatch.cs @@ -0,0 +1,36 @@ +using GiddyUpCore.Utilities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore +{ + class DrawingOffsetPatch : DefModExtension + { + //Can be used in xml patches to apply custom offsets to how riders are drawn on their animals. + + string northOffsetCSV = ""; + string southOffsetCSV = ""; + string eastOffsetCSV = ""; + string westOffsetCSV = ""; + public Vector3 northOffset = new Vector3(); + public Vector3 southOffset = new Vector3(); + public Vector3 eastOffset = new Vector3(); + public Vector3 westOffset = new Vector3(); + + //Since it is used for drawing pawns, it is expected to be called VERY frequently. Therefore by initting this instead of converting on the fly, possible impact on performance is reduced. + public void Init() + { + northOffset = TextureUtility.ExtractVector3(northOffsetCSV); + southOffset = TextureUtility.ExtractVector3(southOffsetCSV); + eastOffset = TextureUtility.ExtractVector3(eastOffsetCSV); + westOffset = TextureUtility.ExtractVector3(westOffsetCSV); + } + + + + } +} diff --git a/1.4/Source/Giddy-up-Core/ModExtensions/FactionRestrictionsPatch.cs b/1.4/Source/Giddy-up-Core/ModExtensions/FactionRestrictionsPatch.cs new file mode 100644 index 0000000..ffb5b34 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/ModExtensions/FactionRestrictionsPatch.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore +{ + class FactionRestrictionsPatch : DefModExtension + { + //Can be used in xml patches to restrict animals per faction. + string allowedNonWildAnimalsCSV = ""; + string allowedWildAnimalsCSV = ""; + public int mountChance = -1; + public int wildAnimalWeight = -1; + public int nonWildAnimalWeight = -1; + public List getAllowedNonWildAnimalsAsList() + { + return allowedNonWildAnimalsCSV.Split(',').ToList(); + } + public List getAllowedWildAnimalsAsList() + { + return allowedWildAnimalsCSV.Split(',').ToList(); + } + } +} diff --git a/1.4/Source/Giddy-up-Core/ModExtensions/MultiplayerPatch.cs b/1.4/Source/Giddy-up-Core/ModExtensions/MultiplayerPatch.cs new file mode 100644 index 0000000..2505854 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/ModExtensions/MultiplayerPatch.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; +using GiddyUpCore.Storage; +using HarmonyLib; +using Multiplayer.API; +using RimWorld; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.ModExtensions +{ + [StaticConstructorOnStartup] + public static class MultiplayerPatch + { + internal static readonly HarmonyLib.Harmony giddyUpMultiplayerHarmony = null; + + public static Dictionary backward; + public static Dictionary forward; + + static MultiplayerPatch() + { + if (!MP.enabled) + { + return; + } + giddyUpMultiplayerHarmony = new HarmonyLib.Harmony("giddyup.multiplayer.compat"); + + MP.RegisterAll(); + + Type type = AccessTools.TypeByName("GiddyUpCore.Storage.ExtendedDataStorage"); + + giddyUpMultiplayerHarmony.Patch(AccessTools.Constructor(type), + postfix: new HarmonyMethod(typeof(MultiplayerPatch), nameof(ExtendedDataStoragePostfix))); + + giddyUpMultiplayerHarmony.Patch(AccessTools.Method(type, "GetExtendedDataFor", new Type[] { typeof(Pawn) }), + postfix: new HarmonyMethod(typeof(MultiplayerPatch), nameof(GetExtendedDataForPostfix))); + + giddyUpMultiplayerHarmony.Patch(AccessTools.Method(type, "DeleteExtendedDataFor", new Type[] { typeof(Pawn) }), + postfix: new HarmonyMethod(typeof(MultiplayerPatch), nameof(DeleteExtendedDataForPostfix))); + + type = AccessTools.TypeByName("GiddyUpCore.Storage.ExtendedPawnData"); + + MP.RegisterSyncWorker(ExtendedPawnData, type); + + var rngFixMethods = new[] + { + "GiddyUpCore.Utilities.NPCMountUtility:determinePawnKind", + }; + PatchPushPopRand(rngFixMethods); // Needed for other faction pawn arrival + MP.RegisterSyncMethod(typeof(Jobs.JobDriver_Mounted), nameof(Jobs.JobDriver_Mounted.tryAttackEnemy)); // Needed to sync aiming pie + MP.RegisterSyncMethod(typeof(Zones.Designator_GU), nameof(Zones.Designator_GU.ProcessInput)); // Needed to sync placing of Giddy Zones + MP.RegisterSyncMethod(typeof(ExtendedPawnData), nameof(Storage.ExtendedPawnData.reset)); + MP.RegisterSyncMethod(typeof(Jobs.JobDriver_Mounted), nameof(Jobs.JobDriver_Mounted.delegateMovement)); + MP.RegisterSyncMethod(typeof(Jobs.JobDriver_Mount), nameof(Jobs.JobDriver_Mount.FinishAction)); + + MP.RegisterSyncMethod(typeof(Utilities.DrawUtility), nameof(Utilities.DrawUtility.CustomDrawer_Tabs)); // Needed to sync with arbiter START + MP.RegisterSyncMethod(typeof(Utilities.DrawUtility), nameof(Utilities.DrawUtility.CustomDrawer_Filter)); + MP.RegisterSyncMethod(typeof(Utilities.DrawUtility), nameof(Utilities.DrawUtility.filterAnimals)); + MP.RegisterSyncMethod(typeof(Utilities.DrawUtility), nameof(Utilities.DrawUtility.CustomDrawer_MatchingAnimals_active)); + MP.RegisterSyncMethod(typeof(Utilities.TextureUtility), nameof(Utilities.TextureUtility.setDrawOffset)); // END + } + + static void ExtendedDataStoragePostfix() + { + forward = new Dictionary(); + backward = new Dictionary(); + } + + static void GetExtendedDataForPostfix(Pawn pawn, object __result) + { + if (forward != null && !forward.ContainsKey(pawn)) // null check is required in case mod which adds pawn data is removed mid-save + { + forward.Add(pawn, __result); + } + if (backward!= null && !backward.ContainsKey(__result)) + { + backward.Add(__result, pawn); + } + } + + static void DeleteExtendedDataForPostfix(Pawn pawn) + { + if (forward.ContainsKey(pawn)) + { + backward.Remove(forward[pawn]); + forward.Remove(pawn); + } + } + + static void ExtendedPawnData(SyncWorker sync, ref object obj) + { + Pawn pawn = null; + + if (sync.isWriting) + { + pawn = backward[obj]; + + if (pawn != null) + { + sync.Write(pawn); + } + + } + else + { + pawn = sync.Read(); + + obj = forward[pawn]; + } + } + static void FixRNGPre() => Rand.PushState(); + static void FixRNGPos() => Rand.PopState(); + internal static void PatchPushPopRand(MethodBase method, HarmonyMethod transpiler = null) + { + giddyUpMultiplayerHarmony.Patch(method, + prefix: new HarmonyMethod(typeof(MultiplayerPatch), nameof(FixRNGPre)), + postfix: new HarmonyMethod(typeof(MultiplayerPatch), nameof(FixRNGPos)), + transpiler: transpiler); + } + internal static void PatchPushPopRand(string method, HarmonyMethod transpiler = null) + => PatchPushPopRand(AccessTools.Method(method), transpiler); + internal static void PatchPushPopRand(string[] methods, HarmonyMethod transpiler = null) + { + foreach (var method in methods) + { + PatchPushPopRand(AccessTools.Method(method), transpiler); + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Stats/StatPart_Armor.cs b/1.4/Source/Giddy-up-Core/Stats/StatPart_Armor.cs new file mode 100644 index 0000000..477494e --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Stats/StatPart_Armor.cs @@ -0,0 +1,37 @@ +using GiddyUpCore.Jobs; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore.Stats +{ + class StatPart_Armor : StatPart + { + public override string ExplanationPart(StatRequest req) + { + StringBuilder sb = new StringBuilder(); + if (req.Thing is Pawn pawn && pawn.jobs != null && pawn.jobs.curDriver is JobDriver_Mounted) + { + if (pawn.def.GetModExtension() is CustomStatsPatch modExt && modExt.armorModifier != 1.0f) + { + sb.AppendLine("GUC_GiddyUp".Translate()); + sb.AppendLine(" " + "GUC_StatPart_MountTypeMultiplier".Translate() + ": " + (modExt.armorModifier).ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor)); + } + } + return sb.ToString(); + } + public override void TransformValue(StatRequest req, ref float val) + { + if (req.Thing is Pawn pawn && pawn.jobs != null && pawn.jobs.curDriver is JobDriver_Mounted) + { + if (pawn.def.GetModExtension() is CustomStatsPatch modExt && modExt.armorModifier != 1.0f) + { + val *= modExt.armorModifier; + } + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Stats/StatPart_Riding.cs b/1.4/Source/Giddy-up-Core/Stats/StatPart_Riding.cs new file mode 100644 index 0000000..a85a6a3 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Stats/StatPart_Riding.cs @@ -0,0 +1,100 @@ +using GiddyUpCore.Jobs; +using GiddyUpCore.Storage; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Stats +{ + public class StatPart_Riding : StatPart + { + public override string ExplanationPart(StatRequest req) + { + StringBuilder sb = new StringBuilder(); + + if (req.Thing is Pawn pawn) + { + if (Base.Instance.GetExtendedDataStorage() == null) + { + return ""; + } + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + + if(pawnData.mount != null) + { + float mountSpeed = pawnData.mount.GetStatValue(StatDefOf.MoveSpeed); + sb.AppendLine("GUC_GiddyUp".Translate()); + sb.AppendLine(" " + "GUC_StatPart_MountMoveSpeed".Translate() + ": " + mountSpeed.ToStringByStyle(ToStringStyle.FloatTwo)); + } + + if(pawn.jobs != null && pawn.jobs.curDriver is JobDriver_Mounted jobDriver) + { + sb.AppendLine("Giddy up!"); + float adjustedLevel = 0; + if (jobDriver.Rider.skills != null && jobDriver.Rider.skills.GetSkill(SkillDefOf.Animals) is SkillRecord skill) + { + adjustedLevel = skill.levelInt - Mathf.RoundToInt(pawn.GetStatValue(StatDefOf.MinimumHandlingSkill, true)); + float animalHandlingOffset = 1f + (adjustedLevel * Base.handlingMovementImpact) / 100f; + sb.AppendLine(" " + "GUC_StatPart_HandlingMultiplier".Translate() + ": " + animalHandlingOffset.ToStringByStyle(ToStringStyle.PercentOne, ToStringNumberSense.Factor)); + sb.AppendLine(" " + "GUC_StatPart_HandlingSkill".Translate() + ": " + skill.levelInt); + sb.AppendLine(" " + "GUC_StatPart_SkillReq".Translate() + ": " + Mathf.RoundToInt(pawn.GetStatValue(StatDefOf.MinimumHandlingSkill, true))); + sb.AppendLine(" " + "GUC_StatPart_LevelsAbove".Translate() + ": " + adjustedLevel); + sb.AppendLine(" " + "GUC_StatPart_HandlingMovementImpact".Translate() + ": " + (Base.handlingMovementImpact.Value/ 100f).ToStringByStyle(ToStringStyle.PercentOne)); + } + if (pawn.def.GetModExtension() is CustomStatsPatch modExt) + { + sb.AppendLine(" " + "GUC_StatPart_MountTypeMultiplier".Translate() + ": " + modExt.speedModifier.ToStringByStyle(ToStringStyle.PercentOne, ToStringNumberSense.Factor)); + } + } + + + + } + return sb.ToString(); + } + + public override void TransformValue(StatRequest req, ref float val) + { + if(req.Thing is Pawn pawn) + { + if (Base.Instance.GetExtendedDataStorage() == null) + { + return; + } + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + if (pawnData.mount != null) + { + float mountSpeed = pawnData.mount.GetStatValue(StatDefOf.MoveSpeed); + val = mountSpeed; + return; + } + if (pawn.jobs != null && pawn.jobs.curDriver is JobDriver_Mounted jdMounted) + { + val = GetRidingSpeed(val, pawn, jdMounted.Rider); + } + } + + } + + public static float GetRidingSpeed(float baseValue, Pawn pawn, Pawn rider) + { + float adjustedLevel = 0; + if (rider.skills != null && rider.skills.GetSkill(SkillDefOf.Animals) is SkillRecord skill) + { + adjustedLevel = skill.levelInt - Mathf.RoundToInt(pawn.GetStatValue(StatDefOf.MinimumHandlingSkill, true)); + } + float animalHandlingOffset = 1f + (adjustedLevel * Base.handlingMovementImpact) / 100f; + baseValue *= animalHandlingOffset; + if (pawn.def.GetModExtension() is CustomStatsPatch modExt) + { + float customSpeedModifier = modExt.speedModifier; + baseValue *= customSpeedModifier; + } + return baseValue; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Storage/ExtendedDataStorage.cs b/1.4/Source/Giddy-up-Core/Storage/ExtendedDataStorage.cs new file mode 100644 index 0000000..e4c011a --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Storage/ExtendedDataStorage.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using HugsLib.Utils; +using RimWorld.Planet; +using Verse; + +namespace GiddyUpCore.Storage +{ + + + public class ExtendedDataStorage : WorldComponent, IExposable + { + private Dictionary _store = + new Dictionary(); + + private List _idWorkingList; + + private List _extendedPawnDataWorkingList; + + public ExtendedDataStorage(World world) : base(world) + { + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Collections.Look( + ref _store, "store", + LookMode.Value, LookMode.Deep, + ref _idWorkingList, ref _extendedPawnDataWorkingList); + } + + // Return the associate extended data for a given Pawn, creating a new association + // if required. + public ExtendedPawnData GetExtendedDataFor(Pawn pawn) + { + + var id = pawn.thingIDNumber; + if (_store.TryGetValue(id, out ExtendedPawnData data)) + { + return data; + } + + var newExtendedData = new ExtendedPawnData(); + + _store[id] = newExtendedData; + return newExtendedData; + } + + public void DeleteExtendedDataFor(Pawn pawn) + { + _store.Remove(pawn.thingIDNumber); + } + + public void Cleanup() + { + List shouldRemove = new List(); + foreach (KeyValuePair kv in _store) + { + if (kv.Value == null || kv.Value.ShouldClean()) + { + shouldRemove.Add(kv.Key); + } + } + foreach (int key in shouldRemove) + { + _store.Remove(key); + } + //Log.Message("Cleaned up " + shouldRemove.Count + " deprecated records from Giddy-up!"); + } + + } +} diff --git a/1.4/Source/Giddy-up-Core/Storage/ExtendedPawnData.cs b/1.4/Source/Giddy-up-Core/Storage/ExtendedPawnData.cs new file mode 100644 index 0000000..8be9726 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Storage/ExtendedPawnData.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using Verse; +using Verse.AI; + +//Note: Currently this class contains information specific for other mods (caravanMount, caravanRider, etc), which is of course not ideal for a core framework. Ideally it should be completely generic. However I have yet to come up with an +// way to do this properly without introducing a lot of extra work. So for now I'll just keep it as it is. + +namespace GiddyUpCore.Storage +{ + public class ExtendedPawnData : IExposable + { + public Pawn mount = null; + public Pawn caravanMount = null; + public Pawn caravanRider = null; //TODO: check if this can be generalized to OwnedBy without screwing up existing saves + public Pawn ownedBy = null; + public Pawn owning = null; + public Job targetJob = null;//used in Giddy-up Ride and Roll + public bool mountableByAnyone = true; //used in Giddy-up Ride and Roll + public bool mountableByMaster = false; //used in Giddy-up Ride and Roll + public bool wasRidingToJob = false;//used in Giddy-up Ride and Roll + + public bool selectedForCaravan = false; + public float drawOffset = -1; + + + public void ExposeData() + { + Scribe_References.Look(ref mount, "mount", false); + Scribe_References.Look(ref caravanMount, "caravanMount", false); + Scribe_References.Look(ref caravanRider, "caravanRider", false); + Scribe_References.Look(ref ownedBy, "ownedBy", false); + Scribe_References.Look(ref owning, "owning", false); + Scribe_References.Look(ref targetJob, "targetJob"); + + Scribe_Values.Look(ref selectedForCaravan, "selectedForCaravan", false); + Scribe_Values.Look(ref mountableByAnyone, "mountableByAnyone", true); + Scribe_Values.Look(ref mountableByMaster, "mountableByMaster", true); + Scribe_Values.Look(ref wasRidingToJob, "wasRidingToJob", false); + Scribe_Values.Look(ref drawOffset, "drawOffset", 0); + + } + + public bool ShouldClean() + { + bool foundValue = false; + foreach (FieldInfo fi in this.GetType().GetFields()) + { + var fival = fi.GetValue(this); + + if (fival is bool val) { + if(val == true && fi.Name != "mountableByAnyone") { + foundValue = true; + } + if(val == false && fi.Name == "mountableByAnyone"){ + foundValue = true; + } + } + else if (fival != null && !(fival is int) && !(fival is float) && !(fival is bool)) + { + foundValue = true; + } + } + if (!foundValue) + { + return true; + } + return false; + } + + public void reset() + { + mount = null; + //drawOffset = -1; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Utilities/DefUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/DefUtility.cs new file mode 100644 index 0000000..721d256 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/DefUtility.cs @@ -0,0 +1,28 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore.Utilities +{ + public class DefUtility + { + + public static List getAnimals() + { + //TODO: adapt this! + Predicate isAnimal = (ThingDef d) => d.race !=null && d.race.Animal; + List animals = new List(); + foreach (ThingDef thingDef in from td in DefDatabase.AllDefs + where isAnimal(td) + select td) + { + animals.Add(thingDef); + } + return animals; + } + + } +} diff --git a/1.4/Source/Giddy-up-Core/Utilities/DistanceUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/DistanceUtility.cs new file mode 100644 index 0000000..6d2284e --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/DistanceUtility.cs @@ -0,0 +1,58 @@ +using GiddyUpCore.Zones; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Utilities +{ + public static class DistanceUtility + { + //TODO fix this + public static float QuickDistance(IntVec3 a, IntVec3 b) + { + float xDist = Mathf.Abs(a.x - b.x); + float zDist = Mathf.Abs(a.z - b.z); + return (float) Math.Sqrt(xDist * xDist + zDist * zDist); + } + public static LocalTargetInfo GetFirstTarget(Job job, TargetIndex index) + { + if (!job.GetTargetQueue(index).NullOrEmpty()) + { + return job.GetTargetQueue(index)[0]; + } + return job.GetTarget(index); + } + public static LocalTargetInfo GetLastTarget(Job job, TargetIndex index) + { + if (!job.GetTargetQueue(index).NullOrEmpty()) + { + return job.GetTargetQueue(index)[job.GetTargetQueue(index).Count - 1]; + } + return job.GetTarget(index); + } + public static IntVec3 getClosestAreaLoc(IntVec3 sourceLocation, Area_GU areaFound) + { + IntVec3 targetLoc = new IntVec3(); + double minDistance = double.MaxValue; + foreach (IntVec3 loc in areaFound.ActiveCells) + { + double distance = DistanceUtility.QuickDistance(loc, sourceLocation); + if (distance < minDistance) + { + minDistance = distance; + targetLoc = loc; + } + } + return targetLoc; + } + + public static IntVec3 getClosestAreaLoc(Pawn pawn, Area_GU areaFound) + { + return getClosestAreaLoc(pawn.Position, areaFound); + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Utilities/DrawUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/DrawUtility.cs new file mode 100644 index 0000000..521eef2 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/DrawUtility.cs @@ -0,0 +1,294 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; +using Verse.Sound; +using HugsLib.Settings; + +namespace GiddyUpCore.Utilities +{ + public class DrawUtility + { + + private const float ContentPadding = 5f; + + private const float TextMargin = 20f; + private const float BottomMargin = 2f; + private const float rowHeight = 20f; + + private static readonly Color iconBaseColor = new Color(0.5f, 0.5f, 0.5f, 1f); + private static readonly Color iconMouseOverColor = new Color(0.6f, 0.6f, 0.4f, 1f); + + private static readonly Color SelectedOptionColor = new Color(0.5f, 1f, 0.5f, 1f); + private static readonly Color constGrey = new Color(0.8f, 0.8f, 0.8f, 1f); + private static Color background = new Color(0.5f, 0, 0, 0.1f); + private static Color exceptionBackground = new Color(0f, 0.5f, 0, 0.1f); + + + + private static void drawBackground(Rect rect, Color background) + { + Color save = GUI.color; + GUI.color = background; + GUI.DrawTexture(rect, TexUI.FastFillTex); + GUI.color = save; + } + private static void DrawLabel(string labelText, Rect textRect, float offset) + { + var labelHeight = Text.CalcHeight(labelText, textRect.width); + labelHeight -= 2f; + var labelRect = new Rect(textRect.x, textRect.yMin - labelHeight + offset, textRect.width, labelHeight); + GUI.DrawTexture(labelRect, TexUI.GrayTextBG); + GUI.color = Color.white; + Text.Anchor = TextAnchor.UpperCenter; + Widgets.Label(labelRect, labelText); + Text.Anchor = TextAnchor.UpperLeft; + GUI.color = Color.white; + } + private static Color getColor(ThingDef Animal) + { + if (Animal.graphicData != null) + { + return Animal.graphicData.color; + } + return Color.white; + } + + private static bool DrawTileForAnimal(KeyValuePair Animal, Rect contentRect, Vector2 iconOffset, int buttonID) + { + var iconRect = new Rect(contentRect.x + iconOffset.x, contentRect.y + iconOffset.y, contentRect.width, rowHeight); + MouseoverSounds.DoRegion(iconRect, SoundDefOf.Mouseover_Command); + Color save = GUI.color; + + if (Mouse.IsOver(iconRect)) + { + GUI.color = iconMouseOverColor; + } + else if (Animal.Value.isException == true) + { + GUI.color = exceptionBackground; + } + else + { + GUI.color = background; + } + GUI.DrawTexture(iconRect, TexUI.FastFillTex); + GUI.color = save; + Text.Anchor = TextAnchor.MiddleCenter; + Widgets.Label(iconRect, (!Animal.Value.label.NullOrEmpty() ? Animal.Value.label : Animal.Key)); + Text.Anchor = TextAnchor.UpperLeft; + + if (Widgets.ButtonInvisible(iconRect, true)) + { + Event.current.button = buttonID; + return true; + } + else + return false; + + } + + public static bool CustomDrawer_Tabs(Rect rect, SettingHandle selected, String[] defaultValues) + { + int labelWidth = 140; + int offset = 0; + bool change = false; + + foreach (String tab in defaultValues) + { + Rect buttonRect = new Rect(rect); + buttonRect.width = labelWidth; + buttonRect.position = new Vector2(buttonRect.position.x + offset, buttonRect.position.y); + Color activeColor = GUI.color; + bool isSelected = tab == selected.Value; + if (isSelected) + GUI.color = SelectedOptionColor; + bool clicked = Widgets.ButtonText(buttonRect, tab); + if (isSelected) + GUI.color = activeColor; + + if (clicked) + { + if(selected.Value != tab) + { + selected.Value = tab; + } + else + { + selected.Value = "none"; + } + change = true; + } + + offset += labelWidth; + + } + return change; + } + + + public static bool CustomDrawer_Filter(Rect rect, SettingHandle slider, bool def_isPercentage, float def_min, float def_max, Color background) + { + drawBackground(rect, background); + int labelWidth = 50; + + Rect sliderPortion = new Rect(rect); + sliderPortion.width = sliderPortion.width - labelWidth; + + Rect labelPortion = new Rect(rect); + labelPortion.width = labelWidth; + labelPortion.position = new Vector2(sliderPortion.position.x + sliderPortion.width + 5f, sliderPortion.position.y + 4f); + + sliderPortion = sliderPortion.ContractedBy(2f); + + if (def_isPercentage) + Widgets.Label(labelPortion, (Mathf.Round(slider.Value * 100f)).ToString("F0") + "%"); + else + Widgets.Label(labelPortion, slider.Value.ToString("F2")); + + float val = Widgets.HorizontalSlider(sliderPortion, slider.Value, def_min, def_max, true); + bool change = false; + + if (slider.Value != val) + change = true; + + slider.Value = val; + return change; + } + + public static void filterAnimals(ref SettingHandle setting, List allAnimals, SettingHandle filter = null) + { + if (setting.Value == null) + { + setting.Value = new DictAnimalRecordHandler(); + } + + Dictionary selection = new Dictionary(); + foreach (ThingDef animal in allAnimals) + { + bool shouldSelect = false; + if (filter != null) + { + float mass = animal.race.baseBodySize; + shouldSelect = mass >= filter.Value; + } + AnimalRecord value = null; + bool found = setting.Value.InnerList.TryGetValue(animal.defName, out value); + if (found && value.isException) + { + selection.Add(animal.defName, value); + } + else if (found) + { + selection.Add(animal.defName, new AnimalRecord(shouldSelect, false, animal.label)); + } + else + { + addNewAnimal(animal, selection, shouldSelect, setting.Name); + } + + } + selection = selection.OrderBy(d => d.Value.label).ToDictionary(d => d.Key, d => d.Value); + setting.Value.InnerList = selection; + } + + internal static void addNewAnimal(ThingDef animal, Dictionary selection, bool shouldSelect, String settingName) + { + CompProperties_Mount prop = animal.GetCompProperties(); + float mass = animal.race.baseBodySize; + if (prop != null && prop.isException && settingName == "Animalselecter") + { + selection.Add(animal.defName, new AnimalRecord(false, true, animal.label)); + } + else if (prop != null && prop.drawFront && settingName == "drawSelecter") + { + selection.Add(animal.defName, new AnimalRecord(true, true, animal.label)); + } + else + { + selection.Add(animal.defName, new AnimalRecord(shouldSelect, false, animal.label)); + } + } + + + public static bool CustomDrawer_MatchingAnimals_active(Rect wholeRect, SettingHandle setting, List allAnimals, SettingHandle filter = null, string yesText = "Is a mount", string noText = "Is not a mount") + { + drawBackground(wholeRect, background); + + + GUI.color = Color.white; + + Rect leftRect = new Rect(wholeRect); + leftRect.width = leftRect.width / 2; + leftRect.height = wholeRect.height - TextMargin + BottomMargin; + leftRect.position = new Vector2(leftRect.position.x, leftRect.position.y); + Rect rightRect = new Rect(wholeRect); + rightRect.width = rightRect.width / 2; + leftRect.height = wholeRect.height - TextMargin + BottomMargin; + rightRect.position = new Vector2(rightRect.position.x + leftRect.width, rightRect.position.y); + + DrawLabel(yesText, leftRect, TextMargin); + DrawLabel(noText, rightRect, TextMargin); + + leftRect.position = new Vector2(leftRect.position.x, leftRect.position.y + TextMargin); + rightRect.position = new Vector2(rightRect.position.x, rightRect.position.y + TextMargin); + + int iconsPerRow = 1; + bool change = false; + int numSelected = 0; + + filterAnimals(ref setting, allAnimals, filter); + Dictionary selection = setting.Value.InnerList; + + foreach (KeyValuePair item in selection) + { + if (item.Value.isSelected) + { + numSelected++; + } + } + + + int biggerRows = Math.Max( numSelected/ iconsPerRow, (selection.Count - numSelected) / iconsPerRow); + setting.CustomDrawerHeight = (biggerRows * rowHeight) + ((biggerRows) * BottomMargin) + TextMargin; + + int indexLeft = 0; + int indexRight = 0; + foreach (KeyValuePair item in selection) + { + Rect rect = item.Value.isSelected ? leftRect : rightRect; + int index = item.Value.isSelected ? indexLeft : indexRight; + if (item.Value.isSelected) + { + indexLeft++; + } + else + { + indexRight++; + } + + int collum = (index % iconsPerRow); + int row = (index / iconsPerRow); + bool interacted = DrawTileForAnimal(item, rect, new Vector2(0, rowHeight * row + row * BottomMargin), index); + if (interacted) + { + change = true; + item.Value.isSelected = !item.Value.isSelected; + item.Value.isException = !item.Value.isException; + } + } + if (change) + { + setting.Value.InnerList = selection; + } + return change; + } + + } +} + + + diff --git a/1.4/Source/Giddy-up-Core/Utilities/FloatMenuUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/FloatMenuUtility.cs new file mode 100644 index 0000000..0ff0382 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/FloatMenuUtility.cs @@ -0,0 +1,121 @@ +using GiddyUpCore.Jobs; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; +using Verse.AI; +using Multiplayer.API; + +namespace GiddyUpCore.Utilities +{ + public static class GUC_FloatMenuUtility + { + public static void AddMountingOptions(Pawn target, Pawn pawn, List opts) + { + var pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + + if (target.Faction != null && target.Faction != Faction.OfPlayer) + { + return; + } + + if (pawnData.mount == null) + { + bool canMount = false; + if (Base.GiddyUpMechanoidsLoaded && target.RaceProps.IsMechanoid) + { + canMount = true; //additional checking takes place in Giddy-up! Battle Mechs. + } + if (target.RaceProps.Animal) + { + canMount = IsMountableUtility.isMountable(target, out IsMountableUtility.Reason reason); + + if (!canMount && reason == IsMountableUtility.Reason.NotInModOptions) + { + opts.Add(new FloatMenuOption("GUC_NotInModOptions".Translate(), null, MenuOptionPriority.Low)); + return; + } + if (target.CurJob != null && (target.InMentalState || + target.IsBurning() || + target.CurJob.def == JobDefOf.LayEgg || + target.CurJob.def == JobDefOf.Nuzzle || + target.CurJob.def == JobDefOf.Lovin || + target.CurJob.def == JobDefOf.Wait_Downed || + target.CurJob.def == GUC_JobDefOf.Mounted + )) + { + opts.Add(new FloatMenuOption("GUC_AnimalBusy".Translate(), null, MenuOptionPriority.Low)); + return; + } + if (!canMount && reason == IsMountableUtility.Reason.NotFullyGrown) + { + opts.Add(new FloatMenuOption("GUC_NotFullyGrown".Translate(), null, MenuOptionPriority.Low)); + return; + } + if (!canMount && reason == IsMountableUtility.Reason.NeedsTraining) + { + opts.Add(new FloatMenuOption("GUC_NeedsObedience".Translate(), null, MenuOptionPriority.Low)); + return; + } + if (!canMount && reason == IsMountableUtility.Reason.IsRoped) + { + opts.Add(new FloatMenuOption("GUC_IsRoped".Translate(), null, MenuOptionPriority.Low)); + return; + } + + } + + if (canMount) + { + Action action = delegate + { + if (Base.GiddyUpMechanoidsLoaded && target.RaceProps.IsMechanoid) + { + if (!pawn.Drafted) + { + //pawn.drafter.Drafted = true; moving to external method to sync across multiplayer clients + UpdatePawnDrafted(pawn, true); + } + if(target.drafter != null && target.Drafted) + { + //target.drafter.Drafted = false; moving to external method to sync across multiplayer clients + UpdatePawnDrafted(target, false); + } + } + Job jobRider = new Job(GUC_JobDefOf.Mount, target); + jobRider.count = 1; + pawn.jobs.TryTakeOrderedJob(jobRider); + }; + opts.Add(new FloatMenuOption("GUC_Mount".Translate() + " " + target.Name, action, MenuOptionPriority.Low)); + } + } + else if (target == pawnData.mount) + { + //if (opts.Count > 0) opts.RemoveAt(0);//Remove option to attack your own mount + + Action action = delegate + { + //pawnData.reset(); moving to external method to sync across multiplayer clients + ResetPawnData(pawnData); + }; + opts.Add(new FloatMenuOption("GUC_Dismount".Translate(), action, MenuOptionPriority.High)); + + } + } + + [SyncMethod] + private static void UpdatePawnDrafted(Pawn pawn, bool draftedStatus) + { + pawn.drafter.Drafted = draftedStatus; + } + + [SyncMethod] + private static void ResetPawnData(Storage.ExtendedPawnData pawnData) + { + pawnData.reset(); + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Utilities/IsMountableUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/IsMountableUtility.cs new file mode 100644 index 0000000..6cab167 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/IsMountableUtility.cs @@ -0,0 +1,98 @@ +using GiddyUpCore.Jobs; +using GiddyUpCore.Storage; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; + +namespace GiddyUpCore.Utilities +{ + public static class IsMountableUtility + { + public enum Reason{NotFullyGrown, NotInModOptions, CanMount, IsRoped, NeedsTraining}; + + public static Pawn CurMount(this Pawn pawn) + { + if (Base.Instance.GetExtendedDataStorage() is ExtendedDataStorage store && store.GetExtendedDataFor(pawn) is ExtendedPawnData pawnData) + { + return pawnData.mount; + } + return null; + } + public static bool IsMountable(ThingDef thingDef) + { + return isMountable(thingDef.GetConcreteExample() as Pawn); + } + public static bool isMountable(Pawn pawn) + { + return isMountable(pawn, out Reason reason); + } + + public static bool IsCurrentlyMounted(Pawn animal) + { + if(animal.CurJob == null || animal.CurJob.def != GUC_JobDefOf.Mounted) + { + return false; + } + JobDriver_Mounted mountedDriver = (JobDriver_Mounted)animal.jobs.curDriver; + Pawn Rider = mountedDriver.Rider; + ExtendedDataStorage store = Base.Instance.GetExtendedDataStorage(); + if(store == null || store.GetExtendedDataFor(Rider).mount == null) + { + return false; + } + return true; + } + + public static bool isMountable(Pawn animal, out Reason reason) + { + reason = Reason.CanMount; + if (!isAllowedInModOptions(animal.def.defName)) + { + reason = Reason.NotInModOptions; + return false; + } + if (animal.ageTracker.CurLifeStageIndex != animal.RaceProps.lifeStageAges.Count - 1) + { + if (!animal.def.HasModExtension()) + { + reason = Reason.NotFullyGrown; + return false; + } + else //Use custom life stages instead of last life stage if a patch exists for that + { + AllowedLifeStagesPatch customLifeStages = animal.def.GetModExtension(); + if (!customLifeStages.getAllowedLifeStagesAsList().Contains(animal.ageTracker.CurLifeStageIndex)) + { + reason = Reason.NotFullyGrown; + return false; + } + } + } + if (animal.training == null || (animal.training != null && !animal.training.HasLearned(TrainableDefOf.Tameness))) + { + reason = Reason.NeedsTraining; + return false; + } + if (animal.roping != null && animal.roping.IsRoped) + { + reason = Reason.IsRoped; + return false; + } + return true; + } + + public static bool isAllowedInModOptions(String animalName) + { + GiddyUpCore.AnimalRecord value; + bool found = GiddyUpCore.Base.animalSelecter.Value.InnerList.TryGetValue(animalName, out value); + if (found && value.isSelected) + { + return true; + } + return false; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Utilities/NPCMountUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/NPCMountUtility.cs new file mode 100644 index 0000000..c75d163 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/NPCMountUtility.cs @@ -0,0 +1,245 @@ +using GiddyUpCore.Jobs; +using GiddyUpCore.Storage; +using RimWorld; +using RimWorld.Planet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Multiplayer.API; +using Verse; +using Verse.AI; + +namespace GiddyUpCore.Utilities +{ + public class NPCMountUtility + { + + public static bool generateMounts(ref List list, IncidentParms parms, int inBiomeWeight, int outBiomeWeight, int nonWildWeight, int mountChance, int mountChanceTribal) + { + if (MP.enabled) + { + return false; // Best we can do for now + } + Map map = parms.target as Map; + if (map == null) + { + Caravan caravan = (Caravan)parms.target; + int tile = caravan.Tile; + map = Current.Game.FindMap(tile); + if (map == null) + { + return false; + } + } + + Predicate isAnimal = (PawnKindDef d) => d.race != null && d.race.race.Animal; + + mountChance = getMountChance(parms, mountChance, mountChanceTribal); + if (mountChance == -1)//wrong faction + { + return false; + } + List factionFarmAnimalRestrictions = new List(); + List factionWildAnimalRestrictions = new List(); + if (parms.faction.def.HasModExtension()) + { + FactionRestrictionsPatch factionRestrictions = parms.faction.def.GetModExtension(); + factionFarmAnimalRestrictions = factionRestrictions.getAllowedNonWildAnimalsAsList(); + factionWildAnimalRestrictions = factionRestrictions.getAllowedWildAnimalsAsList(); + + if(factionRestrictions.mountChance > -1) + { + mountChance = factionRestrictions.mountChance; + } + + if(!factionWildAnimalRestrictions.NullOrEmpty() && factionFarmAnimalRestrictions.NullOrEmpty() && factionRestrictions.wildAnimalWeight >= 0) + { + inBiomeWeight = 0; + nonWildWeight = 0; + outBiomeWeight = factionRestrictions.wildAnimalWeight; + } + if (factionWildAnimalRestrictions.NullOrEmpty() && !factionFarmAnimalRestrictions.NullOrEmpty() && factionRestrictions.nonWildAnimalWeight >= 0) + { + inBiomeWeight = 0; + outBiomeWeight = 0; + nonWildWeight = factionRestrictions.nonWildAnimalWeight; + } + if (!factionWildAnimalRestrictions.NullOrEmpty() && !factionFarmAnimalRestrictions.NullOrEmpty()) + { + inBiomeWeight = 0; + if(factionRestrictions.wildAnimalWeight >= 0) + outBiomeWeight = factionRestrictions.wildAnimalWeight; + if (factionRestrictions.nonWildAnimalWeight >= 0) + nonWildWeight = factionRestrictions.nonWildAnimalWeight; + } + } + + int totalWeight = inBiomeWeight + outBiomeWeight + nonWildWeight; + float inBiomeWeightNormalized = (float)inBiomeWeight / (float)totalWeight * 100f; + float outBiomeWeightNormalized = (float)outBiomeWeight / (float)totalWeight * 100f; + + List animals = new List(); + foreach (Pawn pawn in list) + { + //TODO add chance + PawnKindDef pawnKindDef = null; + + + + if (!pawn.RaceProps.Humanlike || pawn.kindDef == PawnKindDefOf.Slave) + { + continue; + } + + //changing from System.Random to Verse.Rand for better multiplayer compatibility + int rndInt = Rand.Range(1, 100); + + if (pawn.kindDef.HasModExtension()) + { + CustomMountsPatch modExtension = pawn.kindDef.GetModExtension(); + if(modExtension.mountChance <= rndInt) + { + continue; + } + Rand.PushState(); + bool found = modExtension.possibleMounts.TryRandomElementByWeight((KeyValuePair mount) => mount.Value, out KeyValuePair selectedMount); + Rand.PopState(); + if (found) + { + pawnKindDef = DefDatabase.GetNamed(selectedMount.Key); + } + } + else + { + if (mountChance <= rndInt || !pawn.RaceProps.Humanlike) + { + continue; + } + int pawnHandlingLevel = pawn.skills.GetSkill(SkillDefOf.Animals).Level; + + pawnKindDef = determinePawnKind(map, isAnimal, inBiomeWeightNormalized, outBiomeWeightNormalized, rndInt, pawnHandlingLevel, factionFarmAnimalRestrictions, factionWildAnimalRestrictions, parms); + } + if (pawnKindDef == null) + { + return false; + } + Pawn animal = PawnGenerator.GeneratePawn(pawnKindDef, parms.faction); + GenSpawn.Spawn(animal, pawn.Position, map, parms.spawnRotation); + ConfigureSpawnedAnimal(pawn, ref animal); + animals.Add(animal); + + } + list = list.Concat(animals).ToList(); + return true; + } + + public static void ConfigureSpawnedAnimal(Pawn pawn, ref Pawn animal) + { + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + ExtendedPawnData animalData = GiddyUpCore.Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(animal); + pawnData.mount = animal; + TextureUtility.setDrawOffset(pawnData); + animal.mindState.duty = new PawnDuty(DutyDefOf.Defend); + if (animal.jobs == null) + { + animal.jobs = new Pawn_JobTracker(animal); + } + Job jobAnimal = new Job(GUC_JobDefOf.Mounted, pawn); + jobAnimal.count = 1; + animal.jobs.TryTakeOrderedJob(jobAnimal); + animalData.ownedBy = pawn; + animal.playerSettings = new Pawn_PlayerSettings(animal); + animal.training.Train(TrainableDefOf.Obedience, pawn); + pawnData.owning = animal; + + } + + private static PawnKindDef determinePawnKind(Map map, Predicate isAnimal, float inBiomeWeightNormalized, float outBiomeWeightNormalized, int rndInt, int pawnHandlingLevel, List factionFarmAnimalRestrictions, List factionWildAnimalRestrictions, IncidentParms parms) + { + PawnKindDef pawnKindDef = null; + float averageCommonality = AverageAnimalCommonality(map); + Predicate canUseAnimal = (PawnKindDef a) => map.mapTemperature.SeasonAcceptableFor(a.race) && IsMountableUtility.isAllowedInModOptions(a.defName) && parms.points > a.combatPower * 2f; + Rand.PushState(); + if (factionWildAnimalRestrictions.NullOrEmpty() && rndInt <= inBiomeWeightNormalized) + { + (from a in map.Biome.AllWildAnimals + where canUseAnimal(a) + select a).TryRandomElementByWeight((PawnKindDef def) => calculateCommonality(def, map, pawnHandlingLevel), out pawnKindDef); + } + else if (rndInt <= inBiomeWeightNormalized + outBiomeWeightNormalized) + { + (from a in Base.animalsWithBiome + where isAnimal(a) + && canUseAnimal(a) + && (factionWildAnimalRestrictions.NullOrEmpty() || factionWildAnimalRestrictions.Contains(a.defName)) + select a).TryRandomElementByWeight((PawnKindDef def) => calculateCommonality(def, map, pawnHandlingLevel, averageCommonality), out pawnKindDef); + } + else + { + (from a in Base.animalsWithoutBiome + where isAnimal(a) + && canUseAnimal(a) + && (factionFarmAnimalRestrictions.NullOrEmpty() || factionFarmAnimalRestrictions.Contains(a.defName)) + select a).TryRandomElementByWeight((PawnKindDef def) => calculateCommonality(def, map, pawnHandlingLevel, averageCommonality), out pawnKindDef); + } + Rand.PopState(); + return pawnKindDef; + } + + private static float AverageAnimalCommonality(Map map) + { + float sum = 0; + foreach (PawnKindDef animalKind in map.Biome.AllWildAnimals) + { + sum += map.Biome.CommonalityOfAnimal(animalKind); + } + return sum / map.Biome.AllWildAnimals.Count(); + } + + private static float calculateCommonality(PawnKindDef def, Map map, int pawnHandlingLevel, float averageCommonality = 0) + { + float commonality; + if (averageCommonality == 0) + { + commonality = map.Biome.CommonalityOfAnimal(def); + } + else + { + commonality = averageCommonality; + } + + //minimal level to get bonus. + pawnHandlingLevel = pawnHandlingLevel > 5 ? pawnHandlingLevel - 5 : 0; + + //Common animals more likely when pawns have low handling, and rare animals more likely when pawns have high handling. + float commonalityAdjusted = commonality * ((15f - (float)commonality)) / 15f + (1 - commonality) * ((float)pawnHandlingLevel) / 15f; + //Wildness decreases the likelyhood of the mount being picked. Handling level mitigates this. + float wildnessPenalty = 1 - (def.RaceProps.wildness * ((15f - (float)pawnHandlingLevel) / 15f)); + + //Log.Message("name: " + def.defName + ", commonality: " + commonality + ", pawnHandlingLevel: " + pawnHandlingLevel + ", wildness: " + def.RaceProps.wildness + ", commonalityBonus: " + commonalityAdjusted + ", wildnessPenalty: " + wildnessPenalty + ", result: " + commonalityAdjusted * wildnessPenalty); + return commonalityAdjusted * wildnessPenalty; + } + + private static int getMountChance(IncidentParms parms, int mountChance, int mountChanceTribal) + { + if(parms.faction == null) + { + return -1; + } + if (parms.faction.def == FactionDefOf.Ancients || parms.faction.def == FactionDefOf.AncientsHostile) + { + return mountChanceTribal; + } + else if (parms.faction.def != FactionDefOf.Mechanoid) + { + return mountChance; + } + else + { + return -1; + } + } + } +} + diff --git a/1.4/Source/Giddy-up-Core/Utilities/PawnDataUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/PawnDataUtility.cs new file mode 100644 index 0000000..09dbe22 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/PawnDataUtility.cs @@ -0,0 +1,22 @@ +using GiddyUpCore.Storage; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace GiddyUpCore.Utilities +{ + public static class PawnDataUtility + { + public static ExtendedPawnData GetExtendedPawnData(this Pawn pawn) + { + if (Base.Instance.GetExtendedDataStorage() is ExtendedDataStorage store && store.GetExtendedDataFor(pawn) is ExtendedPawnData pawnData) + { + return pawnData; + } + return null; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Utilities/TextureUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/TextureUtility.cs new file mode 100644 index 0000000..377dc3a --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/TextureUtility.cs @@ -0,0 +1,157 @@ +using GiddyUpCore.Storage; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Utilities +{ + public class TextureUtility + { + + + + public static void setDrawOffset(ExtendedPawnData pawnData) + { + if (pawnData.mount == null) + { + return; + } + PawnKindLifeStage curKindLifeStage = pawnData.mount.ageTracker.CurKindLifeStage; + Texture2D unreadableTexture = curKindLifeStage.bodyGraphicData.Graphic.MatEast.mainTexture as Texture2D; + Texture2D t = TextureUtility.getReadableTexture(unreadableTexture); + int backHeight = TextureUtility.getBackHeight(t); + float backHeightRelative = (float)backHeight / (float)t.height; + + float textureHeight = curKindLifeStage.bodyGraphicData.drawSize.y; + //If animal texture does not fit in a tile, take this into account + float extraOffset = textureHeight > 1f ? (textureHeight - 1f) / 2f : 0; + //Small extra offset, you don't want to draw pawn exactly on back + extraOffset += (float)textureHeight * backHeightRelative / 20f; + pawnData.drawOffset = (textureHeight * backHeightRelative - extraOffset); + } + + /* + * Exctracts Vector3 object from its string representation. + */ + public static Vector3 ExtractVector3(String extractFrom) + { + if (extractFrom.NullOrEmpty()) + { + return new Vector3(); + } + Vector3 result = new Vector3(); + + List values = extractFrom.Split(',').ToList().Select(x => float.Parse(x)).ToList(); + if (values.Count >= 1) + { + result.x = values[0]; + } + if (values.Count >= 2) + { + result.y = values[1]; + } + if (values.Count >= 3) + { + result.z = values[2]; + } + return result; + } + + /* + * Attempt of automatic long neck or horns detection that could be used to decide if pawns should be + * drawn in front or behind the mount in frontal view. + * While it does often detect necks and horns, it doesn't really serve its purpose as necks and + * horns that are long when viewed from the side, are often not in front of the pawn in frontal view. + * Might still prove usable for non-vanilla animals + */ + + public static bool hasLongNeckOrHorns(Texture2D t, int backHeight, int fraction) + { + int bodyPixels = 0; + int checkFrom = backHeight + 10; + int middle = t.width / 2; + + if (checkFrom >= t.height) + { + return false; + } + + int totalPixelsChecked = (t.height - checkFrom) * middle; + int minPixelsForNeckOrHorns = totalPixelsChecked / fraction; + + for (int i = checkFrom; i < t.height; i++) + { + for (int j = middle; j < t.width; j++) + { + Color c = t.GetPixel(j, i); + if (c.a > 0) + { + bodyPixels++; + if (bodyPixels > minPixelsForNeckOrHorns) + { + return true; + } + } + } + } + + return false; + } + + private static int getBackHeight(Texture2D t) + { + + int middle = t.width / 2; + int backHeight = 0; + bool inBody = false; + float threshold = 0.8f; + + + for (int i = 0; i < t.height; i++) + { + Color c = t.GetPixel(middle, i); + if (inBody && c.a < threshold) + { + backHeight = i; + break; + } + if (c.a >= threshold) + { + inBody = true; + } + } + return backHeight; + } + + private static Texture2D getReadableTexture(Texture2D texture) + { + // Create a temporary RenderTexture of the same size as the texture + RenderTexture tmp = RenderTexture.GetTemporary( + texture.width, + texture.height, + 0, + RenderTextureFormat.Default, + RenderTextureReadWrite.Linear); + + // Blit the pixels on texture to the RenderTexture + Graphics.Blit(texture, tmp); + // Backup the currently set RenderTexture + RenderTexture previous = RenderTexture.active; + // Set the current RenderTexture to the temporary one we created + RenderTexture.active = tmp; + // Create a new readable Texture2D to copy the pixels to it + Texture2D myTexture2D = new Texture2D(texture.width, texture.height); + // Copy the pixels from the RenderTexture to the new Texture + myTexture2D.ReadPixels(new Rect(0, 0, tmp.width, tmp.height), 0, 0); + myTexture2D.Apply(); + // Reset the active RenderTexture + RenderTexture.active = previous; + // Release the temporary RenderTexture + RenderTexture.ReleaseTemporary(tmp); + return myTexture2D; + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Utilities/TicksPerMoveUtility.cs b/1.4/Source/Giddy-up-Core/Utilities/TicksPerMoveUtility.cs new file mode 100644 index 0000000..b2d0dbf --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Utilities/TicksPerMoveUtility.cs @@ -0,0 +1,39 @@ +using GiddyUpCore.Storage; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Utilities +{ + public class TicksPerMoveUtility + { + public static int adjustedTicksPerMove(Pawn pawn, Pawn mount, bool diagonal) + { + float adjustedLevel = 5; + if (pawn.skills != null && pawn.skills.GetSkill(SkillDefOf.Animals) is SkillRecord skill) + { + adjustedLevel = skill.levelInt - Mathf.RoundToInt(mount.GetStatValue(StatDefOf.MinimumHandlingSkill, true)); + } + + float animalHandlingOffset = 1f - (adjustedLevel * Base.handlingMovementImpact) / 100f; + float customSpeedModifier = 1f; + if (mount.def.GetModExtension() is CustomStatsPatch modExt) + { + customSpeedModifier = 1f/modExt.speedModifier; + } + float factor = animalHandlingOffset * customSpeedModifier; + if (diagonal) + { + return Mathf.RoundToInt((float)mount.TicksPerMoveDiagonal * factor); + } + else + { + return Mathf.RoundToInt((float)mount.TicksPerMoveCardinal * factor); + } + } + } +} diff --git a/1.4/Source/Giddy-up-Core/Zones/Area_GU.cs b/1.4/Source/Giddy-up-Core/Zones/Area_GU.cs new file mode 100644 index 0000000..141e12c --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Zones/Area_GU.cs @@ -0,0 +1,77 @@ +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Zones +{ + public class Area_GU : Area + { + private String label; + + private Color color = Color.magenta; + + public Area_GU() + { + + } + public Area_GU(AreaManager areaManager, string label) : base(areaManager) + { + this.color = new Color(Rand.Value, Rand.Value, Rand.Value); + this.label = label; + } + + public override string Label + { + get + { + return label; + } + } + + public override Color Color + { + get + { + return color; + } + } + + public override bool Mutable + { + get + { + return false; + } + } + + public override int ListPriority + { + get + { + return 300; + } + } + public override string GetUniqueLoadID() + { + return label; //only one such area, so label is sufficient. + } + public override bool AssignableAsAllowed() + { + return false; + } + + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref this.label, "label", null, false); + Scribe_Values.Look(ref this.color, "color", default(Color), false); + } + + } +} diff --git a/1.4/Source/Giddy-up-Core/Zones/Designator_GU.cs b/1.4/Source/Giddy-up-Core/Zones/Designator_GU.cs new file mode 100644 index 0000000..0998f4e --- /dev/null +++ b/1.4/Source/Giddy-up-Core/Zones/Designator_GU.cs @@ -0,0 +1,74 @@ +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace GiddyUpCore.Zones +{ + //Is used in other Giddy-up mods as a base for simple areas that can be requested in the areamanager using their label + public class Designator_GU : Designator + { + protected Area selectedArea; + protected string areaLabel; + + public Designator_GU(DesignateMode mode) + { + this.soundDragSustain = SoundDefOf.Designate_DragStandard; + this.soundDragChanged = SoundDefOf.Designate_DragStandard_Changed; + this.useMouseIcon = true; + } + + public override AcceptanceReport CanDesignateCell(IntVec3 loc) + { + if (!loc.InBounds(base.Map)) + { + return false; + } + return true; + } + + public override void ProcessInput(Event ev) + { + if (!base.CheckCanInteract()) + { + return; + } + setSelectedArea(areaLabel); + if (selectedArea != null) + { + base.ProcessInput(ev); + } + } + + protected void setSelectedArea(string areaLabel) + { + selectedArea = Map.areaManager.GetLabeled(areaLabel); + if (selectedArea == null) + { + //If no area was created yet, create one and add it to areaManager. + selectedArea = new Area_GU(base.Map.areaManager, areaLabel); + List areaManager_areas = Traverse.Create(base.Map.areaManager).Field("areas").GetValue>(); + areaManager_areas.Add(selectedArea); + } + } + + public override void SelectedUpdate() + { + GenUI.RenderMouseoverBracket(); + if(selectedArea != null) + { + selectedArea.MarkForDraw(); + } + } + + protected override void FinalizeDesignationSucceeded() + { + base.FinalizeDesignationSucceeded(); + } + + } +} diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/1.4/Source/Giddy-up-Core/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.AssemblyInfo.cs b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.AssemblyInfo.cs new file mode 100644 index 0000000..d3930ea --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("GiddyUpCore")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("GiddyUpCore")] +[assembly: System.Reflection.AssemblyTitleAttribute("GiddyUpCore")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.AssemblyInfoInputs.cache b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.AssemblyInfoInputs.cache new file mode 100644 index 0000000..23f0088 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +6ef78cb68ff44344c0d7b01c70a9d3b6c2272066 diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.GeneratedMSBuildEditorConfig.editorconfig b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..5099cec --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,3 @@ +is_global = true +build_property.RootNamespace = GiddyUpCore +build_property.ProjectDir = C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\ diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.assets.cache b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.assets.cache new file mode 100644 index 0000000..1eaa662 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.assets.cache differ diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.AssemblyReference.cache b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.AssemblyReference.cache new file mode 100644 index 0000000..a3df677 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.AssemblyReference.cache differ diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.CoreCompileInputs.cache b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..5420d1d --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +8faa79164d1dd88b2c00ecfbf8a391745bd7076b diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.FileListAbsolute.txt b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..88aef9b --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csproj.FileListAbsolute.txt @@ -0,0 +1,38 @@ +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\v1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csprojAssemblyReference.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\v1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfoInputs.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\v1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfo.cs +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\v1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CoreCompileInputs.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\v1.3\Assemblies\GiddyUpCore.dll +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\v1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CopyComplete +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\v1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.dll +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\1.3\Assemblies\GiddyUpCore.dll +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csprojAssemblyReference.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfoInputs.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfo.cs +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CoreCompileInputs.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CopyComplete +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\GiddyUpCore\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.dll +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Assemblies\GiddyUpCore.dll +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.AssemblyReference.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.GeneratedMSBuildEditorConfig.editorconfig +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfoInputs.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfo.cs +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CoreCompileInputs.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CopyComplete +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.3\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.dll +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.AssemblyReference.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.GeneratedMSBuildEditorConfig.editorconfig +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfoInputs.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfo.cs +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CoreCompileInputs.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Assemblies\GiddyUpCore.dll +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CopyComplete +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore-forked\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.dll +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Assemblies\GiddyUpCore.dll +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.AssemblyReference.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.GeneratedMSBuildEditorConfig.editorconfig +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfoInputs.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.AssemblyInfo.cs +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CoreCompileInputs.cache +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.csproj.CopyComplete +C:\Games\App\steamapps\common\RimWorld\Mods\GiddyUpCore\1.4\Source\Giddy-up-Core\obj\Debug\GiddyUpCore.dll diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csprojAssemblyReference.cache b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csprojAssemblyReference.cache new file mode 100644 index 0000000..34b57e9 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.csprojAssemblyReference.cache differ diff --git a/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.dll b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.dll new file mode 100644 index 0000000..b0f36a0 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/obj/Debug/GiddyUpCore.dll differ diff --git a/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.dgspec.json b/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.dgspec.json new file mode 100644 index 0000000..5d57c94 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.dgspec.json @@ -0,0 +1,64 @@ +{ + "format": 1, + "restore": { + "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\GiddyUpCore.csproj": {} + }, + "projects": { + "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\GiddyUpCore.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\GiddyUpCore.csproj", + "projectName": "GiddyUpCore", + "projectPath": "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\GiddyUpCore.csproj", + "packagesPath": "C:\\Users\\YCHEN\\.nuget\\packages\\", + "outputPath": "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\YCHEN\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net472" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "dependencies": { + "Lib.Harmony": { + "target": "Package", + "version": "[2.2.2, )" + }, + "TaskPubliciser": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[1.0.3, )" + }, + "UnlimitedHugs.Rimworld.HugsLib": { + "include": "Compile, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "target": "Package", + "version": "[10.0.1, )" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.302\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.g.props b/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.g.props new file mode 100644 index 0000000..6f2dd8a --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.g.props @@ -0,0 +1,18 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\YCHEN\.nuget\packages\ + PackageReference + 6.2.1 + + + + + + + + \ No newline at end of file diff --git a/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.g.targets b/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/GiddyUpCore.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/1.4/Source/Giddy-up-Core/obj/project.assets.json b/1.4/Source/Giddy-up-Core/obj/project.assets.json new file mode 100644 index 0000000..e5cdc5b --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/project.assets.json @@ -0,0 +1,786 @@ +{ + "version": 3, + "targets": { + ".NETFramework,Version=v4.7.2": { + "Lib.Harmony/2.2.2": { + "type": "package", + "compile": { + "lib/net472/0Harmony.dll": {} + }, + "runtime": { + "lib/net472/0Harmony.dll": {} + } + }, + "Microsoft.Build.Framework/15.1.548": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Runtime": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Thread": "4.0.0" + }, + "compile": { + "lib/net46/_._": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "Microsoft.Build.Utilities.Core/15.1.548": { + "type": "package", + "dependencies": { + "Microsoft.Build.Framework": "[15.1.548]" + }, + "compile": { + "lib/net46/_._": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "System.Collections/4.0.11": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Diagnostics.Debug/4.0.11": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Globalization/4.0.11": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Runtime/4.1.0": { + "type": "package", + "compile": { + "ref/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Runtime.InteropServices/4.1.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Threading/4.0.11": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Threading.Thread/4.0.0": { + "type": "package", + "compile": { + "ref/net46/_._": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "TaskPubliciser/1.0.3": { + "type": "package", + "dependencies": { + "Microsoft.Build.Utilities.Core": "15.1.548" + }, + "frameworkAssemblies": [ + "System.Runtime", + "System.Runtime.InteropServices", + "System.Threading.Thread" + ], + "build": { + "build/TaskPubliciser.props": {} + } + }, + "UnlimitedHugs.Rimworld.HugsLib/10.0.1": { + "type": "package", + "dependencies": { + "Lib.Harmony": "2.2.2" + }, + "compile": { + "lib/net472/HugsLib.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + } + } + }, + "libraries": { + "Lib.Harmony/2.2.2": { + "sha512": "70KvWz+DiUELxafsYL/LHxA/jH3PDWeApLo/VwtnrpTvRWQ/eUdPfS/l5funmhZWOy41QXw6UjVv+6C57Nx77A==", + "type": "package", + "path": "lib.harmony/2.2.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "HarmonyLogo.png", + "LICENSE", + "lib.harmony.2.2.2.nupkg.sha512", + "lib.harmony.nuspec", + "lib/net35/0Harmony.dll", + "lib/net35/0Harmony.xml", + "lib/net45/0Harmony.dll", + "lib/net45/0Harmony.xml", + "lib/net472/0Harmony.dll", + "lib/net472/0Harmony.xml", + "lib/net48/0Harmony.dll", + "lib/net48/0Harmony.xml", + "lib/net5.0/0Harmony.dll", + "lib/net5.0/0Harmony.xml", + "lib/net6.0/0Harmony.dll", + "lib/net6.0/0Harmony.xml", + "lib/netcoreapp3.0/0Harmony.dll", + "lib/netcoreapp3.0/0Harmony.xml", + "lib/netcoreapp3.1/0Harmony.dll", + "lib/netcoreapp3.1/0Harmony.xml" + ] + }, + "Microsoft.Build.Framework/15.1.548": { + "sha512": "wO17o9zmhAq1YYXdlwXtSsX/LzHgF1mWmKZ/X2CQE8n1WWQnzcm0gqyAa4qpp89emRZ4N0shHwq+43/9IafloA==", + "type": "package", + "path": "microsoft.build.framework/15.1.548", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net46/Microsoft.Build.Framework.dll", + "lib/net46/Microsoft.Build.Framework.xml", + "lib/netstandard1.3/Microsoft.Build.Framework.dll", + "lib/netstandard1.3/Microsoft.Build.Framework.xml", + "microsoft.build.framework.15.1.548.nupkg.sha512", + "microsoft.build.framework.nuspec" + ] + }, + "Microsoft.Build.Utilities.Core/15.1.548": { + "sha512": "gY0QMmhhG9HCDFK7T6xS+XAw/+vTfdumUwq9Sfk0KvWYnHFqrta6rwOYdcDIjDyZ2bKYVFcYH2c40mufjQZIgw==", + "type": "package", + "path": "microsoft.build.utilities.core/15.1.548", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net46/Microsoft.Build.Utilities.Core.dll", + "lib/net46/Microsoft.Build.Utilities.Core.xml", + "lib/netstandard1.3/Microsoft.Build.Utilities.Core.dll", + "lib/netstandard1.3/Microsoft.Build.Utilities.Core.xml", + "microsoft.build.utilities.core.15.1.548.nupkg.sha512", + "microsoft.build.utilities.core.nuspec" + ] + }, + "System.Collections/4.0.11": { + "sha512": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==", + "type": "package", + "path": "system.collections/4.0.11", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.4.0.11.nupkg.sha512", + "system.collections.nuspec" + ] + }, + "System.Diagnostics.Debug/4.0.11": { + "sha512": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==", + "type": "package", + "path": "system.diagnostics.debug/4.0.11", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Debug.dll", + "ref/netcore50/System.Diagnostics.Debug.xml", + "ref/netcore50/de/System.Diagnostics.Debug.xml", + "ref/netcore50/es/System.Diagnostics.Debug.xml", + "ref/netcore50/fr/System.Diagnostics.Debug.xml", + "ref/netcore50/it/System.Diagnostics.Debug.xml", + "ref/netcore50/ja/System.Diagnostics.Debug.xml", + "ref/netcore50/ko/System.Diagnostics.Debug.xml", + "ref/netcore50/ru/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/System.Diagnostics.Debug.dll", + "ref/netstandard1.0/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/System.Diagnostics.Debug.dll", + "ref/netstandard1.3/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.debug.4.0.11.nupkg.sha512", + "system.diagnostics.debug.nuspec" + ] + }, + "System.Globalization/4.0.11": { + "sha512": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==", + "type": "package", + "path": "system.globalization/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.4.0.11.nupkg.sha512", + "system.globalization.nuspec" + ] + }, + "System.Runtime/4.1.0": { + "sha512": "v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==", + "type": "package", + "path": "system.runtime/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.1.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.InteropServices/4.1.0": { + "sha512": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==", + "type": "package", + "path": "system.runtime.interopservices/4.1.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.InteropServices.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.xml", + "ref/netcore50/de/System.Runtime.InteropServices.xml", + "ref/netcore50/es/System.Runtime.InteropServices.xml", + "ref/netcore50/fr/System.Runtime.InteropServices.xml", + "ref/netcore50/it/System.Runtime.InteropServices.xml", + "ref/netcore50/ja/System.Runtime.InteropServices.xml", + "ref/netcore50/ko/System.Runtime.InteropServices.xml", + "ref/netcore50/ru/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/System.Runtime.InteropServices.dll", + "ref/netstandard1.2/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/System.Runtime.InteropServices.dll", + "ref/netstandard1.3/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/System.Runtime.InteropServices.dll", + "ref/netstandard1.5/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.interopservices.4.1.0.nupkg.sha512", + "system.runtime.interopservices.nuspec" + ] + }, + "System.Threading/4.0.11": { + "sha512": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "type": "package", + "path": "system.threading/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll", + "system.threading.4.0.11.nupkg.sha512", + "system.threading.nuspec" + ] + }, + "System.Threading.Thread/4.0.0": { + "sha512": "gIdJqDXlOr5W9zeqFErLw3dsOsiShSCYtF9SEHitACycmvNvY8odf9kiKvp6V7aibc8C4HzzNBkWXjyfn7plbQ==", + "type": "package", + "path": "system.threading.thread/4.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Threading.Thread.dll", + "lib/netcore50/_._", + "lib/netstandard1.3/System.Threading.Thread.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Threading.Thread.dll", + "ref/netstandard1.3/System.Threading.Thread.dll", + "ref/netstandard1.3/System.Threading.Thread.xml", + "ref/netstandard1.3/de/System.Threading.Thread.xml", + "ref/netstandard1.3/es/System.Threading.Thread.xml", + "ref/netstandard1.3/fr/System.Threading.Thread.xml", + "ref/netstandard1.3/it/System.Threading.Thread.xml", + "ref/netstandard1.3/ja/System.Threading.Thread.xml", + "ref/netstandard1.3/ko/System.Threading.Thread.xml", + "ref/netstandard1.3/ru/System.Threading.Thread.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Thread.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Thread.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.thread.4.0.0.nupkg.sha512", + "system.threading.thread.nuspec" + ] + }, + "TaskPubliciser/1.0.3": { + "sha512": "FabrgazfKWTzKIO6nwNTX75PwpXuN7NX2tbu7P6qAH0m7pcjsCGVAfOiSKk4KVHcfaJIW/vtgzjbGdvIoCV1Rw==", + "type": "package", + "path": "taskpubliciser/1.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/TaskPubliciser.props", + "taskpubliciser.1.0.3.nupkg.sha512", + "taskpubliciser.nuspec", + "tasks/net472/TaskPubliciser.dll" + ] + }, + "UnlimitedHugs.Rimworld.HugsLib/10.0.1": { + "sha512": "LSviprXJV4k2+R1IShhozRgI2joyz8BSx3Mmwddb+iivz4EBgwx7i8bt0krrIyGuVRPcwThrHDEhuo9ErgMlZQ==", + "type": "package", + "path": "unlimitedhugs.rimworld.hugslib/10.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "images/icon.png", + "lib/net472/HugsLib.dll", + "lib/net472/HugsLib.xml", + "unlimitedhugs.rimworld.hugslib.10.0.1.nupkg.sha512", + "unlimitedhugs.rimworld.hugslib.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + ".NETFramework,Version=v4.7.2": [ + "Lib.Harmony >= 2.2.2", + "TaskPubliciser >= 1.0.3", + "UnlimitedHugs.Rimworld.HugsLib >= 10.0.1" + ] + }, + "packageFolders": { + "C:\\Users\\YCHEN\\.nuget\\packages\\": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\GiddyUpCore.csproj", + "projectName": "GiddyUpCore", + "projectPath": "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\GiddyUpCore.csproj", + "packagesPath": "C:\\Users\\YCHEN\\.nuget\\packages\\", + "outputPath": "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\YCHEN\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net472" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "dependencies": { + "Lib.Harmony": { + "target": "Package", + "version": "[2.2.2, )" + }, + "TaskPubliciser": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[1.0.3, )" + }, + "UnlimitedHugs.Rimworld.HugsLib": { + "include": "Compile, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "target": "Package", + "version": "[10.0.1, )" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.302\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/1.4/Source/Giddy-up-Core/obj/project.nuget.cache b/1.4/Source/Giddy-up-Core/obj/project.nuget.cache new file mode 100644 index 0000000..e46dd52 --- /dev/null +++ b/1.4/Source/Giddy-up-Core/obj/project.nuget.cache @@ -0,0 +1,21 @@ +{ + "version": 2, + "dgSpecHash": "aX176nf3fg3hsR7FdT0/gPnJUZcUdEXwPqnIFP0GI3cAc3RoRiIaGfRKRQsHl17DWIK9r0vu7ghO1dwIzbP+Pg==", + "success": true, + "projectFilePath": "C:\\Games\\App\\steamapps\\common\\RimWorld\\Mods\\GiddyUpCore\\1.4\\Source\\Giddy-up-Core\\GiddyUpCore.csproj", + "expectedPackageFiles": [ + "C:\\Users\\YCHEN\\.nuget\\packages\\lib.harmony\\2.2.2\\lib.harmony.2.2.2.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\microsoft.build.framework\\15.1.548\\microsoft.build.framework.15.1.548.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\microsoft.build.utilities.core\\15.1.548\\microsoft.build.utilities.core.15.1.548.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\system.collections\\4.0.11\\system.collections.4.0.11.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\system.diagnostics.debug\\4.0.11\\system.diagnostics.debug.4.0.11.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\system.globalization\\4.0.11\\system.globalization.4.0.11.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\system.runtime\\4.1.0\\system.runtime.4.1.0.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\system.runtime.interopservices\\4.1.0\\system.runtime.interopservices.4.1.0.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\system.threading\\4.0.11\\system.threading.4.0.11.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\system.threading.thread\\4.0.0\\system.threading.thread.4.0.0.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\taskpubliciser\\1.0.3\\taskpubliciser.1.0.3.nupkg.sha512", + "C:\\Users\\YCHEN\\.nuget\\packages\\unlimitedhugs.rimworld.hugslib\\10.0.1\\unlimitedhugs.rimworld.hugslib.10.0.1.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/1.4/Source/Giddy-up-Core/packages.config b/1.4/Source/Giddy-up-Core/packages.config new file mode 100644 index 0000000..e88e28c --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/1.4/Source/Giddy-up-Core/packages/0MultiplayerAPI.dll b/1.4/Source/Giddy-up-Core/packages/0MultiplayerAPI.dll new file mode 100644 index 0000000..c2391ea Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/0MultiplayerAPI.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/.signature.p7s b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/.signature.p7s new file mode 100644 index 0000000..36cc798 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/.signature.p7s differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/HarmonyLogo.png b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/HarmonyLogo.png new file mode 100644 index 0000000..9966dac Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/HarmonyLogo.png differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/LICENSE b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/LICENSE new file mode 100644 index 0000000..655c71c --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Andreas Pardeike + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/Lib.Harmony.2.0.0.9.nupkg b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/Lib.Harmony.2.0.0.9.nupkg new file mode 100644 index 0000000..9edef3e Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/Lib.Harmony.2.0.0.9.nupkg differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net35/0Harmony.dll b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net35/0Harmony.dll new file mode 100644 index 0000000..84a83ed Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net35/0Harmony.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net35/0Harmony.xml b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net35/0Harmony.xml new file mode 100644 index 0000000..a17cc8f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net35/0Harmony.xml @@ -0,0 +1,2476 @@ + + + + 0Harmony + + + + A factory to create delegate types + + + Default constructor + + + Creates a delegate type for a method + The method + The new delegate type + + + + A getter delegate type + Type that getter gets field/property value from + Type of the value that getter gets + The instance get getter uses + An delegate + + + + A setter delegate type + Type that setter sets field/property value for + Type of the value that setter sets + The instance the setter uses + The value the setter uses + An delegate + + + + A constructor delegate type + Type that constructor creates + An delegate + + + + A helper class for fast access to getters and setters + + + Creates an instantiation delegate + Type that constructor creates + The new instantiation delegate + + + + Creates an getter delegate for a property + Type that getter reads property from + Type of the property that gets accessed + The property + The new getter delegate + + + + Creates an getter delegate for a field + Type that getter reads field from + Type of the field that gets accessed + The field + The new getter delegate + + + + Creates an getter delegate for a field (with a list of possible field names) + Type that getter reads field/property from + Type of the field/property that gets accessed + A list of possible field names + The new getter delegate + + + + Creates an setter delegate + Type that setter assigns property value to + Type of the property that gets assigned + The property + The new setter delegate + + + + Creates an setter delegate for a field + Type that setter assigns field value to + Type of the field that gets assigned + The field + The new getter delegate + + + + A delegate to invoke a method + The instance + The method parameters + The method result + + + A helper class to invoke method with delegates + + + Creates a fast invocation handler from a method + The method to invoke + Controls if boxed value object is accessed/updated directly + The + + + The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array + passed to the fast invocation handler. + Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. + Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. + For example, + + var val = 5; + var box = (object)val; + var arr = new object[] { box }; + handler(arr); // for a method with parameter signature: ref/out/in int + + + + + If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, + such that all references to the boxed object reflect the potentially updated value. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] + now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. + + + If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, + such that potential updates to the value are reflected only in the arguments array. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. + + + + + A low level memory helper + + + Mark method for no inlining (currently only works on Mono) + The method/constructor to change + + + Detours a method + The original method/constructor + The replacement method/constructor + An error string + + + + Writes a jump to memory + The memory address + Jump destination + An error string + + + + Gets the start of a method in memory + The method/constructor + [out] Details of the exception + The method start address + + + + special parameter names that can be used in prefix and postfix methods + + + Patch function helpers + + + Adds a prefix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a prefix + The patch info + The owner (Harmony ID) + + + + Adds a postfix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a postfix + The patch info + The owner (Harmony ID) + + + + Adds a transpiler + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a transpiler + The patch info + The owner (Harmony ID) + + + + Adds a finalizer + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a finalizer + The patch info + The owner (Harmony ID) + + + + Removes a patch method + The patch info + The patch method + + + + Gets sorted patch methods + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Creates new replacement method with the latest patches and detours the original method + The original method + Information describing the patches + The newly created replacement method + + + + Creates a patch sorter + Array of patches that will be sorted + Use debugging + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods + + + Checks if the sorter was created with the same patch list and as a result can be reused to + get the sorted order of the patches. + List of patches to check against + true if equal + + + Removes one unresolved dependency from the least important patch. + + + Outputs all unblocked patches from the waiting list to results list + + + Adds patch to both results list and handled patches set + Patch to add + + + Wrapper used over the Patch object to allow faster dependency access and + dependency removal in case of cyclic dependencies + + + Create patch wrapper object used for sorting + Patch to wrap + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + Determines whether patches are equal + The other patch + true if equal + + + Hash function + A hash code + + + Bidirectionally registers Patches as after dependencies + List of dependencies to register + + + Bidirectionally registers Patches as before dependencies + List of dependencies to register + + + Bidirectionally removes Patch from after dependencies + Patch to remove + + + Bidirectionally removes Patch from before dependencies + Patch to remove + + + Specifies the type of method + + + + This is a normal method + + + This is a getter + + + This is a setter + + + This is a constructor + + + This is a static constructor + + + Specifies the type of argument + + + + This is a normal argument + + + This is a reference argument (ref) + + + This is an out argument (out) + + + This is a pointer argument (&) + + + Specifies the type of patch + + + + Any patch + + + A prefix patch + + + A postfix patch + + + A transpiler + + + A finalizer + + + A reverse patch + + + Specifies the type of reverse patch + + + + Use the unmodified original method (directly from IL) + + + Use the original as it is right now including previous patches but excluding future ones + + + The base class for all Harmony annotations (not meant to be used directly) + + + + The common information for all attributes + + + Annotation to define your Harmony patch methods + + + + An empty annotation can be used together with TargetMethod(s) + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define your standin methods for reverse patching + + + + An annotation that specifies the type of reverse patching + The of the reverse patch + + + + A Harmony annotation to define that all methods in a class are to be patched + + + + A Harmony annotation + + + + A Harmony annotation to define patch priority + The priority + + + + A Harmony annotation + + + + A Harmony annotation to define that a patch comes before another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to define that a patch comes after another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to debug a patch (output uses to log to your Desktop) + + + + Specifies the Prepare function in a patch class + + + + Specifies the Cleanup function in a patch class + + + + Specifies the TargetMethod function in a patch class + + + + Specifies the TargetMethods function in a patch class + + + + Specifies the Prefix function in a patch class + + + + Specifies the Postfix function in a patch class + + + + Specifies the Transpiler function in a patch class + + + + Specifies the Finalizer function in a patch class + + + + A Harmony annotation + + + + The name of the original argument + + + + The index of the original argument + + + + The new name of the original argument + + + + An annotation to declare injected arguments by name + + + + An annotation to declare injected arguments by index + Zero-based index + + + + An annotation to declare injected arguments by renaming them + Name of the original argument + New name + + + + An annotation to declare injected arguments by index and renaming them + Zero-based index + New name + + + + An abstract wrapper around OpCode and their operands. Used by transpilers + + + + The opcode + + + + The operand + + + + All labels defined on this instruction + + + + All exception block boundaries defined on this instruction + + + + Creates a new CodeInstruction with a given opcode and optional operand + The opcode + The operand + + + + Create a full copy (including labels and exception blocks) of a CodeInstruction + The to copy + + + + Clones a CodeInstruction and resets its labels and exception blocks + A lightweight copy of this code instruction + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its opcode + The opcode + A copy of this CodeInstruction with a new opcode + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its operand + The operand + A copy of this CodeInstruction with a new operand + + + + Returns a string representation of the code instruction + A string representation of the code instruction + + + + Exception block types + + + + The beginning of an exception block + + + + The beginning of a catch block + + + + The beginning of an except filter block + + + + The beginning of a fault block + + + + The beginning of a finally block + + + + The end of an exception block + + + + An exception block + + + + Block type + + + + Catch type + + + + Creates an exception block + The + The catch type + + + + The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain + + + + The unique identifier + + + + Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" + This is for full debugging. To debug only specific patches, use the attribute + + + + Creates a new Harmony instance + A unique identifier (you choose your own) + A Harmony instance + + + + Searches the current assembly for Harmony annotations and uses them to create patches + + + + Creates a empty patch processor for an original method + The original method/constructor + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + A new instance + + + + Creates a reverse patcher for one of your stub methods + The original method/constructor + The stand-in stub method as + A new instance + + + + Searches an assembly for Harmony annotations and uses them to create patches + The assembly + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + The replacement method that was created to patch the original method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Unpatches methods + The optional Harmony ID to restrict unpatching to a specific instance + This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID + + + + Unpatches a method + The original method/constructor + The + The optional Harmony ID to restrict unpatching to a specific instance + + + + Unpatches a method + The original method/constructor + The patch method as method to remove + + + + Test for patches from a specific Harmony ID + The Harmony ID + True if patches for this ID exist + + + + Gets patch information for a given original method + The original method/constructor + The patch information as + + + + Gets the methods this instance has patched + An enumeration of original methods/constructors + + + + Gets all patched original methods in the appdomain + An enumeration of patched original methods/constructors + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly versions keyed by Harmony IDs + + + + Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure + + + + Default serialization constructor (not implemented) + The info + The context + + + + Get a list of IL instructions in pairs of offset+code + A list of key/value pairs which represent an offset and the code at that offset + + + + Get a list of IL instructions without offsets + A list of + + + + Get the error offset of the errornous IL instruction + The offset + + + + Get the index of the errornous IL instruction + The index into the list of instructions or -1 if not found + + + + A wrapper around a method to use it as a patch (for example a Prefix) + + + + The original method + + + + Class/type declaring this patch + + + + Patch method name + + + + Optional patch + + + + Array of argument types of the patch method + + + + of the patch + + + + Install this patch before patches with these Harmony IDs + + + + Install this patch after patches with these Harmony IDs + + + + Reverse patch type, see + + + + Create debug output for this patch + + + + Default constructor + + + + Creates a patch from a given method + The original method + + + + Creates a patch from a given method + The original method + The patch + A list of harmony IDs that should come after this patch + A list of harmony IDs that should come before this patch + Set to true to generate debug output + + + + Creates a patch from a given method + The patch class/type + The patch method name + The optional argument types of the patch method (for overloaded methods) + + + + Gets the names of all internal patch info fields + A list of field names + + + + Merges annotations + The list of to merge + The merged + + + + Returns a string that represents the annotation + A string representation + + + + Annotation extensions + + + + Copies annotation information + The source + The destination + + + + Clones an annotation + The to clone + A copied + + + + Merges annotations + The master + The detail + A new, merged + + + + Gets all annotations on a class/type + The class/type + A list of all + + + + Gets merged annotations on a class/type + The class/type + The merged + + + + Gets all annotations on a method + The method/constructor + A list of + + + + Gets merged annotations on a method + The method/constructor + The merged + + + + + A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. + Used by the calli instruction, can be used by transpilers + + + + + See + + + + See + + + + See + + + + The list of all parameter types or function pointer signatures received by the call site + + + + The return type or function pointer signature returned by the call site + + + + Returns a string representation of the inline signature + A string representation of the inline signature + + + + + A mutable representation of a parameter type with an attached type modifier, + similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq + + + + + Whether this is a modopt (optional modifier type) or a modreq (required modifier type) + + + + The modifier type attached to the parameter type + + + + The modified parameter type + + + + Returns a string representation of the modifier type + A string representation of the modifier type + + + + Patch serialization + + + + Control the binding of a serialized object to a type + Specifies the assembly name of the serialized object + Specifies the type name of the serialized object + The type of the object the formatter creates a new instance of + + + + Serializes a patch info + The + The serialized data + + + + Deserialize a patch info + The serialized data + A + + + + Compare function to sort patch priorities + The patch + Zero-based index + The priority + A standard sort integer (-1, 0, 1) + + + + Serializable patch information + + + + Prefixes as an array of + + + + Postfixes as an array of + + + + Transpilers as an array of + + + + Finalizers as an array of + + + + Default constructor + + + + Returns if any of the patches wants debugging turned on + + + + Adds a prefix + + The prefix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for prefixes that should run after this prefix + A list of Harmony IDs for prefixes that should run before this prefix + A flag that will log the replacement method via every time this prefix is used to build the replacement, even in the future + + + + Removes prefixes + The owner of the prefix or * for any prefix + + + + Adds a postfix + The postfix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for postfixes that should run after this postfix + A list of Harmony IDs for postfixes that should run before this postfix + A flag that will log the replacement method via every time this postfix is used to build the replacement, even in the future + + + + Removes postfixes + The owner of the postfix or * for any postfix + + + + Adds a transpiler + The transpiler method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for transpilers that should run after this transpiler + A list of Harmony IDs for transpilers that should run before this transpiler + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes transpilers + The owner of the transpiler or * for any transpiler + + + + Adds a finalizer + The finalizer method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for finalizers that should run after this finalizer + A list of Harmony IDs for finalizers that should run before this finalizer + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes finalizers + The owner of the finalizer or * for any finalizer + + + + Removes a patch using its method + The method of the patch to remove + + + + A serializable patch + + + + Zero-based index + + + + The owner (Harmony ID) + + + + The priority, see + + + + Keep this patch before the patches indicated in the list of Harmony IDs + + + + Keep this patch after the patches indicated in the list of Harmony IDs + + + + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + The method of the static patch method + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Get the patch method or a DynamicMethod if original patch method is a patch factory + The original method/constructor + The method of the patch + + + + Determines whether patches are equal + The other patch + true if equal + + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + + Hash function + A hash code + + + + A PatchClassProcessor used to turn on a class/type into patches + + + + Creates an empty patch class processor + The Harmony instance + The class to process + + + + Applies the patches + A list of all created replacement methods or null if patch class is not annotated + + + + A group of patches + + + + A collection of prefix + + + + A collection of postfix + + + + A collection of transpiler + + + + A collection of finalizer + + + + Gets all owners (Harmony IDs) or all known patches + The patch owners + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + + + + A PatchProcessor handles patches on a method/constructor + + + + Creates an empty patch processor + The Harmony instance + The original method/constructor + + + + Adds a prefix + The prefix as a + A for chaining calls + + + + Adds a prefix + The prefix method + A for chaining calls + + + + Adds a postfix + The postfix as a + A for chaining calls + + + + Adds a postfix + The postfix method + A for chaining calls + + + + Adds a transpiler + The transpiler as a + A for chaining calls + + + + Adds a transpiler + The transpiler method + A for chaining calls + + + + Adds a finalizer + The finalizer as a + A for chaining calls + + + + Adds a finalizer + The finalizer method + A for chaining calls + + + + Gets all patched original methods in the appdomain + An enumeration of patched method/constructor + + + + Applies all registered patches + The generated replacement method + + + + Unpatches patches of a given type and/or Harmony ID + The patch type + Harmony ID or * for any + A for chaining calls + + + + Unpatches a specific patch + The method of the patch + A for chaining calls + + + + Gets patch information on an original + The original method/constructor + The patch information as + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly version keyed by Harmony ID + + + + Returns the methods unmodified list of code instructions + The original method/constructor + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list containing all the original + + + + Returns the methods unmodified list of code instructions + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + A list containing all the original + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + All instructions as opcode/operand pairs + + + + A patch priority + + + + Patch last + + + + Patch with very low priority + + + + Patch with low priority + + + + Patch with lower than normal priority + + + + Patch with normal priority + + + + Patch with higher than normal priority + + + + Patch with high priority + + + + Patch with very high priority + + + + Patch first + + + + A reverse patcher + + + + Creates a reverse patcher + The Harmony instance + The original method/constructor + Your stand-in stub method as + + + + Applies the patch + The type of patch, see + The generated replacement method + + + + A collection of commonly used transpilers + + + + A transpiler that replaces all occurrences of a given method with another one + The enumeration of to act on + Method or constructor to search for + Method or constructor to replace with + Modified enumeration of + + + + A transpiler that alters instructions that match a predicate by calling an action + The enumeration of to act on + A predicate selecting the instructions to change + An action to apply to matching instructions + Modified enumeration of + + + + A transpiler that logs a text at the beginning of the method + The instructions to act on + The log text + Modified enumeration of + + + + A helper class for reflection related functions + + + + Shortcut for to simplify the use of reflections and make it work for any access level + + + + Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type + + + + Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise + The name + A type or null if not found + + + + Gets all type by name from a given assembly. This is a wrapper that respects different .NET versions + The assembly + An array of types + + + + Applies a function going up the type hierarchy and stops at the first non null result + Result type of func() + The class/type to start with + The evaluation function returning T + Returns the first non null result or default(T) when reaching the top level type object + + + + Applies a function going into inner types and stops at the first non null result + Generic type parameter + The class/type to start with + The evaluation function returning T + Returns the first non null result or null with no match + + + + Gets the reflection information for a directly declared field + The class/type where the field is defined + The name of the field + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field by searching the type and all its super types + The class/type where the field is defined + The name of the field (case sensitive) + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field + The class/type where the field is declared + The zero-based index of the field inside the class definition + A field or null when type is null or when the field cannot be found + + + + Gets the reflection information for a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a property by searching the type and all its super types + The class/type + The name + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a directly declared method + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The full name like Namespace.Type1.Type2:MethodName of the type where the method is declared + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the names of all method that are declared in a type + The declaring class/type + A list of method names + + + + Gets the names of all method that are declared in the type of the instance + An instance of the type to search in + A list of method names + + + + Gets the names of all fields that are declared in a type + The declaring class/type + A list of field names + + + + Gets the names of all fields that are declared in the type of the instance + An instance of the type to search in + A list of field names + + + + Gets the names of all properties that are declared in a type + The declaring class/type + A list of property names + + + + Gets the names of all properties that are declared in the type of the instance + An instance of the type to search in + A list of property names + + + + Gets the type of any class member of + A member + The class/type of this member + + + + Test if a class member is actually an concrete implementation + A member + True if the member is a declared + + + + Gets the real implementation of a class member + A member + The member itself if its declared. Otherwise the member that is actually implemented in some base type + + + + Gets the reflection information for a directly declared constructor + The class/type where the constructor is declared + Optional parameters to target a specific overload of the constructor + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the constructor cannot be found + + + + Gets the reflection information for a constructor by searching the type and all its super types + The class/type where the constructor is declared + Optional parameters to target a specific overload of the method + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the method cannot be found + + + + Gets reflection information for all declared constructors + The class/type where the constructors are declared + Optional parameters to only consider static constructors + A list of constructor infos + + + + Gets reflection information for all declared methods + The class/type where the methods are declared + A list of methods + + + + Gets reflection information for all declared properties + The class/type where the properties are declared + A list of properties + + + + Gets reflection information for all declared fields + The class/type where the fields are declared + A list of fields + + + + Gets the return type of a method or constructor + The method/constructor + The return type + + + + Given a type, returns the first inner type matching a recursive search by name + The class/type to start searching at + The name of the inner type (case sensitive) + The inner type or null if type/name is null or if a type with that name cannot be found + + + + Given a type, returns the first inner type matching a recursive search with a predicate + The class/type to start searching at + The predicate to search with + The inner type or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first method matching a predicate + The class/type to start searching at + The predicate to search with + The method or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first constructor matching a predicate + The class/type to start searching at + The predicate to search with + The constructor info or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first property matching a predicate + The class/type to start searching at + The predicate to search with + The property or null if type/predicate is null or if a type with that name cannot be found + + + + Returns an array containing the type of each object in the given array + An array of objects + An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) + + + + Creates an array of input parameters for a given method and a given set of potential inputs + The method/constructor you are planing to call + The possible input parameters in any order + An object array matching the method signature + + + + A read/writable reference to an instance field + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The runtime instance to access the field (leave empty for static fields) + An readable/assignable object representing the field + + + + Creates an instance field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + A read and writable field reference delegate + + + + Creates an instance field reference for a specific instance + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The instance + The name of the field + An readable/assignable object representing the field + + + + Creates an instance field reference delegate + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The field of the field + A read and writable delegate + + + + A read/writable reference delegate to a static field + The type of the field + An readable/assignable object representing the static field + + + + Creates a static field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + An readable/assignable object representing the static field + + + + Creates a static field reference delegate + The type of the field + The field + A read and writable delegate + + + + Returns who called the current method + The calling method/constructor (excluding the caller) + + + + Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) + The exception to rethrow + + + + Tells you if the current runtime is based on Mono + True if we are running under Mono, false otherwise (.NET) + + + + Throws a missing member runtime exception + The type that is involved + A list of names + + + + Gets default value for a specific type + The class/type + The default value + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + A copy of the original object but of type T + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + [out] The copy of the original object + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + + + + Makes a deep copy of any object + The original object + The type of the instance that should be created + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + The copy of the original object + + + + Tests if a type is a struct + The type + True if the type is a struct + + + + Tests if a type is a class + The type + True if the type is a class + + + + Tests if a type is a value type + The type + True if the type is a value type + + + + Tests if a type is an integer type + The type + True if the type represents some integer + + + + Tests if a type is a floating point type + The type + True if the type represents some floating point + + + + Tests if a type is a numerical type + The type + True if the type represents some number + + + + Tests if a type is void + The type + True if the type is void + + + + Test whether an instance is of a nullable type + Type of instance + An instance to test + True if instance is of nullable type, false if not + + + + Calculates a combined hash code for an enumeration of objects + The objects + The hash code + + + + General extensions for common cases + + + + Joins an enumeration with a value converter and a delimiter to a string + The inner type of the enumeration + The enumeration + An optional value converter (from T to string) + An optional delimiter + The values joined into a string + + + + Converts an array of types (for example methods arguments) into a human readable form + The array of types + A human readable description including brackets + + + + A full description of a type + The type + A human readable description + + + + A a full description of a method or a constructor without assembly details but with generics + The method/constructor + A human readable description + + + + A helper converting parameter infos to types + The array of parameter infos + An array of types + + + + A helper to access a value via key from a dictionary + The key type + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist + + + + A helper to access a value via key from a dictionary with extra casting + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist or cannot be cast to T + + + + Escapes Unicode and ASCII non printable characters + The string to convert + The string to convert + A string literal surrounded by + + + + Extensions for + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand has the same type and is equal to the value + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand is equal to the value + This is an optimized version of for + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand is equal to the given operand + This is an optimized version of for + + + + Tests for any form of Ldarg* + The + The (optional) index + True if it matches one of the variations + + + + Tests for Ldarga/Ldarga_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for Starg/Starg_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for any form of Ldloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests for any form of Stloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests if the code instruction branches + The + The label if the instruction is a branch operation or if not + True if the instruction branches + + + + Tests if the code instruction calls the method/constructor + The + The method + True if the instruction calls the method or constructor + + + + Tests if the code instruction loads a constant + The + True if the instruction loads a constant + + + + Tests if the code instruction loads an integer constant + The + The integer constant + True if the instruction loads the constant + + + + Tests if the code instruction loads a floating point constant + The + The floating point constant + True if the instruction loads the constant + + + + Tests if the code instruction loads an enum constant + The + The enum + True if the instruction loads the constant + + + + Tests if the code instruction loads a field + The + The field + Set to true if the address of the field is loaded + True if the instruction loads the field + + + + Tests if the code instruction stores a field + The + The field + True if the instruction stores this field + + + + General extensions for collections + + + + A simple way to execute code for every element in a collection + The inner type of the collection + The collection + The action to execute + + + + A simple way to execute code for elements in a collection matching a condition + The inner type of the collection + The collection + The predicate + The action to execute + + + + A helper to add an item to a collection + The inner type of the collection + The collection + The item to add + The collection containing the item + + + + A helper to add an item to an array + The inner type of the collection + The array + The item to add + The array containing the item + + + + A helper to add items to an array + The inner type of the collection + The array + The items to add + The array containing the items + + + + A file log for debugging + + + + Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop + + + + The indent character. The default is tab + + + + The current indent level + + + + Changes the indentation level + The value to add to the indentation level + + + + Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + The string to log + + + + Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + A list of strings to log (they will not be re-indented) + + + + Returns the log buffer and optionally empties it + True to empty the buffer + The buffer. + + + + Replaces the buffer with new lines + The lines to store + + + + Flushes the log buffer to disk (use in combination with LogBuffered) + + + + Log a string directly to disk. Slower method that prevents missing information in case of a crash + The string to log. + + + + Resets and deletes the log + + + + Logs some bytes as hex values + The pointer to some memory + The length of bytes to log + + + + A helper class to retrieve reflection info for non-private methods + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The generic result type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + A reflection helper to read and write private elements + The result type defined by GetValue() + + + + Creates a traverse instance from an existing instance + The existing instance + + + + Gets/Sets the current value + The value to read or write + + + + A reflection helper to read and write private elements + + + + Creates a new traverse instance from a class/type + The class/type + A instance + + + + Creates a new traverse instance from a class T + The class + A instance + + + + Creates a new traverse instance from an instance + The object + A instance + + + + Creates a new traverse instance from a named type + The type name, for format see + A instance + + + + Creates a new and empty traverse instance + + + + Creates a new traverse instance from a class/type + The class/type + + + + Creates a new traverse instance from an instance + The object + + + + Gets the current value + The value + + + + Gets the current value + The type of the value + The value + + + + Invokes the current method with arguments and returns the result + The method arguments + The value returned by the method + + + + Invokes the current method with arguments and returns the result + The type of the value + The method arguments + The value returned by the method + + + + Sets a value of the current field or property + The value + The same traverse instance + + + + Gets the type of the current field or property + The type + + + + Moves the current traverse instance to a inner type + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type of the field + The type name + A traverse instance + + + + Gets all fields of the current type + A list of field names + + + + Moves the current traverse instance to a property + The type name + Optional property index + A traverse instance + + + + Moves the current traverse instance to a field + The type of the property + The type name + Optional property index + A traverse instance + + + + Gets all properties of the current type + A list of property names + + + + Moves the current traverse instance to a method + The name of the method + The arguments defining the argument types of the method overload + A traverse instance + + + + Moves the current traverse instance to a method + The name of the method + The argument types of the method + The arguments for the method + A traverse instance + + + + Gets all methods of the current type + A list of method names + + + + Checks if the current traverse instance is for a field + True if its a field + + + + Checks if the current traverse instance is for a property + True if its a property + + + + Checks if the current traverse instance is for a method + True if its a method + + + + Checks if the current traverse instance is for a type + True if its a type + + + + Iterates over all fields of the current type and executes a traverse action + Original object + The action receiving a instance for each field + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each field pair + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the field pair and the instances + + + + Iterates over all properties of the current type and executes a traverse action + Original object + The action receiving a instance for each property + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each property pair + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the property pair and the instances + + + + A default field action that copies fields to fields + + + + Returns a string that represents the current traverse + A string representation + + + + diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net45/0Harmony.dll b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net45/0Harmony.dll new file mode 100644 index 0000000..febfd96 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net45/0Harmony.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net45/0Harmony.xml b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net45/0Harmony.xml new file mode 100644 index 0000000..a17cc8f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net45/0Harmony.xml @@ -0,0 +1,2476 @@ + + + + 0Harmony + + + + A factory to create delegate types + + + Default constructor + + + Creates a delegate type for a method + The method + The new delegate type + + + + A getter delegate type + Type that getter gets field/property value from + Type of the value that getter gets + The instance get getter uses + An delegate + + + + A setter delegate type + Type that setter sets field/property value for + Type of the value that setter sets + The instance the setter uses + The value the setter uses + An delegate + + + + A constructor delegate type + Type that constructor creates + An delegate + + + + A helper class for fast access to getters and setters + + + Creates an instantiation delegate + Type that constructor creates + The new instantiation delegate + + + + Creates an getter delegate for a property + Type that getter reads property from + Type of the property that gets accessed + The property + The new getter delegate + + + + Creates an getter delegate for a field + Type that getter reads field from + Type of the field that gets accessed + The field + The new getter delegate + + + + Creates an getter delegate for a field (with a list of possible field names) + Type that getter reads field/property from + Type of the field/property that gets accessed + A list of possible field names + The new getter delegate + + + + Creates an setter delegate + Type that setter assigns property value to + Type of the property that gets assigned + The property + The new setter delegate + + + + Creates an setter delegate for a field + Type that setter assigns field value to + Type of the field that gets assigned + The field + The new getter delegate + + + + A delegate to invoke a method + The instance + The method parameters + The method result + + + A helper class to invoke method with delegates + + + Creates a fast invocation handler from a method + The method to invoke + Controls if boxed value object is accessed/updated directly + The + + + The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array + passed to the fast invocation handler. + Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. + Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. + For example, + + var val = 5; + var box = (object)val; + var arr = new object[] { box }; + handler(arr); // for a method with parameter signature: ref/out/in int + + + + + If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, + such that all references to the boxed object reflect the potentially updated value. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] + now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. + + + If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, + such that potential updates to the value are reflected only in the arguments array. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. + + + + + A low level memory helper + + + Mark method for no inlining (currently only works on Mono) + The method/constructor to change + + + Detours a method + The original method/constructor + The replacement method/constructor + An error string + + + + Writes a jump to memory + The memory address + Jump destination + An error string + + + + Gets the start of a method in memory + The method/constructor + [out] Details of the exception + The method start address + + + + special parameter names that can be used in prefix and postfix methods + + + Patch function helpers + + + Adds a prefix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a prefix + The patch info + The owner (Harmony ID) + + + + Adds a postfix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a postfix + The patch info + The owner (Harmony ID) + + + + Adds a transpiler + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a transpiler + The patch info + The owner (Harmony ID) + + + + Adds a finalizer + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a finalizer + The patch info + The owner (Harmony ID) + + + + Removes a patch method + The patch info + The patch method + + + + Gets sorted patch methods + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Creates new replacement method with the latest patches and detours the original method + The original method + Information describing the patches + The newly created replacement method + + + + Creates a patch sorter + Array of patches that will be sorted + Use debugging + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods + + + Checks if the sorter was created with the same patch list and as a result can be reused to + get the sorted order of the patches. + List of patches to check against + true if equal + + + Removes one unresolved dependency from the least important patch. + + + Outputs all unblocked patches from the waiting list to results list + + + Adds patch to both results list and handled patches set + Patch to add + + + Wrapper used over the Patch object to allow faster dependency access and + dependency removal in case of cyclic dependencies + + + Create patch wrapper object used for sorting + Patch to wrap + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + Determines whether patches are equal + The other patch + true if equal + + + Hash function + A hash code + + + Bidirectionally registers Patches as after dependencies + List of dependencies to register + + + Bidirectionally registers Patches as before dependencies + List of dependencies to register + + + Bidirectionally removes Patch from after dependencies + Patch to remove + + + Bidirectionally removes Patch from before dependencies + Patch to remove + + + Specifies the type of method + + + + This is a normal method + + + This is a getter + + + This is a setter + + + This is a constructor + + + This is a static constructor + + + Specifies the type of argument + + + + This is a normal argument + + + This is a reference argument (ref) + + + This is an out argument (out) + + + This is a pointer argument (&) + + + Specifies the type of patch + + + + Any patch + + + A prefix patch + + + A postfix patch + + + A transpiler + + + A finalizer + + + A reverse patch + + + Specifies the type of reverse patch + + + + Use the unmodified original method (directly from IL) + + + Use the original as it is right now including previous patches but excluding future ones + + + The base class for all Harmony annotations (not meant to be used directly) + + + + The common information for all attributes + + + Annotation to define your Harmony patch methods + + + + An empty annotation can be used together with TargetMethod(s) + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define your standin methods for reverse patching + + + + An annotation that specifies the type of reverse patching + The of the reverse patch + + + + A Harmony annotation to define that all methods in a class are to be patched + + + + A Harmony annotation + + + + A Harmony annotation to define patch priority + The priority + + + + A Harmony annotation + + + + A Harmony annotation to define that a patch comes before another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to define that a patch comes after another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to debug a patch (output uses to log to your Desktop) + + + + Specifies the Prepare function in a patch class + + + + Specifies the Cleanup function in a patch class + + + + Specifies the TargetMethod function in a patch class + + + + Specifies the TargetMethods function in a patch class + + + + Specifies the Prefix function in a patch class + + + + Specifies the Postfix function in a patch class + + + + Specifies the Transpiler function in a patch class + + + + Specifies the Finalizer function in a patch class + + + + A Harmony annotation + + + + The name of the original argument + + + + The index of the original argument + + + + The new name of the original argument + + + + An annotation to declare injected arguments by name + + + + An annotation to declare injected arguments by index + Zero-based index + + + + An annotation to declare injected arguments by renaming them + Name of the original argument + New name + + + + An annotation to declare injected arguments by index and renaming them + Zero-based index + New name + + + + An abstract wrapper around OpCode and their operands. Used by transpilers + + + + The opcode + + + + The operand + + + + All labels defined on this instruction + + + + All exception block boundaries defined on this instruction + + + + Creates a new CodeInstruction with a given opcode and optional operand + The opcode + The operand + + + + Create a full copy (including labels and exception blocks) of a CodeInstruction + The to copy + + + + Clones a CodeInstruction and resets its labels and exception blocks + A lightweight copy of this code instruction + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its opcode + The opcode + A copy of this CodeInstruction with a new opcode + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its operand + The operand + A copy of this CodeInstruction with a new operand + + + + Returns a string representation of the code instruction + A string representation of the code instruction + + + + Exception block types + + + + The beginning of an exception block + + + + The beginning of a catch block + + + + The beginning of an except filter block + + + + The beginning of a fault block + + + + The beginning of a finally block + + + + The end of an exception block + + + + An exception block + + + + Block type + + + + Catch type + + + + Creates an exception block + The + The catch type + + + + The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain + + + + The unique identifier + + + + Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" + This is for full debugging. To debug only specific patches, use the attribute + + + + Creates a new Harmony instance + A unique identifier (you choose your own) + A Harmony instance + + + + Searches the current assembly for Harmony annotations and uses them to create patches + + + + Creates a empty patch processor for an original method + The original method/constructor + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + A new instance + + + + Creates a reverse patcher for one of your stub methods + The original method/constructor + The stand-in stub method as + A new instance + + + + Searches an assembly for Harmony annotations and uses them to create patches + The assembly + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + The replacement method that was created to patch the original method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Unpatches methods + The optional Harmony ID to restrict unpatching to a specific instance + This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID + + + + Unpatches a method + The original method/constructor + The + The optional Harmony ID to restrict unpatching to a specific instance + + + + Unpatches a method + The original method/constructor + The patch method as method to remove + + + + Test for patches from a specific Harmony ID + The Harmony ID + True if patches for this ID exist + + + + Gets patch information for a given original method + The original method/constructor + The patch information as + + + + Gets the methods this instance has patched + An enumeration of original methods/constructors + + + + Gets all patched original methods in the appdomain + An enumeration of patched original methods/constructors + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly versions keyed by Harmony IDs + + + + Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure + + + + Default serialization constructor (not implemented) + The info + The context + + + + Get a list of IL instructions in pairs of offset+code + A list of key/value pairs which represent an offset and the code at that offset + + + + Get a list of IL instructions without offsets + A list of + + + + Get the error offset of the errornous IL instruction + The offset + + + + Get the index of the errornous IL instruction + The index into the list of instructions or -1 if not found + + + + A wrapper around a method to use it as a patch (for example a Prefix) + + + + The original method + + + + Class/type declaring this patch + + + + Patch method name + + + + Optional patch + + + + Array of argument types of the patch method + + + + of the patch + + + + Install this patch before patches with these Harmony IDs + + + + Install this patch after patches with these Harmony IDs + + + + Reverse patch type, see + + + + Create debug output for this patch + + + + Default constructor + + + + Creates a patch from a given method + The original method + + + + Creates a patch from a given method + The original method + The patch + A list of harmony IDs that should come after this patch + A list of harmony IDs that should come before this patch + Set to true to generate debug output + + + + Creates a patch from a given method + The patch class/type + The patch method name + The optional argument types of the patch method (for overloaded methods) + + + + Gets the names of all internal patch info fields + A list of field names + + + + Merges annotations + The list of to merge + The merged + + + + Returns a string that represents the annotation + A string representation + + + + Annotation extensions + + + + Copies annotation information + The source + The destination + + + + Clones an annotation + The to clone + A copied + + + + Merges annotations + The master + The detail + A new, merged + + + + Gets all annotations on a class/type + The class/type + A list of all + + + + Gets merged annotations on a class/type + The class/type + The merged + + + + Gets all annotations on a method + The method/constructor + A list of + + + + Gets merged annotations on a method + The method/constructor + The merged + + + + + A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. + Used by the calli instruction, can be used by transpilers + + + + + See + + + + See + + + + See + + + + The list of all parameter types or function pointer signatures received by the call site + + + + The return type or function pointer signature returned by the call site + + + + Returns a string representation of the inline signature + A string representation of the inline signature + + + + + A mutable representation of a parameter type with an attached type modifier, + similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq + + + + + Whether this is a modopt (optional modifier type) or a modreq (required modifier type) + + + + The modifier type attached to the parameter type + + + + The modified parameter type + + + + Returns a string representation of the modifier type + A string representation of the modifier type + + + + Patch serialization + + + + Control the binding of a serialized object to a type + Specifies the assembly name of the serialized object + Specifies the type name of the serialized object + The type of the object the formatter creates a new instance of + + + + Serializes a patch info + The + The serialized data + + + + Deserialize a patch info + The serialized data + A + + + + Compare function to sort patch priorities + The patch + Zero-based index + The priority + A standard sort integer (-1, 0, 1) + + + + Serializable patch information + + + + Prefixes as an array of + + + + Postfixes as an array of + + + + Transpilers as an array of + + + + Finalizers as an array of + + + + Default constructor + + + + Returns if any of the patches wants debugging turned on + + + + Adds a prefix + + The prefix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for prefixes that should run after this prefix + A list of Harmony IDs for prefixes that should run before this prefix + A flag that will log the replacement method via every time this prefix is used to build the replacement, even in the future + + + + Removes prefixes + The owner of the prefix or * for any prefix + + + + Adds a postfix + The postfix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for postfixes that should run after this postfix + A list of Harmony IDs for postfixes that should run before this postfix + A flag that will log the replacement method via every time this postfix is used to build the replacement, even in the future + + + + Removes postfixes + The owner of the postfix or * for any postfix + + + + Adds a transpiler + The transpiler method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for transpilers that should run after this transpiler + A list of Harmony IDs for transpilers that should run before this transpiler + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes transpilers + The owner of the transpiler or * for any transpiler + + + + Adds a finalizer + The finalizer method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for finalizers that should run after this finalizer + A list of Harmony IDs for finalizers that should run before this finalizer + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes finalizers + The owner of the finalizer or * for any finalizer + + + + Removes a patch using its method + The method of the patch to remove + + + + A serializable patch + + + + Zero-based index + + + + The owner (Harmony ID) + + + + The priority, see + + + + Keep this patch before the patches indicated in the list of Harmony IDs + + + + Keep this patch after the patches indicated in the list of Harmony IDs + + + + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + The method of the static patch method + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Get the patch method or a DynamicMethod if original patch method is a patch factory + The original method/constructor + The method of the patch + + + + Determines whether patches are equal + The other patch + true if equal + + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + + Hash function + A hash code + + + + A PatchClassProcessor used to turn on a class/type into patches + + + + Creates an empty patch class processor + The Harmony instance + The class to process + + + + Applies the patches + A list of all created replacement methods or null if patch class is not annotated + + + + A group of patches + + + + A collection of prefix + + + + A collection of postfix + + + + A collection of transpiler + + + + A collection of finalizer + + + + Gets all owners (Harmony IDs) or all known patches + The patch owners + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + + + + A PatchProcessor handles patches on a method/constructor + + + + Creates an empty patch processor + The Harmony instance + The original method/constructor + + + + Adds a prefix + The prefix as a + A for chaining calls + + + + Adds a prefix + The prefix method + A for chaining calls + + + + Adds a postfix + The postfix as a + A for chaining calls + + + + Adds a postfix + The postfix method + A for chaining calls + + + + Adds a transpiler + The transpiler as a + A for chaining calls + + + + Adds a transpiler + The transpiler method + A for chaining calls + + + + Adds a finalizer + The finalizer as a + A for chaining calls + + + + Adds a finalizer + The finalizer method + A for chaining calls + + + + Gets all patched original methods in the appdomain + An enumeration of patched method/constructor + + + + Applies all registered patches + The generated replacement method + + + + Unpatches patches of a given type and/or Harmony ID + The patch type + Harmony ID or * for any + A for chaining calls + + + + Unpatches a specific patch + The method of the patch + A for chaining calls + + + + Gets patch information on an original + The original method/constructor + The patch information as + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly version keyed by Harmony ID + + + + Returns the methods unmodified list of code instructions + The original method/constructor + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list containing all the original + + + + Returns the methods unmodified list of code instructions + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + A list containing all the original + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + All instructions as opcode/operand pairs + + + + A patch priority + + + + Patch last + + + + Patch with very low priority + + + + Patch with low priority + + + + Patch with lower than normal priority + + + + Patch with normal priority + + + + Patch with higher than normal priority + + + + Patch with high priority + + + + Patch with very high priority + + + + Patch first + + + + A reverse patcher + + + + Creates a reverse patcher + The Harmony instance + The original method/constructor + Your stand-in stub method as + + + + Applies the patch + The type of patch, see + The generated replacement method + + + + A collection of commonly used transpilers + + + + A transpiler that replaces all occurrences of a given method with another one + The enumeration of to act on + Method or constructor to search for + Method or constructor to replace with + Modified enumeration of + + + + A transpiler that alters instructions that match a predicate by calling an action + The enumeration of to act on + A predicate selecting the instructions to change + An action to apply to matching instructions + Modified enumeration of + + + + A transpiler that logs a text at the beginning of the method + The instructions to act on + The log text + Modified enumeration of + + + + A helper class for reflection related functions + + + + Shortcut for to simplify the use of reflections and make it work for any access level + + + + Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type + + + + Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise + The name + A type or null if not found + + + + Gets all type by name from a given assembly. This is a wrapper that respects different .NET versions + The assembly + An array of types + + + + Applies a function going up the type hierarchy and stops at the first non null result + Result type of func() + The class/type to start with + The evaluation function returning T + Returns the first non null result or default(T) when reaching the top level type object + + + + Applies a function going into inner types and stops at the first non null result + Generic type parameter + The class/type to start with + The evaluation function returning T + Returns the first non null result or null with no match + + + + Gets the reflection information for a directly declared field + The class/type where the field is defined + The name of the field + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field by searching the type and all its super types + The class/type where the field is defined + The name of the field (case sensitive) + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field + The class/type where the field is declared + The zero-based index of the field inside the class definition + A field or null when type is null or when the field cannot be found + + + + Gets the reflection information for a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a property by searching the type and all its super types + The class/type + The name + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a directly declared method + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The full name like Namespace.Type1.Type2:MethodName of the type where the method is declared + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the names of all method that are declared in a type + The declaring class/type + A list of method names + + + + Gets the names of all method that are declared in the type of the instance + An instance of the type to search in + A list of method names + + + + Gets the names of all fields that are declared in a type + The declaring class/type + A list of field names + + + + Gets the names of all fields that are declared in the type of the instance + An instance of the type to search in + A list of field names + + + + Gets the names of all properties that are declared in a type + The declaring class/type + A list of property names + + + + Gets the names of all properties that are declared in the type of the instance + An instance of the type to search in + A list of property names + + + + Gets the type of any class member of + A member + The class/type of this member + + + + Test if a class member is actually an concrete implementation + A member + True if the member is a declared + + + + Gets the real implementation of a class member + A member + The member itself if its declared. Otherwise the member that is actually implemented in some base type + + + + Gets the reflection information for a directly declared constructor + The class/type where the constructor is declared + Optional parameters to target a specific overload of the constructor + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the constructor cannot be found + + + + Gets the reflection information for a constructor by searching the type and all its super types + The class/type where the constructor is declared + Optional parameters to target a specific overload of the method + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the method cannot be found + + + + Gets reflection information for all declared constructors + The class/type where the constructors are declared + Optional parameters to only consider static constructors + A list of constructor infos + + + + Gets reflection information for all declared methods + The class/type where the methods are declared + A list of methods + + + + Gets reflection information for all declared properties + The class/type where the properties are declared + A list of properties + + + + Gets reflection information for all declared fields + The class/type where the fields are declared + A list of fields + + + + Gets the return type of a method or constructor + The method/constructor + The return type + + + + Given a type, returns the first inner type matching a recursive search by name + The class/type to start searching at + The name of the inner type (case sensitive) + The inner type or null if type/name is null or if a type with that name cannot be found + + + + Given a type, returns the first inner type matching a recursive search with a predicate + The class/type to start searching at + The predicate to search with + The inner type or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first method matching a predicate + The class/type to start searching at + The predicate to search with + The method or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first constructor matching a predicate + The class/type to start searching at + The predicate to search with + The constructor info or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first property matching a predicate + The class/type to start searching at + The predicate to search with + The property or null if type/predicate is null or if a type with that name cannot be found + + + + Returns an array containing the type of each object in the given array + An array of objects + An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) + + + + Creates an array of input parameters for a given method and a given set of potential inputs + The method/constructor you are planing to call + The possible input parameters in any order + An object array matching the method signature + + + + A read/writable reference to an instance field + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The runtime instance to access the field (leave empty for static fields) + An readable/assignable object representing the field + + + + Creates an instance field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + A read and writable field reference delegate + + + + Creates an instance field reference for a specific instance + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The instance + The name of the field + An readable/assignable object representing the field + + + + Creates an instance field reference delegate + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The field of the field + A read and writable delegate + + + + A read/writable reference delegate to a static field + The type of the field + An readable/assignable object representing the static field + + + + Creates a static field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + An readable/assignable object representing the static field + + + + Creates a static field reference delegate + The type of the field + The field + A read and writable delegate + + + + Returns who called the current method + The calling method/constructor (excluding the caller) + + + + Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) + The exception to rethrow + + + + Tells you if the current runtime is based on Mono + True if we are running under Mono, false otherwise (.NET) + + + + Throws a missing member runtime exception + The type that is involved + A list of names + + + + Gets default value for a specific type + The class/type + The default value + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + A copy of the original object but of type T + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + [out] The copy of the original object + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + + + + Makes a deep copy of any object + The original object + The type of the instance that should be created + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + The copy of the original object + + + + Tests if a type is a struct + The type + True if the type is a struct + + + + Tests if a type is a class + The type + True if the type is a class + + + + Tests if a type is a value type + The type + True if the type is a value type + + + + Tests if a type is an integer type + The type + True if the type represents some integer + + + + Tests if a type is a floating point type + The type + True if the type represents some floating point + + + + Tests if a type is a numerical type + The type + True if the type represents some number + + + + Tests if a type is void + The type + True if the type is void + + + + Test whether an instance is of a nullable type + Type of instance + An instance to test + True if instance is of nullable type, false if not + + + + Calculates a combined hash code for an enumeration of objects + The objects + The hash code + + + + General extensions for common cases + + + + Joins an enumeration with a value converter and a delimiter to a string + The inner type of the enumeration + The enumeration + An optional value converter (from T to string) + An optional delimiter + The values joined into a string + + + + Converts an array of types (for example methods arguments) into a human readable form + The array of types + A human readable description including brackets + + + + A full description of a type + The type + A human readable description + + + + A a full description of a method or a constructor without assembly details but with generics + The method/constructor + A human readable description + + + + A helper converting parameter infos to types + The array of parameter infos + An array of types + + + + A helper to access a value via key from a dictionary + The key type + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist + + + + A helper to access a value via key from a dictionary with extra casting + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist or cannot be cast to T + + + + Escapes Unicode and ASCII non printable characters + The string to convert + The string to convert + A string literal surrounded by + + + + Extensions for + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand has the same type and is equal to the value + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand is equal to the value + This is an optimized version of for + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand is equal to the given operand + This is an optimized version of for + + + + Tests for any form of Ldarg* + The + The (optional) index + True if it matches one of the variations + + + + Tests for Ldarga/Ldarga_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for Starg/Starg_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for any form of Ldloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests for any form of Stloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests if the code instruction branches + The + The label if the instruction is a branch operation or if not + True if the instruction branches + + + + Tests if the code instruction calls the method/constructor + The + The method + True if the instruction calls the method or constructor + + + + Tests if the code instruction loads a constant + The + True if the instruction loads a constant + + + + Tests if the code instruction loads an integer constant + The + The integer constant + True if the instruction loads the constant + + + + Tests if the code instruction loads a floating point constant + The + The floating point constant + True if the instruction loads the constant + + + + Tests if the code instruction loads an enum constant + The + The enum + True if the instruction loads the constant + + + + Tests if the code instruction loads a field + The + The field + Set to true if the address of the field is loaded + True if the instruction loads the field + + + + Tests if the code instruction stores a field + The + The field + True if the instruction stores this field + + + + General extensions for collections + + + + A simple way to execute code for every element in a collection + The inner type of the collection + The collection + The action to execute + + + + A simple way to execute code for elements in a collection matching a condition + The inner type of the collection + The collection + The predicate + The action to execute + + + + A helper to add an item to a collection + The inner type of the collection + The collection + The item to add + The collection containing the item + + + + A helper to add an item to an array + The inner type of the collection + The array + The item to add + The array containing the item + + + + A helper to add items to an array + The inner type of the collection + The array + The items to add + The array containing the items + + + + A file log for debugging + + + + Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop + + + + The indent character. The default is tab + + + + The current indent level + + + + Changes the indentation level + The value to add to the indentation level + + + + Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + The string to log + + + + Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + A list of strings to log (they will not be re-indented) + + + + Returns the log buffer and optionally empties it + True to empty the buffer + The buffer. + + + + Replaces the buffer with new lines + The lines to store + + + + Flushes the log buffer to disk (use in combination with LogBuffered) + + + + Log a string directly to disk. Slower method that prevents missing information in case of a crash + The string to log. + + + + Resets and deletes the log + + + + Logs some bytes as hex values + The pointer to some memory + The length of bytes to log + + + + A helper class to retrieve reflection info for non-private methods + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The generic result type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + A reflection helper to read and write private elements + The result type defined by GetValue() + + + + Creates a traverse instance from an existing instance + The existing instance + + + + Gets/Sets the current value + The value to read or write + + + + A reflection helper to read and write private elements + + + + Creates a new traverse instance from a class/type + The class/type + A instance + + + + Creates a new traverse instance from a class T + The class + A instance + + + + Creates a new traverse instance from an instance + The object + A instance + + + + Creates a new traverse instance from a named type + The type name, for format see + A instance + + + + Creates a new and empty traverse instance + + + + Creates a new traverse instance from a class/type + The class/type + + + + Creates a new traverse instance from an instance + The object + + + + Gets the current value + The value + + + + Gets the current value + The type of the value + The value + + + + Invokes the current method with arguments and returns the result + The method arguments + The value returned by the method + + + + Invokes the current method with arguments and returns the result + The type of the value + The method arguments + The value returned by the method + + + + Sets a value of the current field or property + The value + The same traverse instance + + + + Gets the type of the current field or property + The type + + + + Moves the current traverse instance to a inner type + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type of the field + The type name + A traverse instance + + + + Gets all fields of the current type + A list of field names + + + + Moves the current traverse instance to a property + The type name + Optional property index + A traverse instance + + + + Moves the current traverse instance to a field + The type of the property + The type name + Optional property index + A traverse instance + + + + Gets all properties of the current type + A list of property names + + + + Moves the current traverse instance to a method + The name of the method + The arguments defining the argument types of the method overload + A traverse instance + + + + Moves the current traverse instance to a method + The name of the method + The argument types of the method + The arguments for the method + A traverse instance + + + + Gets all methods of the current type + A list of method names + + + + Checks if the current traverse instance is for a field + True if its a field + + + + Checks if the current traverse instance is for a property + True if its a property + + + + Checks if the current traverse instance is for a method + True if its a method + + + + Checks if the current traverse instance is for a type + True if its a type + + + + Iterates over all fields of the current type and executes a traverse action + Original object + The action receiving a instance for each field + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each field pair + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the field pair and the instances + + + + Iterates over all properties of the current type and executes a traverse action + Original object + The action receiving a instance for each property + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each property pair + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the property pair and the instances + + + + A default field action that copies fields to fields + + + + Returns a string that represents the current traverse + A string representation + + + + diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net472/0Harmony.dll b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net472/0Harmony.dll new file mode 100644 index 0000000..659f3a9 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net472/0Harmony.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net472/0Harmony.xml b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net472/0Harmony.xml new file mode 100644 index 0000000..a17cc8f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net472/0Harmony.xml @@ -0,0 +1,2476 @@ + + + + 0Harmony + + + + A factory to create delegate types + + + Default constructor + + + Creates a delegate type for a method + The method + The new delegate type + + + + A getter delegate type + Type that getter gets field/property value from + Type of the value that getter gets + The instance get getter uses + An delegate + + + + A setter delegate type + Type that setter sets field/property value for + Type of the value that setter sets + The instance the setter uses + The value the setter uses + An delegate + + + + A constructor delegate type + Type that constructor creates + An delegate + + + + A helper class for fast access to getters and setters + + + Creates an instantiation delegate + Type that constructor creates + The new instantiation delegate + + + + Creates an getter delegate for a property + Type that getter reads property from + Type of the property that gets accessed + The property + The new getter delegate + + + + Creates an getter delegate for a field + Type that getter reads field from + Type of the field that gets accessed + The field + The new getter delegate + + + + Creates an getter delegate for a field (with a list of possible field names) + Type that getter reads field/property from + Type of the field/property that gets accessed + A list of possible field names + The new getter delegate + + + + Creates an setter delegate + Type that setter assigns property value to + Type of the property that gets assigned + The property + The new setter delegate + + + + Creates an setter delegate for a field + Type that setter assigns field value to + Type of the field that gets assigned + The field + The new getter delegate + + + + A delegate to invoke a method + The instance + The method parameters + The method result + + + A helper class to invoke method with delegates + + + Creates a fast invocation handler from a method + The method to invoke + Controls if boxed value object is accessed/updated directly + The + + + The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array + passed to the fast invocation handler. + Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. + Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. + For example, + + var val = 5; + var box = (object)val; + var arr = new object[] { box }; + handler(arr); // for a method with parameter signature: ref/out/in int + + + + + If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, + such that all references to the boxed object reflect the potentially updated value. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] + now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. + + + If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, + such that potential updates to the value are reflected only in the arguments array. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. + + + + + A low level memory helper + + + Mark method for no inlining (currently only works on Mono) + The method/constructor to change + + + Detours a method + The original method/constructor + The replacement method/constructor + An error string + + + + Writes a jump to memory + The memory address + Jump destination + An error string + + + + Gets the start of a method in memory + The method/constructor + [out] Details of the exception + The method start address + + + + special parameter names that can be used in prefix and postfix methods + + + Patch function helpers + + + Adds a prefix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a prefix + The patch info + The owner (Harmony ID) + + + + Adds a postfix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a postfix + The patch info + The owner (Harmony ID) + + + + Adds a transpiler + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a transpiler + The patch info + The owner (Harmony ID) + + + + Adds a finalizer + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a finalizer + The patch info + The owner (Harmony ID) + + + + Removes a patch method + The patch info + The patch method + + + + Gets sorted patch methods + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Creates new replacement method with the latest patches and detours the original method + The original method + Information describing the patches + The newly created replacement method + + + + Creates a patch sorter + Array of patches that will be sorted + Use debugging + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods + + + Checks if the sorter was created with the same patch list and as a result can be reused to + get the sorted order of the patches. + List of patches to check against + true if equal + + + Removes one unresolved dependency from the least important patch. + + + Outputs all unblocked patches from the waiting list to results list + + + Adds patch to both results list and handled patches set + Patch to add + + + Wrapper used over the Patch object to allow faster dependency access and + dependency removal in case of cyclic dependencies + + + Create patch wrapper object used for sorting + Patch to wrap + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + Determines whether patches are equal + The other patch + true if equal + + + Hash function + A hash code + + + Bidirectionally registers Patches as after dependencies + List of dependencies to register + + + Bidirectionally registers Patches as before dependencies + List of dependencies to register + + + Bidirectionally removes Patch from after dependencies + Patch to remove + + + Bidirectionally removes Patch from before dependencies + Patch to remove + + + Specifies the type of method + + + + This is a normal method + + + This is a getter + + + This is a setter + + + This is a constructor + + + This is a static constructor + + + Specifies the type of argument + + + + This is a normal argument + + + This is a reference argument (ref) + + + This is an out argument (out) + + + This is a pointer argument (&) + + + Specifies the type of patch + + + + Any patch + + + A prefix patch + + + A postfix patch + + + A transpiler + + + A finalizer + + + A reverse patch + + + Specifies the type of reverse patch + + + + Use the unmodified original method (directly from IL) + + + Use the original as it is right now including previous patches but excluding future ones + + + The base class for all Harmony annotations (not meant to be used directly) + + + + The common information for all attributes + + + Annotation to define your Harmony patch methods + + + + An empty annotation can be used together with TargetMethod(s) + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define your standin methods for reverse patching + + + + An annotation that specifies the type of reverse patching + The of the reverse patch + + + + A Harmony annotation to define that all methods in a class are to be patched + + + + A Harmony annotation + + + + A Harmony annotation to define patch priority + The priority + + + + A Harmony annotation + + + + A Harmony annotation to define that a patch comes before another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to define that a patch comes after another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to debug a patch (output uses to log to your Desktop) + + + + Specifies the Prepare function in a patch class + + + + Specifies the Cleanup function in a patch class + + + + Specifies the TargetMethod function in a patch class + + + + Specifies the TargetMethods function in a patch class + + + + Specifies the Prefix function in a patch class + + + + Specifies the Postfix function in a patch class + + + + Specifies the Transpiler function in a patch class + + + + Specifies the Finalizer function in a patch class + + + + A Harmony annotation + + + + The name of the original argument + + + + The index of the original argument + + + + The new name of the original argument + + + + An annotation to declare injected arguments by name + + + + An annotation to declare injected arguments by index + Zero-based index + + + + An annotation to declare injected arguments by renaming them + Name of the original argument + New name + + + + An annotation to declare injected arguments by index and renaming them + Zero-based index + New name + + + + An abstract wrapper around OpCode and their operands. Used by transpilers + + + + The opcode + + + + The operand + + + + All labels defined on this instruction + + + + All exception block boundaries defined on this instruction + + + + Creates a new CodeInstruction with a given opcode and optional operand + The opcode + The operand + + + + Create a full copy (including labels and exception blocks) of a CodeInstruction + The to copy + + + + Clones a CodeInstruction and resets its labels and exception blocks + A lightweight copy of this code instruction + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its opcode + The opcode + A copy of this CodeInstruction with a new opcode + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its operand + The operand + A copy of this CodeInstruction with a new operand + + + + Returns a string representation of the code instruction + A string representation of the code instruction + + + + Exception block types + + + + The beginning of an exception block + + + + The beginning of a catch block + + + + The beginning of an except filter block + + + + The beginning of a fault block + + + + The beginning of a finally block + + + + The end of an exception block + + + + An exception block + + + + Block type + + + + Catch type + + + + Creates an exception block + The + The catch type + + + + The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain + + + + The unique identifier + + + + Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" + This is for full debugging. To debug only specific patches, use the attribute + + + + Creates a new Harmony instance + A unique identifier (you choose your own) + A Harmony instance + + + + Searches the current assembly for Harmony annotations and uses them to create patches + + + + Creates a empty patch processor for an original method + The original method/constructor + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + A new instance + + + + Creates a reverse patcher for one of your stub methods + The original method/constructor + The stand-in stub method as + A new instance + + + + Searches an assembly for Harmony annotations and uses them to create patches + The assembly + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + The replacement method that was created to patch the original method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Unpatches methods + The optional Harmony ID to restrict unpatching to a specific instance + This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID + + + + Unpatches a method + The original method/constructor + The + The optional Harmony ID to restrict unpatching to a specific instance + + + + Unpatches a method + The original method/constructor + The patch method as method to remove + + + + Test for patches from a specific Harmony ID + The Harmony ID + True if patches for this ID exist + + + + Gets patch information for a given original method + The original method/constructor + The patch information as + + + + Gets the methods this instance has patched + An enumeration of original methods/constructors + + + + Gets all patched original methods in the appdomain + An enumeration of patched original methods/constructors + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly versions keyed by Harmony IDs + + + + Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure + + + + Default serialization constructor (not implemented) + The info + The context + + + + Get a list of IL instructions in pairs of offset+code + A list of key/value pairs which represent an offset and the code at that offset + + + + Get a list of IL instructions without offsets + A list of + + + + Get the error offset of the errornous IL instruction + The offset + + + + Get the index of the errornous IL instruction + The index into the list of instructions or -1 if not found + + + + A wrapper around a method to use it as a patch (for example a Prefix) + + + + The original method + + + + Class/type declaring this patch + + + + Patch method name + + + + Optional patch + + + + Array of argument types of the patch method + + + + of the patch + + + + Install this patch before patches with these Harmony IDs + + + + Install this patch after patches with these Harmony IDs + + + + Reverse patch type, see + + + + Create debug output for this patch + + + + Default constructor + + + + Creates a patch from a given method + The original method + + + + Creates a patch from a given method + The original method + The patch + A list of harmony IDs that should come after this patch + A list of harmony IDs that should come before this patch + Set to true to generate debug output + + + + Creates a patch from a given method + The patch class/type + The patch method name + The optional argument types of the patch method (for overloaded methods) + + + + Gets the names of all internal patch info fields + A list of field names + + + + Merges annotations + The list of to merge + The merged + + + + Returns a string that represents the annotation + A string representation + + + + Annotation extensions + + + + Copies annotation information + The source + The destination + + + + Clones an annotation + The to clone + A copied + + + + Merges annotations + The master + The detail + A new, merged + + + + Gets all annotations on a class/type + The class/type + A list of all + + + + Gets merged annotations on a class/type + The class/type + The merged + + + + Gets all annotations on a method + The method/constructor + A list of + + + + Gets merged annotations on a method + The method/constructor + The merged + + + + + A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. + Used by the calli instruction, can be used by transpilers + + + + + See + + + + See + + + + See + + + + The list of all parameter types or function pointer signatures received by the call site + + + + The return type or function pointer signature returned by the call site + + + + Returns a string representation of the inline signature + A string representation of the inline signature + + + + + A mutable representation of a parameter type with an attached type modifier, + similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq + + + + + Whether this is a modopt (optional modifier type) or a modreq (required modifier type) + + + + The modifier type attached to the parameter type + + + + The modified parameter type + + + + Returns a string representation of the modifier type + A string representation of the modifier type + + + + Patch serialization + + + + Control the binding of a serialized object to a type + Specifies the assembly name of the serialized object + Specifies the type name of the serialized object + The type of the object the formatter creates a new instance of + + + + Serializes a patch info + The + The serialized data + + + + Deserialize a patch info + The serialized data + A + + + + Compare function to sort patch priorities + The patch + Zero-based index + The priority + A standard sort integer (-1, 0, 1) + + + + Serializable patch information + + + + Prefixes as an array of + + + + Postfixes as an array of + + + + Transpilers as an array of + + + + Finalizers as an array of + + + + Default constructor + + + + Returns if any of the patches wants debugging turned on + + + + Adds a prefix + + The prefix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for prefixes that should run after this prefix + A list of Harmony IDs for prefixes that should run before this prefix + A flag that will log the replacement method via every time this prefix is used to build the replacement, even in the future + + + + Removes prefixes + The owner of the prefix or * for any prefix + + + + Adds a postfix + The postfix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for postfixes that should run after this postfix + A list of Harmony IDs for postfixes that should run before this postfix + A flag that will log the replacement method via every time this postfix is used to build the replacement, even in the future + + + + Removes postfixes + The owner of the postfix or * for any postfix + + + + Adds a transpiler + The transpiler method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for transpilers that should run after this transpiler + A list of Harmony IDs for transpilers that should run before this transpiler + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes transpilers + The owner of the transpiler or * for any transpiler + + + + Adds a finalizer + The finalizer method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for finalizers that should run after this finalizer + A list of Harmony IDs for finalizers that should run before this finalizer + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes finalizers + The owner of the finalizer or * for any finalizer + + + + Removes a patch using its method + The method of the patch to remove + + + + A serializable patch + + + + Zero-based index + + + + The owner (Harmony ID) + + + + The priority, see + + + + Keep this patch before the patches indicated in the list of Harmony IDs + + + + Keep this patch after the patches indicated in the list of Harmony IDs + + + + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + The method of the static patch method + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Get the patch method or a DynamicMethod if original patch method is a patch factory + The original method/constructor + The method of the patch + + + + Determines whether patches are equal + The other patch + true if equal + + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + + Hash function + A hash code + + + + A PatchClassProcessor used to turn on a class/type into patches + + + + Creates an empty patch class processor + The Harmony instance + The class to process + + + + Applies the patches + A list of all created replacement methods or null if patch class is not annotated + + + + A group of patches + + + + A collection of prefix + + + + A collection of postfix + + + + A collection of transpiler + + + + A collection of finalizer + + + + Gets all owners (Harmony IDs) or all known patches + The patch owners + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + + + + A PatchProcessor handles patches on a method/constructor + + + + Creates an empty patch processor + The Harmony instance + The original method/constructor + + + + Adds a prefix + The prefix as a + A for chaining calls + + + + Adds a prefix + The prefix method + A for chaining calls + + + + Adds a postfix + The postfix as a + A for chaining calls + + + + Adds a postfix + The postfix method + A for chaining calls + + + + Adds a transpiler + The transpiler as a + A for chaining calls + + + + Adds a transpiler + The transpiler method + A for chaining calls + + + + Adds a finalizer + The finalizer as a + A for chaining calls + + + + Adds a finalizer + The finalizer method + A for chaining calls + + + + Gets all patched original methods in the appdomain + An enumeration of patched method/constructor + + + + Applies all registered patches + The generated replacement method + + + + Unpatches patches of a given type and/or Harmony ID + The patch type + Harmony ID or * for any + A for chaining calls + + + + Unpatches a specific patch + The method of the patch + A for chaining calls + + + + Gets patch information on an original + The original method/constructor + The patch information as + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly version keyed by Harmony ID + + + + Returns the methods unmodified list of code instructions + The original method/constructor + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list containing all the original + + + + Returns the methods unmodified list of code instructions + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + A list containing all the original + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + All instructions as opcode/operand pairs + + + + A patch priority + + + + Patch last + + + + Patch with very low priority + + + + Patch with low priority + + + + Patch with lower than normal priority + + + + Patch with normal priority + + + + Patch with higher than normal priority + + + + Patch with high priority + + + + Patch with very high priority + + + + Patch first + + + + A reverse patcher + + + + Creates a reverse patcher + The Harmony instance + The original method/constructor + Your stand-in stub method as + + + + Applies the patch + The type of patch, see + The generated replacement method + + + + A collection of commonly used transpilers + + + + A transpiler that replaces all occurrences of a given method with another one + The enumeration of to act on + Method or constructor to search for + Method or constructor to replace with + Modified enumeration of + + + + A transpiler that alters instructions that match a predicate by calling an action + The enumeration of to act on + A predicate selecting the instructions to change + An action to apply to matching instructions + Modified enumeration of + + + + A transpiler that logs a text at the beginning of the method + The instructions to act on + The log text + Modified enumeration of + + + + A helper class for reflection related functions + + + + Shortcut for to simplify the use of reflections and make it work for any access level + + + + Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type + + + + Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise + The name + A type or null if not found + + + + Gets all type by name from a given assembly. This is a wrapper that respects different .NET versions + The assembly + An array of types + + + + Applies a function going up the type hierarchy and stops at the first non null result + Result type of func() + The class/type to start with + The evaluation function returning T + Returns the first non null result or default(T) when reaching the top level type object + + + + Applies a function going into inner types and stops at the first non null result + Generic type parameter + The class/type to start with + The evaluation function returning T + Returns the first non null result or null with no match + + + + Gets the reflection information for a directly declared field + The class/type where the field is defined + The name of the field + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field by searching the type and all its super types + The class/type where the field is defined + The name of the field (case sensitive) + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field + The class/type where the field is declared + The zero-based index of the field inside the class definition + A field or null when type is null or when the field cannot be found + + + + Gets the reflection information for a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a property by searching the type and all its super types + The class/type + The name + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a directly declared method + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The full name like Namespace.Type1.Type2:MethodName of the type where the method is declared + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the names of all method that are declared in a type + The declaring class/type + A list of method names + + + + Gets the names of all method that are declared in the type of the instance + An instance of the type to search in + A list of method names + + + + Gets the names of all fields that are declared in a type + The declaring class/type + A list of field names + + + + Gets the names of all fields that are declared in the type of the instance + An instance of the type to search in + A list of field names + + + + Gets the names of all properties that are declared in a type + The declaring class/type + A list of property names + + + + Gets the names of all properties that are declared in the type of the instance + An instance of the type to search in + A list of property names + + + + Gets the type of any class member of + A member + The class/type of this member + + + + Test if a class member is actually an concrete implementation + A member + True if the member is a declared + + + + Gets the real implementation of a class member + A member + The member itself if its declared. Otherwise the member that is actually implemented in some base type + + + + Gets the reflection information for a directly declared constructor + The class/type where the constructor is declared + Optional parameters to target a specific overload of the constructor + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the constructor cannot be found + + + + Gets the reflection information for a constructor by searching the type and all its super types + The class/type where the constructor is declared + Optional parameters to target a specific overload of the method + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the method cannot be found + + + + Gets reflection information for all declared constructors + The class/type where the constructors are declared + Optional parameters to only consider static constructors + A list of constructor infos + + + + Gets reflection information for all declared methods + The class/type where the methods are declared + A list of methods + + + + Gets reflection information for all declared properties + The class/type where the properties are declared + A list of properties + + + + Gets reflection information for all declared fields + The class/type where the fields are declared + A list of fields + + + + Gets the return type of a method or constructor + The method/constructor + The return type + + + + Given a type, returns the first inner type matching a recursive search by name + The class/type to start searching at + The name of the inner type (case sensitive) + The inner type or null if type/name is null or if a type with that name cannot be found + + + + Given a type, returns the first inner type matching a recursive search with a predicate + The class/type to start searching at + The predicate to search with + The inner type or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first method matching a predicate + The class/type to start searching at + The predicate to search with + The method or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first constructor matching a predicate + The class/type to start searching at + The predicate to search with + The constructor info or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first property matching a predicate + The class/type to start searching at + The predicate to search with + The property or null if type/predicate is null or if a type with that name cannot be found + + + + Returns an array containing the type of each object in the given array + An array of objects + An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) + + + + Creates an array of input parameters for a given method and a given set of potential inputs + The method/constructor you are planing to call + The possible input parameters in any order + An object array matching the method signature + + + + A read/writable reference to an instance field + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The runtime instance to access the field (leave empty for static fields) + An readable/assignable object representing the field + + + + Creates an instance field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + A read and writable field reference delegate + + + + Creates an instance field reference for a specific instance + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The instance + The name of the field + An readable/assignable object representing the field + + + + Creates an instance field reference delegate + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The field of the field + A read and writable delegate + + + + A read/writable reference delegate to a static field + The type of the field + An readable/assignable object representing the static field + + + + Creates a static field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + An readable/assignable object representing the static field + + + + Creates a static field reference delegate + The type of the field + The field + A read and writable delegate + + + + Returns who called the current method + The calling method/constructor (excluding the caller) + + + + Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) + The exception to rethrow + + + + Tells you if the current runtime is based on Mono + True if we are running under Mono, false otherwise (.NET) + + + + Throws a missing member runtime exception + The type that is involved + A list of names + + + + Gets default value for a specific type + The class/type + The default value + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + A copy of the original object but of type T + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + [out] The copy of the original object + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + + + + Makes a deep copy of any object + The original object + The type of the instance that should be created + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + The copy of the original object + + + + Tests if a type is a struct + The type + True if the type is a struct + + + + Tests if a type is a class + The type + True if the type is a class + + + + Tests if a type is a value type + The type + True if the type is a value type + + + + Tests if a type is an integer type + The type + True if the type represents some integer + + + + Tests if a type is a floating point type + The type + True if the type represents some floating point + + + + Tests if a type is a numerical type + The type + True if the type represents some number + + + + Tests if a type is void + The type + True if the type is void + + + + Test whether an instance is of a nullable type + Type of instance + An instance to test + True if instance is of nullable type, false if not + + + + Calculates a combined hash code for an enumeration of objects + The objects + The hash code + + + + General extensions for common cases + + + + Joins an enumeration with a value converter and a delimiter to a string + The inner type of the enumeration + The enumeration + An optional value converter (from T to string) + An optional delimiter + The values joined into a string + + + + Converts an array of types (for example methods arguments) into a human readable form + The array of types + A human readable description including brackets + + + + A full description of a type + The type + A human readable description + + + + A a full description of a method or a constructor without assembly details but with generics + The method/constructor + A human readable description + + + + A helper converting parameter infos to types + The array of parameter infos + An array of types + + + + A helper to access a value via key from a dictionary + The key type + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist + + + + A helper to access a value via key from a dictionary with extra casting + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist or cannot be cast to T + + + + Escapes Unicode and ASCII non printable characters + The string to convert + The string to convert + A string literal surrounded by + + + + Extensions for + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand has the same type and is equal to the value + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand is equal to the value + This is an optimized version of for + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand is equal to the given operand + This is an optimized version of for + + + + Tests for any form of Ldarg* + The + The (optional) index + True if it matches one of the variations + + + + Tests for Ldarga/Ldarga_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for Starg/Starg_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for any form of Ldloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests for any form of Stloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests if the code instruction branches + The + The label if the instruction is a branch operation or if not + True if the instruction branches + + + + Tests if the code instruction calls the method/constructor + The + The method + True if the instruction calls the method or constructor + + + + Tests if the code instruction loads a constant + The + True if the instruction loads a constant + + + + Tests if the code instruction loads an integer constant + The + The integer constant + True if the instruction loads the constant + + + + Tests if the code instruction loads a floating point constant + The + The floating point constant + True if the instruction loads the constant + + + + Tests if the code instruction loads an enum constant + The + The enum + True if the instruction loads the constant + + + + Tests if the code instruction loads a field + The + The field + Set to true if the address of the field is loaded + True if the instruction loads the field + + + + Tests if the code instruction stores a field + The + The field + True if the instruction stores this field + + + + General extensions for collections + + + + A simple way to execute code for every element in a collection + The inner type of the collection + The collection + The action to execute + + + + A simple way to execute code for elements in a collection matching a condition + The inner type of the collection + The collection + The predicate + The action to execute + + + + A helper to add an item to a collection + The inner type of the collection + The collection + The item to add + The collection containing the item + + + + A helper to add an item to an array + The inner type of the collection + The array + The item to add + The array containing the item + + + + A helper to add items to an array + The inner type of the collection + The array + The items to add + The array containing the items + + + + A file log for debugging + + + + Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop + + + + The indent character. The default is tab + + + + The current indent level + + + + Changes the indentation level + The value to add to the indentation level + + + + Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + The string to log + + + + Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + A list of strings to log (they will not be re-indented) + + + + Returns the log buffer and optionally empties it + True to empty the buffer + The buffer. + + + + Replaces the buffer with new lines + The lines to store + + + + Flushes the log buffer to disk (use in combination with LogBuffered) + + + + Log a string directly to disk. Slower method that prevents missing information in case of a crash + The string to log. + + + + Resets and deletes the log + + + + Logs some bytes as hex values + The pointer to some memory + The length of bytes to log + + + + A helper class to retrieve reflection info for non-private methods + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The generic result type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + A reflection helper to read and write private elements + The result type defined by GetValue() + + + + Creates a traverse instance from an existing instance + The existing instance + + + + Gets/Sets the current value + The value to read or write + + + + A reflection helper to read and write private elements + + + + Creates a new traverse instance from a class/type + The class/type + A instance + + + + Creates a new traverse instance from a class T + The class + A instance + + + + Creates a new traverse instance from an instance + The object + A instance + + + + Creates a new traverse instance from a named type + The type name, for format see + A instance + + + + Creates a new and empty traverse instance + + + + Creates a new traverse instance from a class/type + The class/type + + + + Creates a new traverse instance from an instance + The object + + + + Gets the current value + The value + + + + Gets the current value + The type of the value + The value + + + + Invokes the current method with arguments and returns the result + The method arguments + The value returned by the method + + + + Invokes the current method with arguments and returns the result + The type of the value + The method arguments + The value returned by the method + + + + Sets a value of the current field or property + The value + The same traverse instance + + + + Gets the type of the current field or property + The type + + + + Moves the current traverse instance to a inner type + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type of the field + The type name + A traverse instance + + + + Gets all fields of the current type + A list of field names + + + + Moves the current traverse instance to a property + The type name + Optional property index + A traverse instance + + + + Moves the current traverse instance to a field + The type of the property + The type name + Optional property index + A traverse instance + + + + Gets all properties of the current type + A list of property names + + + + Moves the current traverse instance to a method + The name of the method + The arguments defining the argument types of the method overload + A traverse instance + + + + Moves the current traverse instance to a method + The name of the method + The argument types of the method + The arguments for the method + A traverse instance + + + + Gets all methods of the current type + A list of method names + + + + Checks if the current traverse instance is for a field + True if its a field + + + + Checks if the current traverse instance is for a property + True if its a property + + + + Checks if the current traverse instance is for a method + True if its a method + + + + Checks if the current traverse instance is for a type + True if its a type + + + + Iterates over all fields of the current type and executes a traverse action + Original object + The action receiving a instance for each field + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each field pair + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the field pair and the instances + + + + Iterates over all properties of the current type and executes a traverse action + Original object + The action receiving a instance for each property + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each property pair + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the property pair and the instances + + + + A default field action that copies fields to fields + + + + Returns a string that represents the current traverse + A string representation + + + + diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net48/0Harmony.dll b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net48/0Harmony.dll new file mode 100644 index 0000000..064ac91 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net48/0Harmony.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net48/0Harmony.xml b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net48/0Harmony.xml new file mode 100644 index 0000000..a17cc8f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/net48/0Harmony.xml @@ -0,0 +1,2476 @@ + + + + 0Harmony + + + + A factory to create delegate types + + + Default constructor + + + Creates a delegate type for a method + The method + The new delegate type + + + + A getter delegate type + Type that getter gets field/property value from + Type of the value that getter gets + The instance get getter uses + An delegate + + + + A setter delegate type + Type that setter sets field/property value for + Type of the value that setter sets + The instance the setter uses + The value the setter uses + An delegate + + + + A constructor delegate type + Type that constructor creates + An delegate + + + + A helper class for fast access to getters and setters + + + Creates an instantiation delegate + Type that constructor creates + The new instantiation delegate + + + + Creates an getter delegate for a property + Type that getter reads property from + Type of the property that gets accessed + The property + The new getter delegate + + + + Creates an getter delegate for a field + Type that getter reads field from + Type of the field that gets accessed + The field + The new getter delegate + + + + Creates an getter delegate for a field (with a list of possible field names) + Type that getter reads field/property from + Type of the field/property that gets accessed + A list of possible field names + The new getter delegate + + + + Creates an setter delegate + Type that setter assigns property value to + Type of the property that gets assigned + The property + The new setter delegate + + + + Creates an setter delegate for a field + Type that setter assigns field value to + Type of the field that gets assigned + The field + The new getter delegate + + + + A delegate to invoke a method + The instance + The method parameters + The method result + + + A helper class to invoke method with delegates + + + Creates a fast invocation handler from a method + The method to invoke + Controls if boxed value object is accessed/updated directly + The + + + The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array + passed to the fast invocation handler. + Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. + Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. + For example, + + var val = 5; + var box = (object)val; + var arr = new object[] { box }; + handler(arr); // for a method with parameter signature: ref/out/in int + + + + + If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, + such that all references to the boxed object reflect the potentially updated value. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] + now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. + + + If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, + such that potential updates to the value are reflected only in the arguments array. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. + + + + + A low level memory helper + + + Mark method for no inlining (currently only works on Mono) + The method/constructor to change + + + Detours a method + The original method/constructor + The replacement method/constructor + An error string + + + + Writes a jump to memory + The memory address + Jump destination + An error string + + + + Gets the start of a method in memory + The method/constructor + [out] Details of the exception + The method start address + + + + special parameter names that can be used in prefix and postfix methods + + + Patch function helpers + + + Adds a prefix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a prefix + The patch info + The owner (Harmony ID) + + + + Adds a postfix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a postfix + The patch info + The owner (Harmony ID) + + + + Adds a transpiler + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a transpiler + The patch info + The owner (Harmony ID) + + + + Adds a finalizer + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a finalizer + The patch info + The owner (Harmony ID) + + + + Removes a patch method + The patch info + The patch method + + + + Gets sorted patch methods + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Creates new replacement method with the latest patches and detours the original method + The original method + Information describing the patches + The newly created replacement method + + + + Creates a patch sorter + Array of patches that will be sorted + Use debugging + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods + + + Checks if the sorter was created with the same patch list and as a result can be reused to + get the sorted order of the patches. + List of patches to check against + true if equal + + + Removes one unresolved dependency from the least important patch. + + + Outputs all unblocked patches from the waiting list to results list + + + Adds patch to both results list and handled patches set + Patch to add + + + Wrapper used over the Patch object to allow faster dependency access and + dependency removal in case of cyclic dependencies + + + Create patch wrapper object used for sorting + Patch to wrap + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + Determines whether patches are equal + The other patch + true if equal + + + Hash function + A hash code + + + Bidirectionally registers Patches as after dependencies + List of dependencies to register + + + Bidirectionally registers Patches as before dependencies + List of dependencies to register + + + Bidirectionally removes Patch from after dependencies + Patch to remove + + + Bidirectionally removes Patch from before dependencies + Patch to remove + + + Specifies the type of method + + + + This is a normal method + + + This is a getter + + + This is a setter + + + This is a constructor + + + This is a static constructor + + + Specifies the type of argument + + + + This is a normal argument + + + This is a reference argument (ref) + + + This is an out argument (out) + + + This is a pointer argument (&) + + + Specifies the type of patch + + + + Any patch + + + A prefix patch + + + A postfix patch + + + A transpiler + + + A finalizer + + + A reverse patch + + + Specifies the type of reverse patch + + + + Use the unmodified original method (directly from IL) + + + Use the original as it is right now including previous patches but excluding future ones + + + The base class for all Harmony annotations (not meant to be used directly) + + + + The common information for all attributes + + + Annotation to define your Harmony patch methods + + + + An empty annotation can be used together with TargetMethod(s) + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define your standin methods for reverse patching + + + + An annotation that specifies the type of reverse patching + The of the reverse patch + + + + A Harmony annotation to define that all methods in a class are to be patched + + + + A Harmony annotation + + + + A Harmony annotation to define patch priority + The priority + + + + A Harmony annotation + + + + A Harmony annotation to define that a patch comes before another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to define that a patch comes after another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to debug a patch (output uses to log to your Desktop) + + + + Specifies the Prepare function in a patch class + + + + Specifies the Cleanup function in a patch class + + + + Specifies the TargetMethod function in a patch class + + + + Specifies the TargetMethods function in a patch class + + + + Specifies the Prefix function in a patch class + + + + Specifies the Postfix function in a patch class + + + + Specifies the Transpiler function in a patch class + + + + Specifies the Finalizer function in a patch class + + + + A Harmony annotation + + + + The name of the original argument + + + + The index of the original argument + + + + The new name of the original argument + + + + An annotation to declare injected arguments by name + + + + An annotation to declare injected arguments by index + Zero-based index + + + + An annotation to declare injected arguments by renaming them + Name of the original argument + New name + + + + An annotation to declare injected arguments by index and renaming them + Zero-based index + New name + + + + An abstract wrapper around OpCode and their operands. Used by transpilers + + + + The opcode + + + + The operand + + + + All labels defined on this instruction + + + + All exception block boundaries defined on this instruction + + + + Creates a new CodeInstruction with a given opcode and optional operand + The opcode + The operand + + + + Create a full copy (including labels and exception blocks) of a CodeInstruction + The to copy + + + + Clones a CodeInstruction and resets its labels and exception blocks + A lightweight copy of this code instruction + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its opcode + The opcode + A copy of this CodeInstruction with a new opcode + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its operand + The operand + A copy of this CodeInstruction with a new operand + + + + Returns a string representation of the code instruction + A string representation of the code instruction + + + + Exception block types + + + + The beginning of an exception block + + + + The beginning of a catch block + + + + The beginning of an except filter block + + + + The beginning of a fault block + + + + The beginning of a finally block + + + + The end of an exception block + + + + An exception block + + + + Block type + + + + Catch type + + + + Creates an exception block + The + The catch type + + + + The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain + + + + The unique identifier + + + + Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" + This is for full debugging. To debug only specific patches, use the attribute + + + + Creates a new Harmony instance + A unique identifier (you choose your own) + A Harmony instance + + + + Searches the current assembly for Harmony annotations and uses them to create patches + + + + Creates a empty patch processor for an original method + The original method/constructor + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + A new instance + + + + Creates a reverse patcher for one of your stub methods + The original method/constructor + The stand-in stub method as + A new instance + + + + Searches an assembly for Harmony annotations and uses them to create patches + The assembly + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + The replacement method that was created to patch the original method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Unpatches methods + The optional Harmony ID to restrict unpatching to a specific instance + This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID + + + + Unpatches a method + The original method/constructor + The + The optional Harmony ID to restrict unpatching to a specific instance + + + + Unpatches a method + The original method/constructor + The patch method as method to remove + + + + Test for patches from a specific Harmony ID + The Harmony ID + True if patches for this ID exist + + + + Gets patch information for a given original method + The original method/constructor + The patch information as + + + + Gets the methods this instance has patched + An enumeration of original methods/constructors + + + + Gets all patched original methods in the appdomain + An enumeration of patched original methods/constructors + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly versions keyed by Harmony IDs + + + + Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure + + + + Default serialization constructor (not implemented) + The info + The context + + + + Get a list of IL instructions in pairs of offset+code + A list of key/value pairs which represent an offset and the code at that offset + + + + Get a list of IL instructions without offsets + A list of + + + + Get the error offset of the errornous IL instruction + The offset + + + + Get the index of the errornous IL instruction + The index into the list of instructions or -1 if not found + + + + A wrapper around a method to use it as a patch (for example a Prefix) + + + + The original method + + + + Class/type declaring this patch + + + + Patch method name + + + + Optional patch + + + + Array of argument types of the patch method + + + + of the patch + + + + Install this patch before patches with these Harmony IDs + + + + Install this patch after patches with these Harmony IDs + + + + Reverse patch type, see + + + + Create debug output for this patch + + + + Default constructor + + + + Creates a patch from a given method + The original method + + + + Creates a patch from a given method + The original method + The patch + A list of harmony IDs that should come after this patch + A list of harmony IDs that should come before this patch + Set to true to generate debug output + + + + Creates a patch from a given method + The patch class/type + The patch method name + The optional argument types of the patch method (for overloaded methods) + + + + Gets the names of all internal patch info fields + A list of field names + + + + Merges annotations + The list of to merge + The merged + + + + Returns a string that represents the annotation + A string representation + + + + Annotation extensions + + + + Copies annotation information + The source + The destination + + + + Clones an annotation + The to clone + A copied + + + + Merges annotations + The master + The detail + A new, merged + + + + Gets all annotations on a class/type + The class/type + A list of all + + + + Gets merged annotations on a class/type + The class/type + The merged + + + + Gets all annotations on a method + The method/constructor + A list of + + + + Gets merged annotations on a method + The method/constructor + The merged + + + + + A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. + Used by the calli instruction, can be used by transpilers + + + + + See + + + + See + + + + See + + + + The list of all parameter types or function pointer signatures received by the call site + + + + The return type or function pointer signature returned by the call site + + + + Returns a string representation of the inline signature + A string representation of the inline signature + + + + + A mutable representation of a parameter type with an attached type modifier, + similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq + + + + + Whether this is a modopt (optional modifier type) or a modreq (required modifier type) + + + + The modifier type attached to the parameter type + + + + The modified parameter type + + + + Returns a string representation of the modifier type + A string representation of the modifier type + + + + Patch serialization + + + + Control the binding of a serialized object to a type + Specifies the assembly name of the serialized object + Specifies the type name of the serialized object + The type of the object the formatter creates a new instance of + + + + Serializes a patch info + The + The serialized data + + + + Deserialize a patch info + The serialized data + A + + + + Compare function to sort patch priorities + The patch + Zero-based index + The priority + A standard sort integer (-1, 0, 1) + + + + Serializable patch information + + + + Prefixes as an array of + + + + Postfixes as an array of + + + + Transpilers as an array of + + + + Finalizers as an array of + + + + Default constructor + + + + Returns if any of the patches wants debugging turned on + + + + Adds a prefix + + The prefix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for prefixes that should run after this prefix + A list of Harmony IDs for prefixes that should run before this prefix + A flag that will log the replacement method via every time this prefix is used to build the replacement, even in the future + + + + Removes prefixes + The owner of the prefix or * for any prefix + + + + Adds a postfix + The postfix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for postfixes that should run after this postfix + A list of Harmony IDs for postfixes that should run before this postfix + A flag that will log the replacement method via every time this postfix is used to build the replacement, even in the future + + + + Removes postfixes + The owner of the postfix or * for any postfix + + + + Adds a transpiler + The transpiler method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for transpilers that should run after this transpiler + A list of Harmony IDs for transpilers that should run before this transpiler + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes transpilers + The owner of the transpiler or * for any transpiler + + + + Adds a finalizer + The finalizer method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for finalizers that should run after this finalizer + A list of Harmony IDs for finalizers that should run before this finalizer + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes finalizers + The owner of the finalizer or * for any finalizer + + + + Removes a patch using its method + The method of the patch to remove + + + + A serializable patch + + + + Zero-based index + + + + The owner (Harmony ID) + + + + The priority, see + + + + Keep this patch before the patches indicated in the list of Harmony IDs + + + + Keep this patch after the patches indicated in the list of Harmony IDs + + + + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + The method of the static patch method + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Get the patch method or a DynamicMethod if original patch method is a patch factory + The original method/constructor + The method of the patch + + + + Determines whether patches are equal + The other patch + true if equal + + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + + Hash function + A hash code + + + + A PatchClassProcessor used to turn on a class/type into patches + + + + Creates an empty patch class processor + The Harmony instance + The class to process + + + + Applies the patches + A list of all created replacement methods or null if patch class is not annotated + + + + A group of patches + + + + A collection of prefix + + + + A collection of postfix + + + + A collection of transpiler + + + + A collection of finalizer + + + + Gets all owners (Harmony IDs) or all known patches + The patch owners + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + + + + A PatchProcessor handles patches on a method/constructor + + + + Creates an empty patch processor + The Harmony instance + The original method/constructor + + + + Adds a prefix + The prefix as a + A for chaining calls + + + + Adds a prefix + The prefix method + A for chaining calls + + + + Adds a postfix + The postfix as a + A for chaining calls + + + + Adds a postfix + The postfix method + A for chaining calls + + + + Adds a transpiler + The transpiler as a + A for chaining calls + + + + Adds a transpiler + The transpiler method + A for chaining calls + + + + Adds a finalizer + The finalizer as a + A for chaining calls + + + + Adds a finalizer + The finalizer method + A for chaining calls + + + + Gets all patched original methods in the appdomain + An enumeration of patched method/constructor + + + + Applies all registered patches + The generated replacement method + + + + Unpatches patches of a given type and/or Harmony ID + The patch type + Harmony ID or * for any + A for chaining calls + + + + Unpatches a specific patch + The method of the patch + A for chaining calls + + + + Gets patch information on an original + The original method/constructor + The patch information as + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly version keyed by Harmony ID + + + + Returns the methods unmodified list of code instructions + The original method/constructor + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list containing all the original + + + + Returns the methods unmodified list of code instructions + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + A list containing all the original + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + All instructions as opcode/operand pairs + + + + A patch priority + + + + Patch last + + + + Patch with very low priority + + + + Patch with low priority + + + + Patch with lower than normal priority + + + + Patch with normal priority + + + + Patch with higher than normal priority + + + + Patch with high priority + + + + Patch with very high priority + + + + Patch first + + + + A reverse patcher + + + + Creates a reverse patcher + The Harmony instance + The original method/constructor + Your stand-in stub method as + + + + Applies the patch + The type of patch, see + The generated replacement method + + + + A collection of commonly used transpilers + + + + A transpiler that replaces all occurrences of a given method with another one + The enumeration of to act on + Method or constructor to search for + Method or constructor to replace with + Modified enumeration of + + + + A transpiler that alters instructions that match a predicate by calling an action + The enumeration of to act on + A predicate selecting the instructions to change + An action to apply to matching instructions + Modified enumeration of + + + + A transpiler that logs a text at the beginning of the method + The instructions to act on + The log text + Modified enumeration of + + + + A helper class for reflection related functions + + + + Shortcut for to simplify the use of reflections and make it work for any access level + + + + Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type + + + + Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise + The name + A type or null if not found + + + + Gets all type by name from a given assembly. This is a wrapper that respects different .NET versions + The assembly + An array of types + + + + Applies a function going up the type hierarchy and stops at the first non null result + Result type of func() + The class/type to start with + The evaluation function returning T + Returns the first non null result or default(T) when reaching the top level type object + + + + Applies a function going into inner types and stops at the first non null result + Generic type parameter + The class/type to start with + The evaluation function returning T + Returns the first non null result or null with no match + + + + Gets the reflection information for a directly declared field + The class/type where the field is defined + The name of the field + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field by searching the type and all its super types + The class/type where the field is defined + The name of the field (case sensitive) + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field + The class/type where the field is declared + The zero-based index of the field inside the class definition + A field or null when type is null or when the field cannot be found + + + + Gets the reflection information for a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a property by searching the type and all its super types + The class/type + The name + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a directly declared method + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The full name like Namespace.Type1.Type2:MethodName of the type where the method is declared + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the names of all method that are declared in a type + The declaring class/type + A list of method names + + + + Gets the names of all method that are declared in the type of the instance + An instance of the type to search in + A list of method names + + + + Gets the names of all fields that are declared in a type + The declaring class/type + A list of field names + + + + Gets the names of all fields that are declared in the type of the instance + An instance of the type to search in + A list of field names + + + + Gets the names of all properties that are declared in a type + The declaring class/type + A list of property names + + + + Gets the names of all properties that are declared in the type of the instance + An instance of the type to search in + A list of property names + + + + Gets the type of any class member of + A member + The class/type of this member + + + + Test if a class member is actually an concrete implementation + A member + True if the member is a declared + + + + Gets the real implementation of a class member + A member + The member itself if its declared. Otherwise the member that is actually implemented in some base type + + + + Gets the reflection information for a directly declared constructor + The class/type where the constructor is declared + Optional parameters to target a specific overload of the constructor + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the constructor cannot be found + + + + Gets the reflection information for a constructor by searching the type and all its super types + The class/type where the constructor is declared + Optional parameters to target a specific overload of the method + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the method cannot be found + + + + Gets reflection information for all declared constructors + The class/type where the constructors are declared + Optional parameters to only consider static constructors + A list of constructor infos + + + + Gets reflection information for all declared methods + The class/type where the methods are declared + A list of methods + + + + Gets reflection information for all declared properties + The class/type where the properties are declared + A list of properties + + + + Gets reflection information for all declared fields + The class/type where the fields are declared + A list of fields + + + + Gets the return type of a method or constructor + The method/constructor + The return type + + + + Given a type, returns the first inner type matching a recursive search by name + The class/type to start searching at + The name of the inner type (case sensitive) + The inner type or null if type/name is null or if a type with that name cannot be found + + + + Given a type, returns the first inner type matching a recursive search with a predicate + The class/type to start searching at + The predicate to search with + The inner type or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first method matching a predicate + The class/type to start searching at + The predicate to search with + The method or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first constructor matching a predicate + The class/type to start searching at + The predicate to search with + The constructor info or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first property matching a predicate + The class/type to start searching at + The predicate to search with + The property or null if type/predicate is null or if a type with that name cannot be found + + + + Returns an array containing the type of each object in the given array + An array of objects + An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) + + + + Creates an array of input parameters for a given method and a given set of potential inputs + The method/constructor you are planing to call + The possible input parameters in any order + An object array matching the method signature + + + + A read/writable reference to an instance field + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The runtime instance to access the field (leave empty for static fields) + An readable/assignable object representing the field + + + + Creates an instance field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + A read and writable field reference delegate + + + + Creates an instance field reference for a specific instance + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The instance + The name of the field + An readable/assignable object representing the field + + + + Creates an instance field reference delegate + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The field of the field + A read and writable delegate + + + + A read/writable reference delegate to a static field + The type of the field + An readable/assignable object representing the static field + + + + Creates a static field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + An readable/assignable object representing the static field + + + + Creates a static field reference delegate + The type of the field + The field + A read and writable delegate + + + + Returns who called the current method + The calling method/constructor (excluding the caller) + + + + Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) + The exception to rethrow + + + + Tells you if the current runtime is based on Mono + True if we are running under Mono, false otherwise (.NET) + + + + Throws a missing member runtime exception + The type that is involved + A list of names + + + + Gets default value for a specific type + The class/type + The default value + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + A copy of the original object but of type T + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + [out] The copy of the original object + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + + + + Makes a deep copy of any object + The original object + The type of the instance that should be created + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + The copy of the original object + + + + Tests if a type is a struct + The type + True if the type is a struct + + + + Tests if a type is a class + The type + True if the type is a class + + + + Tests if a type is a value type + The type + True if the type is a value type + + + + Tests if a type is an integer type + The type + True if the type represents some integer + + + + Tests if a type is a floating point type + The type + True if the type represents some floating point + + + + Tests if a type is a numerical type + The type + True if the type represents some number + + + + Tests if a type is void + The type + True if the type is void + + + + Test whether an instance is of a nullable type + Type of instance + An instance to test + True if instance is of nullable type, false if not + + + + Calculates a combined hash code for an enumeration of objects + The objects + The hash code + + + + General extensions for common cases + + + + Joins an enumeration with a value converter and a delimiter to a string + The inner type of the enumeration + The enumeration + An optional value converter (from T to string) + An optional delimiter + The values joined into a string + + + + Converts an array of types (for example methods arguments) into a human readable form + The array of types + A human readable description including brackets + + + + A full description of a type + The type + A human readable description + + + + A a full description of a method or a constructor without assembly details but with generics + The method/constructor + A human readable description + + + + A helper converting parameter infos to types + The array of parameter infos + An array of types + + + + A helper to access a value via key from a dictionary + The key type + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist + + + + A helper to access a value via key from a dictionary with extra casting + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist or cannot be cast to T + + + + Escapes Unicode and ASCII non printable characters + The string to convert + The string to convert + A string literal surrounded by + + + + Extensions for + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand has the same type and is equal to the value + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand is equal to the value + This is an optimized version of for + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand is equal to the given operand + This is an optimized version of for + + + + Tests for any form of Ldarg* + The + The (optional) index + True if it matches one of the variations + + + + Tests for Ldarga/Ldarga_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for Starg/Starg_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for any form of Ldloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests for any form of Stloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests if the code instruction branches + The + The label if the instruction is a branch operation or if not + True if the instruction branches + + + + Tests if the code instruction calls the method/constructor + The + The method + True if the instruction calls the method or constructor + + + + Tests if the code instruction loads a constant + The + True if the instruction loads a constant + + + + Tests if the code instruction loads an integer constant + The + The integer constant + True if the instruction loads the constant + + + + Tests if the code instruction loads a floating point constant + The + The floating point constant + True if the instruction loads the constant + + + + Tests if the code instruction loads an enum constant + The + The enum + True if the instruction loads the constant + + + + Tests if the code instruction loads a field + The + The field + Set to true if the address of the field is loaded + True if the instruction loads the field + + + + Tests if the code instruction stores a field + The + The field + True if the instruction stores this field + + + + General extensions for collections + + + + A simple way to execute code for every element in a collection + The inner type of the collection + The collection + The action to execute + + + + A simple way to execute code for elements in a collection matching a condition + The inner type of the collection + The collection + The predicate + The action to execute + + + + A helper to add an item to a collection + The inner type of the collection + The collection + The item to add + The collection containing the item + + + + A helper to add an item to an array + The inner type of the collection + The array + The item to add + The array containing the item + + + + A helper to add items to an array + The inner type of the collection + The array + The items to add + The array containing the items + + + + A file log for debugging + + + + Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop + + + + The indent character. The default is tab + + + + The current indent level + + + + Changes the indentation level + The value to add to the indentation level + + + + Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + The string to log + + + + Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + A list of strings to log (they will not be re-indented) + + + + Returns the log buffer and optionally empties it + True to empty the buffer + The buffer. + + + + Replaces the buffer with new lines + The lines to store + + + + Flushes the log buffer to disk (use in combination with LogBuffered) + + + + Log a string directly to disk. Slower method that prevents missing information in case of a crash + The string to log. + + + + Resets and deletes the log + + + + Logs some bytes as hex values + The pointer to some memory + The length of bytes to log + + + + A helper class to retrieve reflection info for non-private methods + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The generic result type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + A reflection helper to read and write private elements + The result type defined by GetValue() + + + + Creates a traverse instance from an existing instance + The existing instance + + + + Gets/Sets the current value + The value to read or write + + + + A reflection helper to read and write private elements + + + + Creates a new traverse instance from a class/type + The class/type + A instance + + + + Creates a new traverse instance from a class T + The class + A instance + + + + Creates a new traverse instance from an instance + The object + A instance + + + + Creates a new traverse instance from a named type + The type name, for format see + A instance + + + + Creates a new and empty traverse instance + + + + Creates a new traverse instance from a class/type + The class/type + + + + Creates a new traverse instance from an instance + The object + + + + Gets the current value + The value + + + + Gets the current value + The type of the value + The value + + + + Invokes the current method with arguments and returns the result + The method arguments + The value returned by the method + + + + Invokes the current method with arguments and returns the result + The type of the value + The method arguments + The value returned by the method + + + + Sets a value of the current field or property + The value + The same traverse instance + + + + Gets the type of the current field or property + The type + + + + Moves the current traverse instance to a inner type + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type of the field + The type name + A traverse instance + + + + Gets all fields of the current type + A list of field names + + + + Moves the current traverse instance to a property + The type name + Optional property index + A traverse instance + + + + Moves the current traverse instance to a field + The type of the property + The type name + Optional property index + A traverse instance + + + + Gets all properties of the current type + A list of property names + + + + Moves the current traverse instance to a method + The name of the method + The arguments defining the argument types of the method overload + A traverse instance + + + + Moves the current traverse instance to a method + The name of the method + The argument types of the method + The arguments for the method + A traverse instance + + + + Gets all methods of the current type + A list of method names + + + + Checks if the current traverse instance is for a field + True if its a field + + + + Checks if the current traverse instance is for a property + True if its a property + + + + Checks if the current traverse instance is for a method + True if its a method + + + + Checks if the current traverse instance is for a type + True if its a type + + + + Iterates over all fields of the current type and executes a traverse action + Original object + The action receiving a instance for each field + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each field pair + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the field pair and the instances + + + + Iterates over all properties of the current type and executes a traverse action + Original object + The action receiving a instance for each property + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each property pair + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the property pair and the instances + + + + A default field action that copies fields to fields + + + + Returns a string that represents the current traverse + A string representation + + + + diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.0/0Harmony.dll b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.0/0Harmony.dll new file mode 100644 index 0000000..aff5c94 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.0/0Harmony.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.0/0Harmony.xml b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.0/0Harmony.xml new file mode 100644 index 0000000..a17cc8f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.0/0Harmony.xml @@ -0,0 +1,2476 @@ + + + + 0Harmony + + + + A factory to create delegate types + + + Default constructor + + + Creates a delegate type for a method + The method + The new delegate type + + + + A getter delegate type + Type that getter gets field/property value from + Type of the value that getter gets + The instance get getter uses + An delegate + + + + A setter delegate type + Type that setter sets field/property value for + Type of the value that setter sets + The instance the setter uses + The value the setter uses + An delegate + + + + A constructor delegate type + Type that constructor creates + An delegate + + + + A helper class for fast access to getters and setters + + + Creates an instantiation delegate + Type that constructor creates + The new instantiation delegate + + + + Creates an getter delegate for a property + Type that getter reads property from + Type of the property that gets accessed + The property + The new getter delegate + + + + Creates an getter delegate for a field + Type that getter reads field from + Type of the field that gets accessed + The field + The new getter delegate + + + + Creates an getter delegate for a field (with a list of possible field names) + Type that getter reads field/property from + Type of the field/property that gets accessed + A list of possible field names + The new getter delegate + + + + Creates an setter delegate + Type that setter assigns property value to + Type of the property that gets assigned + The property + The new setter delegate + + + + Creates an setter delegate for a field + Type that setter assigns field value to + Type of the field that gets assigned + The field + The new getter delegate + + + + A delegate to invoke a method + The instance + The method parameters + The method result + + + A helper class to invoke method with delegates + + + Creates a fast invocation handler from a method + The method to invoke + Controls if boxed value object is accessed/updated directly + The + + + The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array + passed to the fast invocation handler. + Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. + Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. + For example, + + var val = 5; + var box = (object)val; + var arr = new object[] { box }; + handler(arr); // for a method with parameter signature: ref/out/in int + + + + + If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, + such that all references to the boxed object reflect the potentially updated value. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] + now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. + + + If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, + such that potential updates to the value are reflected only in the arguments array. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. + + + + + A low level memory helper + + + Mark method for no inlining (currently only works on Mono) + The method/constructor to change + + + Detours a method + The original method/constructor + The replacement method/constructor + An error string + + + + Writes a jump to memory + The memory address + Jump destination + An error string + + + + Gets the start of a method in memory + The method/constructor + [out] Details of the exception + The method start address + + + + special parameter names that can be used in prefix and postfix methods + + + Patch function helpers + + + Adds a prefix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a prefix + The patch info + The owner (Harmony ID) + + + + Adds a postfix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a postfix + The patch info + The owner (Harmony ID) + + + + Adds a transpiler + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a transpiler + The patch info + The owner (Harmony ID) + + + + Adds a finalizer + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a finalizer + The patch info + The owner (Harmony ID) + + + + Removes a patch method + The patch info + The patch method + + + + Gets sorted patch methods + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Creates new replacement method with the latest patches and detours the original method + The original method + Information describing the patches + The newly created replacement method + + + + Creates a patch sorter + Array of patches that will be sorted + Use debugging + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods + + + Checks if the sorter was created with the same patch list and as a result can be reused to + get the sorted order of the patches. + List of patches to check against + true if equal + + + Removes one unresolved dependency from the least important patch. + + + Outputs all unblocked patches from the waiting list to results list + + + Adds patch to both results list and handled patches set + Patch to add + + + Wrapper used over the Patch object to allow faster dependency access and + dependency removal in case of cyclic dependencies + + + Create patch wrapper object used for sorting + Patch to wrap + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + Determines whether patches are equal + The other patch + true if equal + + + Hash function + A hash code + + + Bidirectionally registers Patches as after dependencies + List of dependencies to register + + + Bidirectionally registers Patches as before dependencies + List of dependencies to register + + + Bidirectionally removes Patch from after dependencies + Patch to remove + + + Bidirectionally removes Patch from before dependencies + Patch to remove + + + Specifies the type of method + + + + This is a normal method + + + This is a getter + + + This is a setter + + + This is a constructor + + + This is a static constructor + + + Specifies the type of argument + + + + This is a normal argument + + + This is a reference argument (ref) + + + This is an out argument (out) + + + This is a pointer argument (&) + + + Specifies the type of patch + + + + Any patch + + + A prefix patch + + + A postfix patch + + + A transpiler + + + A finalizer + + + A reverse patch + + + Specifies the type of reverse patch + + + + Use the unmodified original method (directly from IL) + + + Use the original as it is right now including previous patches but excluding future ones + + + The base class for all Harmony annotations (not meant to be used directly) + + + + The common information for all attributes + + + Annotation to define your Harmony patch methods + + + + An empty annotation can be used together with TargetMethod(s) + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define your standin methods for reverse patching + + + + An annotation that specifies the type of reverse patching + The of the reverse patch + + + + A Harmony annotation to define that all methods in a class are to be patched + + + + A Harmony annotation + + + + A Harmony annotation to define patch priority + The priority + + + + A Harmony annotation + + + + A Harmony annotation to define that a patch comes before another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to define that a patch comes after another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to debug a patch (output uses to log to your Desktop) + + + + Specifies the Prepare function in a patch class + + + + Specifies the Cleanup function in a patch class + + + + Specifies the TargetMethod function in a patch class + + + + Specifies the TargetMethods function in a patch class + + + + Specifies the Prefix function in a patch class + + + + Specifies the Postfix function in a patch class + + + + Specifies the Transpiler function in a patch class + + + + Specifies the Finalizer function in a patch class + + + + A Harmony annotation + + + + The name of the original argument + + + + The index of the original argument + + + + The new name of the original argument + + + + An annotation to declare injected arguments by name + + + + An annotation to declare injected arguments by index + Zero-based index + + + + An annotation to declare injected arguments by renaming them + Name of the original argument + New name + + + + An annotation to declare injected arguments by index and renaming them + Zero-based index + New name + + + + An abstract wrapper around OpCode and their operands. Used by transpilers + + + + The opcode + + + + The operand + + + + All labels defined on this instruction + + + + All exception block boundaries defined on this instruction + + + + Creates a new CodeInstruction with a given opcode and optional operand + The opcode + The operand + + + + Create a full copy (including labels and exception blocks) of a CodeInstruction + The to copy + + + + Clones a CodeInstruction and resets its labels and exception blocks + A lightweight copy of this code instruction + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its opcode + The opcode + A copy of this CodeInstruction with a new opcode + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its operand + The operand + A copy of this CodeInstruction with a new operand + + + + Returns a string representation of the code instruction + A string representation of the code instruction + + + + Exception block types + + + + The beginning of an exception block + + + + The beginning of a catch block + + + + The beginning of an except filter block + + + + The beginning of a fault block + + + + The beginning of a finally block + + + + The end of an exception block + + + + An exception block + + + + Block type + + + + Catch type + + + + Creates an exception block + The + The catch type + + + + The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain + + + + The unique identifier + + + + Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" + This is for full debugging. To debug only specific patches, use the attribute + + + + Creates a new Harmony instance + A unique identifier (you choose your own) + A Harmony instance + + + + Searches the current assembly for Harmony annotations and uses them to create patches + + + + Creates a empty patch processor for an original method + The original method/constructor + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + A new instance + + + + Creates a reverse patcher for one of your stub methods + The original method/constructor + The stand-in stub method as + A new instance + + + + Searches an assembly for Harmony annotations and uses them to create patches + The assembly + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + The replacement method that was created to patch the original method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Unpatches methods + The optional Harmony ID to restrict unpatching to a specific instance + This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID + + + + Unpatches a method + The original method/constructor + The + The optional Harmony ID to restrict unpatching to a specific instance + + + + Unpatches a method + The original method/constructor + The patch method as method to remove + + + + Test for patches from a specific Harmony ID + The Harmony ID + True if patches for this ID exist + + + + Gets patch information for a given original method + The original method/constructor + The patch information as + + + + Gets the methods this instance has patched + An enumeration of original methods/constructors + + + + Gets all patched original methods in the appdomain + An enumeration of patched original methods/constructors + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly versions keyed by Harmony IDs + + + + Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure + + + + Default serialization constructor (not implemented) + The info + The context + + + + Get a list of IL instructions in pairs of offset+code + A list of key/value pairs which represent an offset and the code at that offset + + + + Get a list of IL instructions without offsets + A list of + + + + Get the error offset of the errornous IL instruction + The offset + + + + Get the index of the errornous IL instruction + The index into the list of instructions or -1 if not found + + + + A wrapper around a method to use it as a patch (for example a Prefix) + + + + The original method + + + + Class/type declaring this patch + + + + Patch method name + + + + Optional patch + + + + Array of argument types of the patch method + + + + of the patch + + + + Install this patch before patches with these Harmony IDs + + + + Install this patch after patches with these Harmony IDs + + + + Reverse patch type, see + + + + Create debug output for this patch + + + + Default constructor + + + + Creates a patch from a given method + The original method + + + + Creates a patch from a given method + The original method + The patch + A list of harmony IDs that should come after this patch + A list of harmony IDs that should come before this patch + Set to true to generate debug output + + + + Creates a patch from a given method + The patch class/type + The patch method name + The optional argument types of the patch method (for overloaded methods) + + + + Gets the names of all internal patch info fields + A list of field names + + + + Merges annotations + The list of to merge + The merged + + + + Returns a string that represents the annotation + A string representation + + + + Annotation extensions + + + + Copies annotation information + The source + The destination + + + + Clones an annotation + The to clone + A copied + + + + Merges annotations + The master + The detail + A new, merged + + + + Gets all annotations on a class/type + The class/type + A list of all + + + + Gets merged annotations on a class/type + The class/type + The merged + + + + Gets all annotations on a method + The method/constructor + A list of + + + + Gets merged annotations on a method + The method/constructor + The merged + + + + + A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. + Used by the calli instruction, can be used by transpilers + + + + + See + + + + See + + + + See + + + + The list of all parameter types or function pointer signatures received by the call site + + + + The return type or function pointer signature returned by the call site + + + + Returns a string representation of the inline signature + A string representation of the inline signature + + + + + A mutable representation of a parameter type with an attached type modifier, + similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq + + + + + Whether this is a modopt (optional modifier type) or a modreq (required modifier type) + + + + The modifier type attached to the parameter type + + + + The modified parameter type + + + + Returns a string representation of the modifier type + A string representation of the modifier type + + + + Patch serialization + + + + Control the binding of a serialized object to a type + Specifies the assembly name of the serialized object + Specifies the type name of the serialized object + The type of the object the formatter creates a new instance of + + + + Serializes a patch info + The + The serialized data + + + + Deserialize a patch info + The serialized data + A + + + + Compare function to sort patch priorities + The patch + Zero-based index + The priority + A standard sort integer (-1, 0, 1) + + + + Serializable patch information + + + + Prefixes as an array of + + + + Postfixes as an array of + + + + Transpilers as an array of + + + + Finalizers as an array of + + + + Default constructor + + + + Returns if any of the patches wants debugging turned on + + + + Adds a prefix + + The prefix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for prefixes that should run after this prefix + A list of Harmony IDs for prefixes that should run before this prefix + A flag that will log the replacement method via every time this prefix is used to build the replacement, even in the future + + + + Removes prefixes + The owner of the prefix or * for any prefix + + + + Adds a postfix + The postfix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for postfixes that should run after this postfix + A list of Harmony IDs for postfixes that should run before this postfix + A flag that will log the replacement method via every time this postfix is used to build the replacement, even in the future + + + + Removes postfixes + The owner of the postfix or * for any postfix + + + + Adds a transpiler + The transpiler method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for transpilers that should run after this transpiler + A list of Harmony IDs for transpilers that should run before this transpiler + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes transpilers + The owner of the transpiler or * for any transpiler + + + + Adds a finalizer + The finalizer method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for finalizers that should run after this finalizer + A list of Harmony IDs for finalizers that should run before this finalizer + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes finalizers + The owner of the finalizer or * for any finalizer + + + + Removes a patch using its method + The method of the patch to remove + + + + A serializable patch + + + + Zero-based index + + + + The owner (Harmony ID) + + + + The priority, see + + + + Keep this patch before the patches indicated in the list of Harmony IDs + + + + Keep this patch after the patches indicated in the list of Harmony IDs + + + + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + The method of the static patch method + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Get the patch method or a DynamicMethod if original patch method is a patch factory + The original method/constructor + The method of the patch + + + + Determines whether patches are equal + The other patch + true if equal + + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + + Hash function + A hash code + + + + A PatchClassProcessor used to turn on a class/type into patches + + + + Creates an empty patch class processor + The Harmony instance + The class to process + + + + Applies the patches + A list of all created replacement methods or null if patch class is not annotated + + + + A group of patches + + + + A collection of prefix + + + + A collection of postfix + + + + A collection of transpiler + + + + A collection of finalizer + + + + Gets all owners (Harmony IDs) or all known patches + The patch owners + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + + + + A PatchProcessor handles patches on a method/constructor + + + + Creates an empty patch processor + The Harmony instance + The original method/constructor + + + + Adds a prefix + The prefix as a + A for chaining calls + + + + Adds a prefix + The prefix method + A for chaining calls + + + + Adds a postfix + The postfix as a + A for chaining calls + + + + Adds a postfix + The postfix method + A for chaining calls + + + + Adds a transpiler + The transpiler as a + A for chaining calls + + + + Adds a transpiler + The transpiler method + A for chaining calls + + + + Adds a finalizer + The finalizer as a + A for chaining calls + + + + Adds a finalizer + The finalizer method + A for chaining calls + + + + Gets all patched original methods in the appdomain + An enumeration of patched method/constructor + + + + Applies all registered patches + The generated replacement method + + + + Unpatches patches of a given type and/or Harmony ID + The patch type + Harmony ID or * for any + A for chaining calls + + + + Unpatches a specific patch + The method of the patch + A for chaining calls + + + + Gets patch information on an original + The original method/constructor + The patch information as + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly version keyed by Harmony ID + + + + Returns the methods unmodified list of code instructions + The original method/constructor + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list containing all the original + + + + Returns the methods unmodified list of code instructions + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + A list containing all the original + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + All instructions as opcode/operand pairs + + + + A patch priority + + + + Patch last + + + + Patch with very low priority + + + + Patch with low priority + + + + Patch with lower than normal priority + + + + Patch with normal priority + + + + Patch with higher than normal priority + + + + Patch with high priority + + + + Patch with very high priority + + + + Patch first + + + + A reverse patcher + + + + Creates a reverse patcher + The Harmony instance + The original method/constructor + Your stand-in stub method as + + + + Applies the patch + The type of patch, see + The generated replacement method + + + + A collection of commonly used transpilers + + + + A transpiler that replaces all occurrences of a given method with another one + The enumeration of to act on + Method or constructor to search for + Method or constructor to replace with + Modified enumeration of + + + + A transpiler that alters instructions that match a predicate by calling an action + The enumeration of to act on + A predicate selecting the instructions to change + An action to apply to matching instructions + Modified enumeration of + + + + A transpiler that logs a text at the beginning of the method + The instructions to act on + The log text + Modified enumeration of + + + + A helper class for reflection related functions + + + + Shortcut for to simplify the use of reflections and make it work for any access level + + + + Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type + + + + Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise + The name + A type or null if not found + + + + Gets all type by name from a given assembly. This is a wrapper that respects different .NET versions + The assembly + An array of types + + + + Applies a function going up the type hierarchy and stops at the first non null result + Result type of func() + The class/type to start with + The evaluation function returning T + Returns the first non null result or default(T) when reaching the top level type object + + + + Applies a function going into inner types and stops at the first non null result + Generic type parameter + The class/type to start with + The evaluation function returning T + Returns the first non null result or null with no match + + + + Gets the reflection information for a directly declared field + The class/type where the field is defined + The name of the field + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field by searching the type and all its super types + The class/type where the field is defined + The name of the field (case sensitive) + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field + The class/type where the field is declared + The zero-based index of the field inside the class definition + A field or null when type is null or when the field cannot be found + + + + Gets the reflection information for a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a property by searching the type and all its super types + The class/type + The name + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a directly declared method + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The full name like Namespace.Type1.Type2:MethodName of the type where the method is declared + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the names of all method that are declared in a type + The declaring class/type + A list of method names + + + + Gets the names of all method that are declared in the type of the instance + An instance of the type to search in + A list of method names + + + + Gets the names of all fields that are declared in a type + The declaring class/type + A list of field names + + + + Gets the names of all fields that are declared in the type of the instance + An instance of the type to search in + A list of field names + + + + Gets the names of all properties that are declared in a type + The declaring class/type + A list of property names + + + + Gets the names of all properties that are declared in the type of the instance + An instance of the type to search in + A list of property names + + + + Gets the type of any class member of + A member + The class/type of this member + + + + Test if a class member is actually an concrete implementation + A member + True if the member is a declared + + + + Gets the real implementation of a class member + A member + The member itself if its declared. Otherwise the member that is actually implemented in some base type + + + + Gets the reflection information for a directly declared constructor + The class/type where the constructor is declared + Optional parameters to target a specific overload of the constructor + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the constructor cannot be found + + + + Gets the reflection information for a constructor by searching the type and all its super types + The class/type where the constructor is declared + Optional parameters to target a specific overload of the method + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the method cannot be found + + + + Gets reflection information for all declared constructors + The class/type where the constructors are declared + Optional parameters to only consider static constructors + A list of constructor infos + + + + Gets reflection information for all declared methods + The class/type where the methods are declared + A list of methods + + + + Gets reflection information for all declared properties + The class/type where the properties are declared + A list of properties + + + + Gets reflection information for all declared fields + The class/type where the fields are declared + A list of fields + + + + Gets the return type of a method or constructor + The method/constructor + The return type + + + + Given a type, returns the first inner type matching a recursive search by name + The class/type to start searching at + The name of the inner type (case sensitive) + The inner type or null if type/name is null or if a type with that name cannot be found + + + + Given a type, returns the first inner type matching a recursive search with a predicate + The class/type to start searching at + The predicate to search with + The inner type or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first method matching a predicate + The class/type to start searching at + The predicate to search with + The method or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first constructor matching a predicate + The class/type to start searching at + The predicate to search with + The constructor info or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first property matching a predicate + The class/type to start searching at + The predicate to search with + The property or null if type/predicate is null or if a type with that name cannot be found + + + + Returns an array containing the type of each object in the given array + An array of objects + An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) + + + + Creates an array of input parameters for a given method and a given set of potential inputs + The method/constructor you are planing to call + The possible input parameters in any order + An object array matching the method signature + + + + A read/writable reference to an instance field + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The runtime instance to access the field (leave empty for static fields) + An readable/assignable object representing the field + + + + Creates an instance field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + A read and writable field reference delegate + + + + Creates an instance field reference for a specific instance + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The instance + The name of the field + An readable/assignable object representing the field + + + + Creates an instance field reference delegate + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The field of the field + A read and writable delegate + + + + A read/writable reference delegate to a static field + The type of the field + An readable/assignable object representing the static field + + + + Creates a static field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + An readable/assignable object representing the static field + + + + Creates a static field reference delegate + The type of the field + The field + A read and writable delegate + + + + Returns who called the current method + The calling method/constructor (excluding the caller) + + + + Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) + The exception to rethrow + + + + Tells you if the current runtime is based on Mono + True if we are running under Mono, false otherwise (.NET) + + + + Throws a missing member runtime exception + The type that is involved + A list of names + + + + Gets default value for a specific type + The class/type + The default value + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + A copy of the original object but of type T + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + [out] The copy of the original object + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + + + + Makes a deep copy of any object + The original object + The type of the instance that should be created + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + The copy of the original object + + + + Tests if a type is a struct + The type + True if the type is a struct + + + + Tests if a type is a class + The type + True if the type is a class + + + + Tests if a type is a value type + The type + True if the type is a value type + + + + Tests if a type is an integer type + The type + True if the type represents some integer + + + + Tests if a type is a floating point type + The type + True if the type represents some floating point + + + + Tests if a type is a numerical type + The type + True if the type represents some number + + + + Tests if a type is void + The type + True if the type is void + + + + Test whether an instance is of a nullable type + Type of instance + An instance to test + True if instance is of nullable type, false if not + + + + Calculates a combined hash code for an enumeration of objects + The objects + The hash code + + + + General extensions for common cases + + + + Joins an enumeration with a value converter and a delimiter to a string + The inner type of the enumeration + The enumeration + An optional value converter (from T to string) + An optional delimiter + The values joined into a string + + + + Converts an array of types (for example methods arguments) into a human readable form + The array of types + A human readable description including brackets + + + + A full description of a type + The type + A human readable description + + + + A a full description of a method or a constructor without assembly details but with generics + The method/constructor + A human readable description + + + + A helper converting parameter infos to types + The array of parameter infos + An array of types + + + + A helper to access a value via key from a dictionary + The key type + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist + + + + A helper to access a value via key from a dictionary with extra casting + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist or cannot be cast to T + + + + Escapes Unicode and ASCII non printable characters + The string to convert + The string to convert + A string literal surrounded by + + + + Extensions for + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand has the same type and is equal to the value + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand is equal to the value + This is an optimized version of for + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand is equal to the given operand + This is an optimized version of for + + + + Tests for any form of Ldarg* + The + The (optional) index + True if it matches one of the variations + + + + Tests for Ldarga/Ldarga_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for Starg/Starg_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for any form of Ldloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests for any form of Stloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests if the code instruction branches + The + The label if the instruction is a branch operation or if not + True if the instruction branches + + + + Tests if the code instruction calls the method/constructor + The + The method + True if the instruction calls the method or constructor + + + + Tests if the code instruction loads a constant + The + True if the instruction loads a constant + + + + Tests if the code instruction loads an integer constant + The + The integer constant + True if the instruction loads the constant + + + + Tests if the code instruction loads a floating point constant + The + The floating point constant + True if the instruction loads the constant + + + + Tests if the code instruction loads an enum constant + The + The enum + True if the instruction loads the constant + + + + Tests if the code instruction loads a field + The + The field + Set to true if the address of the field is loaded + True if the instruction loads the field + + + + Tests if the code instruction stores a field + The + The field + True if the instruction stores this field + + + + General extensions for collections + + + + A simple way to execute code for every element in a collection + The inner type of the collection + The collection + The action to execute + + + + A simple way to execute code for elements in a collection matching a condition + The inner type of the collection + The collection + The predicate + The action to execute + + + + A helper to add an item to a collection + The inner type of the collection + The collection + The item to add + The collection containing the item + + + + A helper to add an item to an array + The inner type of the collection + The array + The item to add + The array containing the item + + + + A helper to add items to an array + The inner type of the collection + The array + The items to add + The array containing the items + + + + A file log for debugging + + + + Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop + + + + The indent character. The default is tab + + + + The current indent level + + + + Changes the indentation level + The value to add to the indentation level + + + + Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + The string to log + + + + Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + A list of strings to log (they will not be re-indented) + + + + Returns the log buffer and optionally empties it + True to empty the buffer + The buffer. + + + + Replaces the buffer with new lines + The lines to store + + + + Flushes the log buffer to disk (use in combination with LogBuffered) + + + + Log a string directly to disk. Slower method that prevents missing information in case of a crash + The string to log. + + + + Resets and deletes the log + + + + Logs some bytes as hex values + The pointer to some memory + The length of bytes to log + + + + A helper class to retrieve reflection info for non-private methods + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The generic result type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + A reflection helper to read and write private elements + The result type defined by GetValue() + + + + Creates a traverse instance from an existing instance + The existing instance + + + + Gets/Sets the current value + The value to read or write + + + + A reflection helper to read and write private elements + + + + Creates a new traverse instance from a class/type + The class/type + A instance + + + + Creates a new traverse instance from a class T + The class + A instance + + + + Creates a new traverse instance from an instance + The object + A instance + + + + Creates a new traverse instance from a named type + The type name, for format see + A instance + + + + Creates a new and empty traverse instance + + + + Creates a new traverse instance from a class/type + The class/type + + + + Creates a new traverse instance from an instance + The object + + + + Gets the current value + The value + + + + Gets the current value + The type of the value + The value + + + + Invokes the current method with arguments and returns the result + The method arguments + The value returned by the method + + + + Invokes the current method with arguments and returns the result + The type of the value + The method arguments + The value returned by the method + + + + Sets a value of the current field or property + The value + The same traverse instance + + + + Gets the type of the current field or property + The type + + + + Moves the current traverse instance to a inner type + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type of the field + The type name + A traverse instance + + + + Gets all fields of the current type + A list of field names + + + + Moves the current traverse instance to a property + The type name + Optional property index + A traverse instance + + + + Moves the current traverse instance to a field + The type of the property + The type name + Optional property index + A traverse instance + + + + Gets all properties of the current type + A list of property names + + + + Moves the current traverse instance to a method + The name of the method + The arguments defining the argument types of the method overload + A traverse instance + + + + Moves the current traverse instance to a method + The name of the method + The argument types of the method + The arguments for the method + A traverse instance + + + + Gets all methods of the current type + A list of method names + + + + Checks if the current traverse instance is for a field + True if its a field + + + + Checks if the current traverse instance is for a property + True if its a property + + + + Checks if the current traverse instance is for a method + True if its a method + + + + Checks if the current traverse instance is for a type + True if its a type + + + + Iterates over all fields of the current type and executes a traverse action + Original object + The action receiving a instance for each field + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each field pair + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the field pair and the instances + + + + Iterates over all properties of the current type and executes a traverse action + Original object + The action receiving a instance for each property + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each property pair + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the property pair and the instances + + + + A default field action that copies fields to fields + + + + Returns a string that represents the current traverse + A string representation + + + + diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.1/0Harmony.dll b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.1/0Harmony.dll new file mode 100644 index 0000000..a5a247a Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.1/0Harmony.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.1/0Harmony.xml b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.1/0Harmony.xml new file mode 100644 index 0000000..a17cc8f --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/Lib.Harmony.2.0.0.9/lib/netcoreapp3.1/0Harmony.xml @@ -0,0 +1,2476 @@ + + + + 0Harmony + + + + A factory to create delegate types + + + Default constructor + + + Creates a delegate type for a method + The method + The new delegate type + + + + A getter delegate type + Type that getter gets field/property value from + Type of the value that getter gets + The instance get getter uses + An delegate + + + + A setter delegate type + Type that setter sets field/property value for + Type of the value that setter sets + The instance the setter uses + The value the setter uses + An delegate + + + + A constructor delegate type + Type that constructor creates + An delegate + + + + A helper class for fast access to getters and setters + + + Creates an instantiation delegate + Type that constructor creates + The new instantiation delegate + + + + Creates an getter delegate for a property + Type that getter reads property from + Type of the property that gets accessed + The property + The new getter delegate + + + + Creates an getter delegate for a field + Type that getter reads field from + Type of the field that gets accessed + The field + The new getter delegate + + + + Creates an getter delegate for a field (with a list of possible field names) + Type that getter reads field/property from + Type of the field/property that gets accessed + A list of possible field names + The new getter delegate + + + + Creates an setter delegate + Type that setter assigns property value to + Type of the property that gets assigned + The property + The new setter delegate + + + + Creates an setter delegate for a field + Type that setter assigns field value to + Type of the field that gets assigned + The field + The new getter delegate + + + + A delegate to invoke a method + The instance + The method parameters + The method result + + + A helper class to invoke method with delegates + + + Creates a fast invocation handler from a method + The method to invoke + Controls if boxed value object is accessed/updated directly + The + + + The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array + passed to the fast invocation handler. + Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. + Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. + For example, + + var val = 5; + var box = (object)val; + var arr = new object[] { box }; + handler(arr); // for a method with parameter signature: ref/out/in int + + + + + If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, + such that all references to the boxed object reflect the potentially updated value. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] + now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. + + + If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, + such that potential updates to the value are reflected only in the arguments array. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. + + + + + A low level memory helper + + + Mark method for no inlining (currently only works on Mono) + The method/constructor to change + + + Detours a method + The original method/constructor + The replacement method/constructor + An error string + + + + Writes a jump to memory + The memory address + Jump destination + An error string + + + + Gets the start of a method in memory + The method/constructor + [out] Details of the exception + The method start address + + + + special parameter names that can be used in prefix and postfix methods + + + Patch function helpers + + + Adds a prefix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a prefix + The patch info + The owner (Harmony ID) + + + + Adds a postfix + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a postfix + The patch info + The owner (Harmony ID) + + + + Adds a transpiler + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a transpiler + The patch info + The owner (Harmony ID) + + + + Adds a finalizer + The patch info + The owner (Harmony ID) + The annotation info + + + + Removes a finalizer + The patch info + The owner (Harmony ID) + + + + Removes a patch method + The patch info + The patch method + + + + Gets sorted patch methods + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Creates new replacement method with the latest patches and detours the original method + The original method + Information describing the patches + The newly created replacement method + + + + Creates a patch sorter + Array of patches that will be sorted + Use debugging + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods + + + Checks if the sorter was created with the same patch list and as a result can be reused to + get the sorted order of the patches. + List of patches to check against + true if equal + + + Removes one unresolved dependency from the least important patch. + + + Outputs all unblocked patches from the waiting list to results list + + + Adds patch to both results list and handled patches set + Patch to add + + + Wrapper used over the Patch object to allow faster dependency access and + dependency removal in case of cyclic dependencies + + + Create patch wrapper object used for sorting + Patch to wrap + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + Determines whether patches are equal + The other patch + true if equal + + + Hash function + A hash code + + + Bidirectionally registers Patches as after dependencies + List of dependencies to register + + + Bidirectionally registers Patches as before dependencies + List of dependencies to register + + + Bidirectionally removes Patch from after dependencies + Patch to remove + + + Bidirectionally removes Patch from before dependencies + Patch to remove + + + Specifies the type of method + + + + This is a normal method + + + This is a getter + + + This is a setter + + + This is a constructor + + + This is a static constructor + + + Specifies the type of argument + + + + This is a normal argument + + + This is a reference argument (ref) + + + This is an out argument (out) + + + This is a pointer argument (&) + + + Specifies the type of patch + + + + Any patch + + + A prefix patch + + + A postfix patch + + + A transpiler + + + A finalizer + + + A reverse patch + + + Specifies the type of reverse patch + + + + Use the unmodified original method (directly from IL) + + + Use the original as it is right now including previous patches but excluding future ones + + + The base class for all Harmony annotations (not meant to be used directly) + + + + The common information for all attributes + + + Annotation to define your Harmony patch methods + + + + An empty annotation can be used together with TargetMethod(s) + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define your standin methods for reverse patching + + + + An annotation that specifies the type of reverse patching + The of the reverse patch + + + + A Harmony annotation to define that all methods in a class are to be patched + + + + A Harmony annotation + + + + A Harmony annotation to define patch priority + The priority + + + + A Harmony annotation + + + + A Harmony annotation to define that a patch comes before another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to define that a patch comes after another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation + + + A Harmony annotation to debug a patch (output uses to log to your Desktop) + + + + Specifies the Prepare function in a patch class + + + + Specifies the Cleanup function in a patch class + + + + Specifies the TargetMethod function in a patch class + + + + Specifies the TargetMethods function in a patch class + + + + Specifies the Prefix function in a patch class + + + + Specifies the Postfix function in a patch class + + + + Specifies the Transpiler function in a patch class + + + + Specifies the Finalizer function in a patch class + + + + A Harmony annotation + + + + The name of the original argument + + + + The index of the original argument + + + + The new name of the original argument + + + + An annotation to declare injected arguments by name + + + + An annotation to declare injected arguments by index + Zero-based index + + + + An annotation to declare injected arguments by renaming them + Name of the original argument + New name + + + + An annotation to declare injected arguments by index and renaming them + Zero-based index + New name + + + + An abstract wrapper around OpCode and their operands. Used by transpilers + + + + The opcode + + + + The operand + + + + All labels defined on this instruction + + + + All exception block boundaries defined on this instruction + + + + Creates a new CodeInstruction with a given opcode and optional operand + The opcode + The operand + + + + Create a full copy (including labels and exception blocks) of a CodeInstruction + The to copy + + + + Clones a CodeInstruction and resets its labels and exception blocks + A lightweight copy of this code instruction + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its opcode + The opcode + A copy of this CodeInstruction with a new opcode + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its operand + The operand + A copy of this CodeInstruction with a new operand + + + + Returns a string representation of the code instruction + A string representation of the code instruction + + + + Exception block types + + + + The beginning of an exception block + + + + The beginning of a catch block + + + + The beginning of an except filter block + + + + The beginning of a fault block + + + + The beginning of a finally block + + + + The end of an exception block + + + + An exception block + + + + Block type + + + + Catch type + + + + Creates an exception block + The + The catch type + + + + The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain + + + + The unique identifier + + + + Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" + This is for full debugging. To debug only specific patches, use the attribute + + + + Creates a new Harmony instance + A unique identifier (you choose your own) + A Harmony instance + + + + Searches the current assembly for Harmony annotations and uses them to create patches + + + + Creates a empty patch processor for an original method + The original method/constructor + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + A new instance + + + + Creates a reverse patcher for one of your stub methods + The original method/constructor + The stand-in stub method as + A new instance + + + + Searches an assembly for Harmony annotations and uses them to create patches + The assembly + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + The replacement method that was created to patch the original method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Unpatches methods + The optional Harmony ID to restrict unpatching to a specific instance + This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID + + + + Unpatches a method + The original method/constructor + The + The optional Harmony ID to restrict unpatching to a specific instance + + + + Unpatches a method + The original method/constructor + The patch method as method to remove + + + + Test for patches from a specific Harmony ID + The Harmony ID + True if patches for this ID exist + + + + Gets patch information for a given original method + The original method/constructor + The patch information as + + + + Gets the methods this instance has patched + An enumeration of original methods/constructors + + + + Gets all patched original methods in the appdomain + An enumeration of patched original methods/constructors + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly versions keyed by Harmony IDs + + + + Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure + + + + Default serialization constructor (not implemented) + The info + The context + + + + Get a list of IL instructions in pairs of offset+code + A list of key/value pairs which represent an offset and the code at that offset + + + + Get a list of IL instructions without offsets + A list of + + + + Get the error offset of the errornous IL instruction + The offset + + + + Get the index of the errornous IL instruction + The index into the list of instructions or -1 if not found + + + + A wrapper around a method to use it as a patch (for example a Prefix) + + + + The original method + + + + Class/type declaring this patch + + + + Patch method name + + + + Optional patch + + + + Array of argument types of the patch method + + + + of the patch + + + + Install this patch before patches with these Harmony IDs + + + + Install this patch after patches with these Harmony IDs + + + + Reverse patch type, see + + + + Create debug output for this patch + + + + Default constructor + + + + Creates a patch from a given method + The original method + + + + Creates a patch from a given method + The original method + The patch + A list of harmony IDs that should come after this patch + A list of harmony IDs that should come before this patch + Set to true to generate debug output + + + + Creates a patch from a given method + The patch class/type + The patch method name + The optional argument types of the patch method (for overloaded methods) + + + + Gets the names of all internal patch info fields + A list of field names + + + + Merges annotations + The list of to merge + The merged + + + + Returns a string that represents the annotation + A string representation + + + + Annotation extensions + + + + Copies annotation information + The source + The destination + + + + Clones an annotation + The to clone + A copied + + + + Merges annotations + The master + The detail + A new, merged + + + + Gets all annotations on a class/type + The class/type + A list of all + + + + Gets merged annotations on a class/type + The class/type + The merged + + + + Gets all annotations on a method + The method/constructor + A list of + + + + Gets merged annotations on a method + The method/constructor + The merged + + + + + A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. + Used by the calli instruction, can be used by transpilers + + + + + See + + + + See + + + + See + + + + The list of all parameter types or function pointer signatures received by the call site + + + + The return type or function pointer signature returned by the call site + + + + Returns a string representation of the inline signature + A string representation of the inline signature + + + + + A mutable representation of a parameter type with an attached type modifier, + similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq + + + + + Whether this is a modopt (optional modifier type) or a modreq (required modifier type) + + + + The modifier type attached to the parameter type + + + + The modified parameter type + + + + Returns a string representation of the modifier type + A string representation of the modifier type + + + + Patch serialization + + + + Control the binding of a serialized object to a type + Specifies the assembly name of the serialized object + Specifies the type name of the serialized object + The type of the object the formatter creates a new instance of + + + + Serializes a patch info + The + The serialized data + + + + Deserialize a patch info + The serialized data + A + + + + Compare function to sort patch priorities + The patch + Zero-based index + The priority + A standard sort integer (-1, 0, 1) + + + + Serializable patch information + + + + Prefixes as an array of + + + + Postfixes as an array of + + + + Transpilers as an array of + + + + Finalizers as an array of + + + + Default constructor + + + + Returns if any of the patches wants debugging turned on + + + + Adds a prefix + + The prefix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for prefixes that should run after this prefix + A list of Harmony IDs for prefixes that should run before this prefix + A flag that will log the replacement method via every time this prefix is used to build the replacement, even in the future + + + + Removes prefixes + The owner of the prefix or * for any prefix + + + + Adds a postfix + The postfix method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for postfixes that should run after this postfix + A list of Harmony IDs for postfixes that should run before this postfix + A flag that will log the replacement method via every time this postfix is used to build the replacement, even in the future + + + + Removes postfixes + The owner of the postfix or * for any postfix + + + + Adds a transpiler + The transpiler method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for transpilers that should run after this transpiler + A list of Harmony IDs for transpilers that should run before this transpiler + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes transpilers + The owner of the transpiler or * for any transpiler + + + + Adds a finalizer + The finalizer method + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for finalizers that should run after this finalizer + A list of Harmony IDs for finalizers that should run before this finalizer + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Removes finalizers + The owner of the finalizer or * for any finalizer + + + + Removes a patch using its method + The method of the patch to remove + + + + A serializable patch + + + + Zero-based index + + + + The owner (Harmony ID) + + + + The priority, see + + + + Keep this patch before the patches indicated in the list of Harmony IDs + + + + Keep this patch after the patches indicated in the list of Harmony IDs + + + + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + The method of the static patch method + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Get the patch method or a DynamicMethod if original patch method is a patch factory + The original method/constructor + The method of the patch + + + + Determines whether patches are equal + The other patch + true if equal + + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + + Hash function + A hash code + + + + A PatchClassProcessor used to turn on a class/type into patches + + + + Creates an empty patch class processor + The Harmony instance + The class to process + + + + Applies the patches + A list of all created replacement methods or null if patch class is not annotated + + + + A group of patches + + + + A collection of prefix + + + + A collection of postfix + + + + A collection of transpiler + + + + A collection of finalizer + + + + Gets all owners (Harmony IDs) or all known patches + The patch owners + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + + + + A PatchProcessor handles patches on a method/constructor + + + + Creates an empty patch processor + The Harmony instance + The original method/constructor + + + + Adds a prefix + The prefix as a + A for chaining calls + + + + Adds a prefix + The prefix method + A for chaining calls + + + + Adds a postfix + The postfix as a + A for chaining calls + + + + Adds a postfix + The postfix method + A for chaining calls + + + + Adds a transpiler + The transpiler as a + A for chaining calls + + + + Adds a transpiler + The transpiler method + A for chaining calls + + + + Adds a finalizer + The finalizer as a + A for chaining calls + + + + Adds a finalizer + The finalizer method + A for chaining calls + + + + Gets all patched original methods in the appdomain + An enumeration of patched method/constructor + + + + Applies all registered patches + The generated replacement method + + + + Unpatches patches of a given type and/or Harmony ID + The patch type + Harmony ID or * for any + A for chaining calls + + + + Unpatches a specific patch + The method of the patch + A for chaining calls + + + + Gets patch information on an original + The original method/constructor + The patch information as + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly version keyed by Harmony ID + + + + Returns the methods unmodified list of code instructions + The original method/constructor + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list containing all the original + + + + Returns the methods unmodified list of code instructions + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + A list containing all the original + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + All instructions as opcode/operand pairs + + + + A patch priority + + + + Patch last + + + + Patch with very low priority + + + + Patch with low priority + + + + Patch with lower than normal priority + + + + Patch with normal priority + + + + Patch with higher than normal priority + + + + Patch with high priority + + + + Patch with very high priority + + + + Patch first + + + + A reverse patcher + + + + Creates a reverse patcher + The Harmony instance + The original method/constructor + Your stand-in stub method as + + + + Applies the patch + The type of patch, see + The generated replacement method + + + + A collection of commonly used transpilers + + + + A transpiler that replaces all occurrences of a given method with another one + The enumeration of to act on + Method or constructor to search for + Method or constructor to replace with + Modified enumeration of + + + + A transpiler that alters instructions that match a predicate by calling an action + The enumeration of to act on + A predicate selecting the instructions to change + An action to apply to matching instructions + Modified enumeration of + + + + A transpiler that logs a text at the beginning of the method + The instructions to act on + The log text + Modified enumeration of + + + + A helper class for reflection related functions + + + + Shortcut for to simplify the use of reflections and make it work for any access level + + + + Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type + + + + Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise + The name + A type or null if not found + + + + Gets all type by name from a given assembly. This is a wrapper that respects different .NET versions + The assembly + An array of types + + + + Applies a function going up the type hierarchy and stops at the first non null result + Result type of func() + The class/type to start with + The evaluation function returning T + Returns the first non null result or default(T) when reaching the top level type object + + + + Applies a function going into inner types and stops at the first non null result + Generic type parameter + The class/type to start with + The evaluation function returning T + Returns the first non null result or null with no match + + + + Gets the reflection information for a directly declared field + The class/type where the field is defined + The name of the field + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field by searching the type and all its super types + The class/type where the field is defined + The name of the field (case sensitive) + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field + The class/type where the field is declared + The zero-based index of the field inside the class definition + A field or null when type is null or when the field cannot be found + + + + Gets the reflection information for a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a property by searching the type and all its super types + The class/type + The name + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a directly declared method + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The full name like Namespace.Type1.Type2:MethodName of the type where the method is declared + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the names of all method that are declared in a type + The declaring class/type + A list of method names + + + + Gets the names of all method that are declared in the type of the instance + An instance of the type to search in + A list of method names + + + + Gets the names of all fields that are declared in a type + The declaring class/type + A list of field names + + + + Gets the names of all fields that are declared in the type of the instance + An instance of the type to search in + A list of field names + + + + Gets the names of all properties that are declared in a type + The declaring class/type + A list of property names + + + + Gets the names of all properties that are declared in the type of the instance + An instance of the type to search in + A list of property names + + + + Gets the type of any class member of + A member + The class/type of this member + + + + Test if a class member is actually an concrete implementation + A member + True if the member is a declared + + + + Gets the real implementation of a class member + A member + The member itself if its declared. Otherwise the member that is actually implemented in some base type + + + + Gets the reflection information for a directly declared constructor + The class/type where the constructor is declared + Optional parameters to target a specific overload of the constructor + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the constructor cannot be found + + + + Gets the reflection information for a constructor by searching the type and all its super types + The class/type where the constructor is declared + Optional parameters to target a specific overload of the method + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the method cannot be found + + + + Gets reflection information for all declared constructors + The class/type where the constructors are declared + Optional parameters to only consider static constructors + A list of constructor infos + + + + Gets reflection information for all declared methods + The class/type where the methods are declared + A list of methods + + + + Gets reflection information for all declared properties + The class/type where the properties are declared + A list of properties + + + + Gets reflection information for all declared fields + The class/type where the fields are declared + A list of fields + + + + Gets the return type of a method or constructor + The method/constructor + The return type + + + + Given a type, returns the first inner type matching a recursive search by name + The class/type to start searching at + The name of the inner type (case sensitive) + The inner type or null if type/name is null or if a type with that name cannot be found + + + + Given a type, returns the first inner type matching a recursive search with a predicate + The class/type to start searching at + The predicate to search with + The inner type or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first method matching a predicate + The class/type to start searching at + The predicate to search with + The method or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first constructor matching a predicate + The class/type to start searching at + The predicate to search with + The constructor info or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first property matching a predicate + The class/type to start searching at + The predicate to search with + The property or null if type/predicate is null or if a type with that name cannot be found + + + + Returns an array containing the type of each object in the given array + An array of objects + An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) + + + + Creates an array of input parameters for a given method and a given set of potential inputs + The method/constructor you are planing to call + The possible input parameters in any order + An object array matching the method signature + + + + A read/writable reference to an instance field + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The runtime instance to access the field (leave empty for static fields) + An readable/assignable object representing the field + + + + Creates an instance field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + A read and writable field reference delegate + + + + Creates an instance field reference for a specific instance + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The instance + The name of the field + An readable/assignable object representing the field + + + + Creates an instance field reference delegate + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The field of the field + A read and writable delegate + + + + A read/writable reference delegate to a static field + The type of the field + An readable/assignable object representing the static field + + + + Creates a static field reference + The class the field is defined in or "object" if type cannot be accessed at compile time + The type of the field + The name of the field + An readable/assignable object representing the static field + + + + Creates a static field reference delegate + The type of the field + The field + A read and writable delegate + + + + Returns who called the current method + The calling method/constructor (excluding the caller) + + + + Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) + The exception to rethrow + + + + Tells you if the current runtime is based on Mono + True if we are running under Mono, false otherwise (.NET) + + + + Throws a missing member runtime exception + The type that is involved + A list of names + + + + Gets default value for a specific type + The class/type + The default value + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + A copy of the original object but of type T + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + [out] The copy of the original object + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + + + + Makes a deep copy of any object + The original object + The type of the instance that should be created + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + The copy of the original object + + + + Tests if a type is a struct + The type + True if the type is a struct + + + + Tests if a type is a class + The type + True if the type is a class + + + + Tests if a type is a value type + The type + True if the type is a value type + + + + Tests if a type is an integer type + The type + True if the type represents some integer + + + + Tests if a type is a floating point type + The type + True if the type represents some floating point + + + + Tests if a type is a numerical type + The type + True if the type represents some number + + + + Tests if a type is void + The type + True if the type is void + + + + Test whether an instance is of a nullable type + Type of instance + An instance to test + True if instance is of nullable type, false if not + + + + Calculates a combined hash code for an enumeration of objects + The objects + The hash code + + + + General extensions for common cases + + + + Joins an enumeration with a value converter and a delimiter to a string + The inner type of the enumeration + The enumeration + An optional value converter (from T to string) + An optional delimiter + The values joined into a string + + + + Converts an array of types (for example methods arguments) into a human readable form + The array of types + A human readable description including brackets + + + + A full description of a type + The type + A human readable description + + + + A a full description of a method or a constructor without assembly details but with generics + The method/constructor + A human readable description + + + + A helper converting parameter infos to types + The array of parameter infos + An array of types + + + + A helper to access a value via key from a dictionary + The key type + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist + + + + A helper to access a value via key from a dictionary with extra casting + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist or cannot be cast to T + + + + Escapes Unicode and ASCII non printable characters + The string to convert + The string to convert + A string literal surrounded by + + + + Extensions for + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand has the same type and is equal to the value + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand is equal to the value + This is an optimized version of for + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand is equal to the given operand + This is an optimized version of for + + + + Tests for any form of Ldarg* + The + The (optional) index + True if it matches one of the variations + + + + Tests for Ldarga/Ldarga_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for Starg/Starg_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for any form of Ldloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests for any form of Stloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests if the code instruction branches + The + The label if the instruction is a branch operation or if not + True if the instruction branches + + + + Tests if the code instruction calls the method/constructor + The + The method + True if the instruction calls the method or constructor + + + + Tests if the code instruction loads a constant + The + True if the instruction loads a constant + + + + Tests if the code instruction loads an integer constant + The + The integer constant + True if the instruction loads the constant + + + + Tests if the code instruction loads a floating point constant + The + The floating point constant + True if the instruction loads the constant + + + + Tests if the code instruction loads an enum constant + The + The enum + True if the instruction loads the constant + + + + Tests if the code instruction loads a field + The + The field + Set to true if the address of the field is loaded + True if the instruction loads the field + + + + Tests if the code instruction stores a field + The + The field + True if the instruction stores this field + + + + General extensions for collections + + + + A simple way to execute code for every element in a collection + The inner type of the collection + The collection + The action to execute + + + + A simple way to execute code for elements in a collection matching a condition + The inner type of the collection + The collection + The predicate + The action to execute + + + + A helper to add an item to a collection + The inner type of the collection + The collection + The item to add + The collection containing the item + + + + A helper to add an item to an array + The inner type of the collection + The array + The item to add + The array containing the item + + + + A helper to add items to an array + The inner type of the collection + The array + The items to add + The array containing the items + + + + A file log for debugging + + + + Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop + + + + The indent character. The default is tab + + + + The current indent level + + + + Changes the indentation level + The value to add to the indentation level + + + + Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + The string to log + + + + Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + A list of strings to log (they will not be re-indented) + + + + Returns the log buffer and optionally empties it + True to empty the buffer + The buffer. + + + + Replaces the buffer with new lines + The lines to store + + + + Flushes the log buffer to disk (use in combination with LogBuffered) + + + + Log a string directly to disk. Slower method that prevents missing information in case of a crash + The string to log. + + + + Resets and deletes the log + + + + Logs some bytes as hex values + The pointer to some memory + The length of bytes to log + + + + A helper class to retrieve reflection info for non-private methods + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The generic result type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + A reflection helper to read and write private elements + The result type defined by GetValue() + + + + Creates a traverse instance from an existing instance + The existing instance + + + + Gets/Sets the current value + The value to read or write + + + + A reflection helper to read and write private elements + + + + Creates a new traverse instance from a class/type + The class/type + A instance + + + + Creates a new traverse instance from a class T + The class + A instance + + + + Creates a new traverse instance from an instance + The object + A instance + + + + Creates a new traverse instance from a named type + The type name, for format see + A instance + + + + Creates a new and empty traverse instance + + + + Creates a new traverse instance from a class/type + The class/type + + + + Creates a new traverse instance from an instance + The object + + + + Gets the current value + The value + + + + Gets the current value + The type of the value + The value + + + + Invokes the current method with arguments and returns the result + The method arguments + The value returned by the method + + + + Invokes the current method with arguments and returns the result + The type of the value + The method arguments + The value returned by the method + + + + Sets a value of the current field or property + The value + The same traverse instance + + + + Gets the type of the current field or property + The type + + + + Moves the current traverse instance to a inner type + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type of the field + The type name + A traverse instance + + + + Gets all fields of the current type + A list of field names + + + + Moves the current traverse instance to a property + The type name + Optional property index + A traverse instance + + + + Moves the current traverse instance to a field + The type of the property + The type name + Optional property index + A traverse instance + + + + Gets all properties of the current type + A list of property names + + + + Moves the current traverse instance to a method + The name of the method + The arguments defining the argument types of the method overload + A traverse instance + + + + Moves the current traverse instance to a method + The name of the method + The argument types of the method + The arguments for the method + A traverse instance + + + + Gets all methods of the current type + A list of method names + + + + Checks if the current traverse instance is for a field + True if its a field + + + + Checks if the current traverse instance is for a property + True if its a property + + + + Checks if the current traverse instance is for a method + True if its a method + + + + Checks if the current traverse instance is for a type + True if its a type + + + + Iterates over all fields of the current type and executes a traverse action + Original object + The action receiving a instance for each field + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each field pair + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the field pair and the instances + + + + Iterates over all properties of the current type and executes a traverse action + Original object + The action receiving a instance for each property + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each property pair + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the property pair and the instances + + + + A default field action that copies fields to fields + + + + Returns a string that represents the current traverse + A string representation + + + + diff --git a/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/.signature.p7s b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/.signature.p7s new file mode 100644 index 0000000..129c23b Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/.signature.p7s differ diff --git a/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/UnlimitedHugs.Rimworld.HugsLib.6.2.1.nupkg b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/UnlimitedHugs.Rimworld.HugsLib.6.2.1.nupkg new file mode 100644 index 0000000..99e8798 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/UnlimitedHugs.Rimworld.HugsLib.6.2.1.nupkg differ diff --git a/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net35/0Harmony.dll b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net35/0Harmony.dll new file mode 100644 index 0000000..6c0dd94 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net35/0Harmony.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net472/HugsLib.dll b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net472/HugsLib.dll new file mode 100644 index 0000000..ec2d257 Binary files /dev/null and b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net472/HugsLib.dll differ diff --git a/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net472/HugsLib.xml b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net472/HugsLib.xml new file mode 100644 index 0000000..318c63a --- /dev/null +++ b/1.4/Source/Giddy-up-Core/packages/UnlimitedHugs.Rimworld.HugsLib.6.2.1/lib/net472/HugsLib.xml @@ -0,0 +1,1141 @@ + + + + HugsLib + + + + + Detects types and members with specific attributes and calls handlers marked with + DetectableAttributeHandler to do something with the marked type or member. + Detectable attributes must implement IDetectableAttribute. + New types and members are detected after a def reload and each type/member is processed only once. + + + + + Apply this to a static method with a MemberInfo and an Attribute parameter to make it a handler for types or members with a certain attribute. + At load time the method will be called as many times as there are types or members marked with the attribute specified as the argument. + + + + + This interface must be implemented by all attributes that should be detectable with AttributeDetector + + + + + Utility methods for SettingHandleConvertible data objects. + These are useful for packing and unpacking your custom fields into a string without bothering with manual serialization. + + + + + Deserializes an XML string into an existing object instance. + + The serialized values to fill the object with + The object to receive the deserialized values + + + + Serializes an object into a compact XML string. + Whitespace and namespace declarations are omitted. + Make sure the object is annotated with SerializableAttribute and the fields to serialize with XmlElementAttribute. + + The object to serialize + + + + Used to indicate that a type should be instantiated at the earliest moment possible. + Specifically, when classes are instantiated (see .DoPlayLoad()). + If is true, Harmony patching will also happen at that time. + + + + + Entry point for the library. + Instantiated by the game at the start of DoPlayLoad(). + + + + + Handles the key presses for key bindings added by HugsLib + + + + + Ensures that the library comes after Core in the load order and displays a warning dialog otherwise. + + + + + Checks for Dev mode and bypasses the Restart message box. + Holding Shift will prevent the automatic restart. + + + + + Provides an entry point for late controller setup during static constructor initialization. + + + + + Forwards ticks to the controller. Will not be saved and is never spawned. + + + + + Holds references to key binding defs used by the library. + + + + + A base for managers that save data in xml format, to be stored in the save data folder + + + + + This is added as a component to the GameObject on scene to forward events to the controller. + + + + + Represents the information stored in the About/Version.xml file. + Since we cannot update the version of the library assembly, we have to store the version externally. + + + + + A shorter, invariable alternative to System.Version in the format of major.minor.patch + Also known as a semantic version number. + System.Version can be implicitly cast to this type. + VersionShort is no longer used by HugsLib internally, and the type is retained for backwards compatibility. + + + + + The front-end for LogPublisher. + Shows the status of the upload operation, provides controls and shows the produced URL. + + + + + Collects the game logs and loaded mods and posts the information on GitHub as a gist. + + + + + Allows adding custom buttons to the EditWindow_Log window. + + + + + Alignment side for custom widgets. + + + + + Callback to draw log window widgets in. + + The log window being dawn. + Window area for custom widgets. + The currently selected log message, or null. + Draw your widget using this to automatically align it with the others. + + + + Adds a new drawing callback to the log window widget drawer. + + The delegate called each OnGUI to draw the widget. + The side of the WidgetRow this widget should be drawn into. + + + + Adds an entry point to draw and additional debug button on the toolbar. + The infix is necessary to catch the WidgetRow that the stock buttons are drawn to. + + + + + Extends the width of the immediate window the dev toolbar buttons are drawn to to accommodate an additional button + + + + + Adds a hook for the early initialization of a Game. + + + + + Forces a game restart after a language change. + This is necessary to avoid creating problems for running mods caused by reloaded graphics and defs. + + + + + Adds a hook for discarding maps. + + + + + Replaces the "Mod Settings" button in the Options dialog with our own. + + + + + Adds extra buttons to the Log window. + + + + + Adds a hook to produce the WorldLoaded callback for ModBase mods. + + + + + Adds a hook to produce the MapGenerated callback for ModBase mods. + + + + + Adds a hook to produce the MapComponentsInitializing callback for ModBase mods. + + + + + Adds a hook to produce the MapLoaded callback for ModBase mods. + + + + + Restarts the game automatically, bypassing the message dialog, if changes in the mod configuration have been made and dev mode is on. + Holding Shift will prevent the restart, while allowing the config changes to still be saved. + + + + + Adds a hook to produce the DefsLoaded callback for ModBase mods. + + + + + Adds an entry point during map quickstart for the quickstarter system. + Will replace the standard scenario and map size if the quickstarter is enabled. + + + + + Hooks into the flow of the vanilla MonoBehavior.Update() + + + + + Hooks into the flow of the vanilla MonoBehavior.OnGUI() + This allows to take advantage of automatic UI scaling and prevents GUI updates during a loading screen. + + + + + Allows to change settings related to the custom quickstart functionality. + Strings are not translated, since this is a tool exclusively for modders. + + + + + Manages the custom quickstart functionality. + Will trigger map loading and generation when the appropriate settings are present, and draws an additional dev toolbar button. + + + + + Wraps settings related to the Quickstart system for storage in a SettingHandle. + + + + + Commands start a new process on the target machine using platform specific commands and args to pass to the shell. + Refer to the Microsoft documentation for dotNet 3.5 for more info on a process. + https://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.90).aspx + + + + + A command to open a directory in the systems default file explorer. + Since Unity's OpenUrl() is broken on OS X, we can use a shell to do it correctly. + + + + + A Command to open the log file in the systems default text editor. + + + + + A Command to cleanly restart RimWorld on the target machine. + + + + + The hub of the library. Instantiates classes that extend ModBase and forwards some of the more useful events to them. + The assembly version of the library should reflect the current major Rimworld version, i.e.: 0.18.0.0 for B18. + This gives us the ability to release updates to the library without breaking compatibility with the mods that implement it. + See Core.HugsLibMod for the entry point. + + + + + The base class for all mods using HugsLib library. All classes extending ModBase will be instantiated automatically by HugsLibController at game initialization. + + + + + This can be used to log messages specific to your mod. + It will prefix everything with your ModIdentifier. + + + + + The ModSettingsPack specific to your mod. + Use this to create settings handles. + + + + + Override this and return false to prevent a Harmony instance from being automatically created and scanning your assembly for patches. + + + + + The reference to Harmony instance that applied the patches in your assembly. + + + + + A unique identifier for your mod. + Valid characters are A-z, 0-9, -, no spaces. + + + + + The content pack for the mod containing the assembly this class belongs to + + + + + Can be false if the mod was enabled at game start and then disabled in the mods menu + + + + + Contains the AssemblyVersion and AssemblyFileVersion of the mod. Used by . + + + + + Return the override version from the Version.xml file if specified, + or the higher one between AssemblyVersion and AssemblyFileVersion + + + + + Called during instantiation, + and only if the implementing class is annotated with + + + + + Called after the static constructors for non-HugsLib mods have executed. Is not called again on def reload + + + + + Called on each tick when in Play scene + + The sequential number of the tick being processed + + + + Called each frame + + + + + Called each unity physics update + + + + + Called on each unity gui event, after UIRoot.UIRootOnGUI. + Respects UI scaling and screen fading. Will not be called during loading screens. + This is a good place to listen for hotkey events. + + + + + Called when GameState.Playing has been entered and the world is fully loaded in the Play scene. + Will not be called during world generation and landing site selection. + + + + + Called right after Map.ConstructComponents() (before MapLoaded) + + The map being initialized + + + + Called right after a new map has been generated. + This is the equivalent of MapComponent.MapGenerated(). + + The new map that has just finished generating + + + + Called when the map was fully loaded + + The map that has finished loading + + + + Called after a map has been abandoned or otherwise made inaccessible. + Works on player bases, encounter maps, destroyed faction bases, etc. + + The map that has been discarded + + + + Called after each scene change + + The scene that has been loaded + + + + Called after settings menu changes have been confirmed. + This is called for all mods, regardless if their own settings have been modified, or not. + + + + + Called after Initialize and when defs have been reloaded. This is a good place to inject defs. + Get your settings handles here, so that the labels will properly update on language change. + If the mod is disabled after being loaded, this method will STILL execute. Use ModIsActive to check. + + + + + Displays a list to update feature defs with basic image and formatting support. See for proper syntax. + + + + + Stores the last displayed update news item for all mods. Shows the news dialog window when there are not yet displayed news items available. + + + + + Describes a single update news item. A mod must have a class extending ModBase and keep its assembly version up to date to make use of this. + + + + + The of the mod which will cause this news item to be displayed. + Alternatively, the name of the folder the mod is loaded from can also be used. + + + + + Displayed in the title of the news item + + + + + Optional complete replacement for the news item title + + + + + The minimum assembly version or assembly file version (whichever one is higher) of the assembly + containing the ModBase extending class, that will cause the feature to be displayed. (format: major.minor.patch) + If overrideVersion in Version.xml is set, it will be considered instead of the assembly versions. + + + + + The text of the news item. Can contain text and images, supports Unity html markup (only recommended for highlighting). + The text can contain the following formatting markers: + | -> (pipe) splits the content into segments. A segment can be a paragraph or image sequence + img:name1,name2 -> Displays a horizontal image sequence. Image names are file names without the extension. + caption:text -> Attaches a text paragraph on the right side of the preceding image + Everything else is treated as plain text and creates a paragraph. + Example: + Paragraph1|Paragraph2|img:singleImage|caption:caption\ntext|img:sequence1,sequence2|More text + + + + + Optional link to a forum post/info page for this update, or the whole mod. Displayed in the news item title. + + + + + An options window for all configurable settings exposed by mods using the library + + + + + Injects the "Mod Settings" button into the Options dialog. + + + + + Base type for all custom SettingHandle types. + Allows complex data structures to be stored in setting values by converting them to and from their string representation. + See for an easy way to serialize complex types to XML. + + + + + Return false to prevent this object from serializing and being written to file. + + + + + Called when settings handles of this type load an existing value. + Should deserialize and restore the state of the object using the provided string. + + + + + Called when handles of this type are being saved, and only if return true. + Should serialize the state of the object into a string so it can be restored later. + + + + + A set of useful value constraints for use with SettingHandle + + + + + A group of settings values added by a mod. Each mod has their own ModSettingsPack. + Loaded values are stored until they are "claimed" by their mod by requesting a handle for a setting with the same name. + + + + + Identifier of the mod that owns this pack + + + + + The name of the owning mod that will display is the Mod Settings dialog + + + + + Special display order for the mod in the Mod Settings dialog. + Mods are generally ordered by name. Please leave this at Normal unless you have a good reason to change it. + + + + + Set to true to disable the collapsing of setting handles in the Mod Settings dialog. + + + + + Retrieves an existing SettingHandle from the pack, or creates a new one. + Loaded settings will only display in the Mod Settings dialog after they have been claimed using this method. + + The type of setting value you are creating. + Unique identifier for the setting. Must be unique for this specific pack only. + A display name for the setting that will show up next to it in the Mod Settings dialog. Recommended to keep this short. + A description for the setting that will appear in a tooltip when the player hovers over the setting in the Mod Settings dialog. + The value the setting will assume when newly created and when the player resets the setting to its default. + An optional delegate that will be called when a new value is about to be assigned to the handle. Receives a string argument and must return a bool to indicate if the passed value is valid for the setting. + Used only for Enum settings. Enum values are displayed in a readable format by the following method: Translate(prefix+EnumValueName) + + + + Returns a handle that was already created. + Will return null if the handle does not exist yet. + + Throws an exception if the referenced handle does not match the provided type + The name of the handle to retrieve + + + + Attempts to retrieve a setting value by name. + If a handle for that value has already been created, returns that handle's StringValue. + Otherwise will return the unclaimed value that was loaded from the XML file. + Will return null if the value does not exist. + + The name of the setting the value of which should be retrieved + + + + Returns true, if there is a setting value that can be retrieved with PeekValue. + This includes already created handles and unclaimed values. + + The name of the setting to check + + + + Deletes a setting loaded from the xml file before it is claimed using GetHandle. + Useful for cleaning up settings that are no longer in use. + + The identifier of the setting (handle identifier) + + + + A central place for mods to store persistent settings. Individual settings are grouped by mod using ModSettingsPack + + + + + Retrieves the ModSettingsPack for a given mod identifier. + + The unique identifier of the mod that owns the pack + A display name of the mod owning the pack. This will be displayed in the Mod Settings dialog. + + + + Saves all settings to disk and notifies all ModBase mods by calling SettingsChanged() + + + + + Removes a settings pack for a mod if it exists. Use SaveChanges to apply the change afterward. + + The identifier of the mod owning the pack + + + + An individual persistent setting owned by a mod. + The extra layer of inheritance allows for type abstraction and storing SettingHandles in lists. + + + + + Unique identifier of the setting. + + + + + Name displayed in the settings menu. + + + + + Displayed as a tooltip in the settings menu. + + + + + Should return true if the passed value is valid for this setting. Optional. + + + + + The string identifier prefix used to display enum values in the settings menu (e.g. "prefix_" for "prefix_EnumValue") + + + + + Return true to make this setting visible in the menu. Optional. + An invisible setting can still be reset to default using the Reset All button. + + + + + Draw a custom control for the settings menu entry. Entry name is already drawn when this is called. Optional. Return value indicates if the control changed the setting. + + + + + When true, setting will never appear in the menu and can not be reset to default by the player. For serialized data. + + + + + When true, will not save this setting to the xml file. Useful in conjunction with CustomDrawer for placing buttons in the settings menu. + + + + + Specifies by how much the + and - buttons should change a numeric setting. + + + + + When CustomDrawer is used, specifies the height of the row for the handle. Leave at 0 for default height. + + + + + Affects the order in which handles appear in the settings menu. Lower comes first, default is 0. + + + + + Implicitly cast handles to the Value they carry. + + + + + Called when the Value of the handle changes. Optional. + + + + + The actual value of the setting. + This is converted to its string representation when settings are saved. + Assigning a new value will trigger the OnValueChanged delegate. + + + + + The value the setting assumes when initially created or reset. + + + + + Retrieves the string representation of the setting or assigns a new setting value using a string. + Will trigger the Validator delegate if assigned and change the Value property if the validation passes. + + + + + Returns the type of the handle Value property. + + + + + Assigns the default value to the Value property. + + + + + Returns true if the handle is set to its default value. + + + + + + Provides a convenient way to read, compare and print out the assembly version and file version of assemblies. + + + + + Tries to read the file assembly version in addition to the already known assembly version. + + The assembly to read + The full path to the assembly file, if is not set + An with only AssemblyVersion set if an exception was encountered + + + + Reads assembly version information for a mod assembly. + + The assembly to read + The content pack the assembly was loaded from + See + + + + A way to schedule single-use callbacks for an upcoming event. + Useful to break the stack and ensure code is run in the main thread. + Access via HugsLibController.Instance.DoLater + + + + + Schedule a callback to be executed at the start of the next tick + + + + + Schedule a callback to be executed at the start of the next frame + + + + + Schedule a callback to be executed at the start of the next OnGUI + + + + + Schedule a callback to be executed the next time a map has finished loading + + The callback receives the map that has finished loading + + + + + Registers a delegate to be called in a given number of ticks. + + The delegate to be called + The delay in ticks before the delegate is called + Optional owner of the delegate. Callback will not fire if the Thing is not spawned at call time. + If true, the callback will be rescheduled after each call until manually unscheduled + + + + Manually remove a callback to abort a delay or clear a recurring callback. + Silently fails if the callback is not found. + + The scheduled callback + + + + Only for debug purposes + + + + + A classic A15-style confirm dialog with Esc and Enter key support. + + + + + A compact message dialog with a title and a custom close button label. + + + + A title to display in the dialog + A message to display in the dialog + A custom label to the close button. Optional- when null, the default label will be used instead. + A callback to call when the dialog is closed + + + + A ticking scheduler for things that require a tick only every so often. + Distributes tick calls uniformly over multiple frames to reduce the workload. + Optimized for many tick recipients with the same tick interval. + + + + + Registers a delegate to be called every tickInterval ticks. + + The delegate that will be called + The interval between the calls (for example 30 to have the delegate be called 2 times a second) + The Thing the delegate is attached to. The callback will be automatically unregistered if the owner is found to be despawned at call time. + + + + Manually removes a delegate to prevent further calls. + + Throws if the provided owner is not registered. Use IsRegistered() to check. + The Thing the delegate was registered with + + + + Returns true if the passed Thing is registered as the owner of a delegate. + + + + + + + Returns all registered tick recipients + + + + + + Returns the number of calls issued across all intervals during the last tick + + + + + Returns the number of active tickers (intervals) + + + + + Tools for working with the Harmony library. + + + + + Produces a human-readable list of all patched methods and their respective patches. + + A Harmony instance that can be queried for patch information. + + + + Produces a human-readable list of all Harmony versions present and their respective owners. + + A Harmony instance that can be queried for version information. + + + + + A catch-all place for extension methods and other useful stuff + + + + + Returns true if the left or right Shift keys are currently pressed. + + + + + Returns true if the left or right Alt keys are currently pressed. + + + + + Returns true if the left or right Control keys are currently pressed. + Mac command keys are supported, as well. + + + + + Returns an enumerable as a comma-separated string. + + A list of elements to string together + + + + Returns an enumerable as a string, joined by a separator string. By default null values appear as an empty string. + + A list of elements to string together + A string to inset between elements + If true, null elements will appear as "[null]" + + + + Returns a version as major.minor.patch formatted string. + + + + + Checks if a Thing has a designation of a given def. + + + The designation def to check for + + + + Adds or removes a designation of a given def on a Thing. Fails silently if designation is already in the desired state. + + The thing to designate + The DesignationDef to apply or remove + True to add the designation, false to remove + + + + Checks if a cell has a designation of a given def + + The map position to check + The DesignationDef to detect + The map to look on. When null, defaults to VisibleMap. + + + + Adds or removes a designation of a given def on a cell. Fails silently if designation is already in the desired state. + + The position to designate + The DesignationDef to apply or remove + True to add the designation, false to remove + The map to operate on. When null, defaults to VisibleMap. + + + + Returns true, if a MethodInfo matches the provided signature. + + Note: instance methods always take their parent type as the first parameter. + The method to check + Expected return type of the checked method + Expected parameter types of the checked method + + + + Returns an attribute from a member, if it exists. + Mods could include attributes from libraries that are not loaded, which would throw an exception, so error checking is included. + + The type of the attribute to fetch + The member to fetch the attribute from + + + + Enumerates all loaded assemblies, including stock and enabled mods. + + + + + Returns true if the mod with a matching name is currently loaded in the mod configuration. + + The ModMetaData.Name to match + + + + Copies a string to the system copy buffer and displays a confirmation message. + + + + + Expands a shorthand unix user directory path with its full system path. + + + + + Adds double quotes to the start and end of a string. + + + + + Attempts to return the patch of the log file Unity is writing to. + + + + + + Sends a constructed UnityWebRequest, waits for the result, and returns the data via callbacks. + + Use UnityWebRequest or WWW to construct a request. Do not call Send(). + Called with the response body if server replied with status 200. + Called with the error message in case of a network error or if server replied with status other than 200. + The expected status code in the response for the request to be considered successful + How long to wait before aborting the request + + + + Tries to find the file handle for a given mod assembly name. + + This is a replacement for mod assemblies are loaded from byte arrays. + The of the assembly + The content pack the assembly was presumably loaded from + Returns null if the file is not found + + + + Same as but suppresses all exceptions. + + + + + Adds a hash to a manually instantiated def to avoid def collisions. + + + + + Give a short hash to a def created at runtime. + Short hashes are used for proper saving of defs in compressed maps within a save file. + + + The type of defs your def will be saved with. For example, use typeof(ThingDef) if your def extends ThingDef. + + + + Injects a map component into the current map if it does not already exist. + Required for new MapComponents that were not active at map creation. + The injection is performed at ExecuteWhenFinished to allow calling this method in MapComponent constructors. + + The MapComponent that is expected to be present is the map's component list + + + + Gets the map component of the given type from a map. + Will throw an exception if a component of the requested type is not found. + + The type of your MapComponent + The map to get the component from + + + + A logger that prefixes all messages with the identifier of the issuing mod. + + + + + Writes a message to the log, prefixing it with the issuing mod identifier. + + The message to write + Optional substitution values for the message + + + + Same as Message(), but the console will display the message as a warning. + + + + + Same as Message(), but the console will display the message as an error. + This will open the Log window in in Dev mode. + + + + + Writes a message only if Dev mode is enabled. + Message is written using Tracer.Trace with the addition of the ModIdentifier as the first value. + + The strings to display + + + + Same as Trace(), but formats the message and replaces substitution variables. + + + + + Writes an error to the log to report an exception. + The message will contain the name of the method that caused the exception if a location is not provided. + + The exception that occurred + Optional identifier of the mod that caused the exception + True, if the exception should only be reported once for that specific location. Useful for errors that will trigger each frame or tick. + Optional name of the location where the exception occurred. Will display as "exception during (location)" + + + + A tool to identify the platform the game is running on. + + + + + Utility methods for displaying debug messages during development. + + + + + Writes comma-separated log messages if the game is in Dev mode. + Any non-strings will be converted to strings, and null values will appear explicitly. + + Messages to output + + + + Similar to Trace, but feeds the messages through String.Format first. + + The string to interpolate + Interpolation arguments + + + + Base type for utility WorldObjects repurposed to store data. See UtilityWorldObjectManager for more info. + + + + + Handles utility WorldObjects of custom types. + Utility WorldObjects are a map-independent storage method for custom data. + All UWOs share the same def and aren't visible on the world, but are saved and loaded with it. + + + + + Returns an existing UWO or creates a new one, adding it to the world. + + Your custom type that extends UtilityWorldObject + + + + Displays custom settings controls for mods that use the vanilla mod settings system. + The dialog shows the controls for a single mod only and is opened through Dialog_ModSettings. + + + + diff --git a/About/About.xml b/About/About.xml index e5afd3d..e002f49 100644 --- a/About/About.xml +++ b/About/About.xml @@ -7,6 +7,7 @@
  • 1.1
  • 1.2
  • 1.3
  • +
  • 1.4
  • diff --git a/LoadFolders.xml b/LoadFolders.xml index 30677a6..5d5b3f0 100644 --- a/LoadFolders.xml +++ b/LoadFolders.xml @@ -11,4 +11,8 @@
  • /
  • 1.3
  • + +
  • /
  • +
  • 1.4
  • +
    \ No newline at end of file