約 1,102,734 件
https://w.atwiki.jp/akasatanahama/pages/68.html
概要 新しい食料アイテムを追加する。 食べたときにポーションエフェクトを確率で付与することもできる。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemFood; import net.minecraft.potion.Potion; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; public static Item foodAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { foodAluminium = new ItemFood(5, 2.0F, false) .setPotionEffect(Potion.regeneration.id, 60, 0, 0.8F) .setCreativeTab(CreativeTabs.tabFood) .setUnlocalizedName("foodAluminium") .setTextureName("aluminiummod foodAluminium"); GameRegistry.registerItem(foodAluminium, "foodAluminium"); } } 解説 ItemFood コンストラクタ(int healAmount, float saturationModifier, boolean isWolfsFavoriteMeat) 引数は順に、満腹度回復量・隠し満腹度回復量(腹持ち)・オオカミが食べられるか ItemFood setPotionEffect(int potionId, int potionDuration, int potionAmplifier, float potionEffectProbability) 食べたときに確率でポーションエフェクトを付与する。 引数は順に、ポーションID・効果時間・効果レベル・付与される確率。 効果時間は単位が秒なので注意。 効果レベルは表示値より1少ない。(0がレベル1) 使用例 オファレンMODの回復玉を追加している部分。 回復玉は、ItemFoodを継承しているが、オーバーライドして変えている部分も多い。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /** @author Akasata Nahama */ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String VERSION = "[1.7.10]1.0.0"; /*略*/ /** 最初に行われる処理。アイテム・ブロックの追加などを行う */ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ // アイテムを設定するメソッドを実行 OfalenModItemCore.registerItem(); /*略*/ } /*略*/ } OfalenModItemCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModItemCore { /*略*/ public static Item ballRecovery; /*略*/ /**アイテムを設定する*/ public static void registerItem () { /*略*/ ballRecovery = new OfalenBall(new PotionEffect[]{new PotionEffect(Potion.heal.id, 1, 0)}) .setUnlocalizedName("ballRecovery") .setTextureName("ofalenmod recovery_ball"); GameRegistry.registerItem(ballRecovery, "ballRecovery"); /*略*/ } } OfalenBall.java package nahama.ofalenmod.item; import nahama.ofalenmod.OfalenModCore; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; public class OfalenBall extends ItemFood { /**付与するポーション効果の配列*/ private final PotionEffect[] effects; /**新規コンストラクター。ポーション効果の配列を受け取る。*/ public OfalenBall(PotionEffect[] effects) { super(0, 0.0F, false); this.effects = effects; this.setCreativeTab(OfalenModCore.tabOfalen); } /**食べるのにかかる時間を返す。(通常よりも少し早い) * @return 20*/ @Override public int getMaxItemUseDuration(ItemStack itemStack) { return 20; } /**右クリックされた時の処理。ItemFoodの満腹度の判定を消している。*/ @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { player.setItemInUse(itemStack, this.getMaxItemUseDuration(itemStack)); return itemStack; } /**食べる時の処理。クリエイティブモードではアイテム数が減らないようにしている。また、ポーション効果も付与する。*/ /* EntityLivingBase.addPotionEffect(PotionEffect)では、効果時間を上書きしているらしい(?)ので、 * 新たにPotionEffectのオブジェクトを生成して引数として渡している。*/ @Override public ItemStack onEaten(ItemStack itemStack, World world, EntityPlayer player) { //クリエイティブモード以外ならスタックサイズを減らす。 if (!player.capabilities.isCreativeMode) { --itemStack.stackSize; } //つけるポーション効果の数だけ繰り返す。 for (int i = 0; i effects.length; i ++) { //サーバー側の処理で、情報が正常なら処理を続ける。 if (!world.isRemote effects[i] != null effects[i].getPotionID() 0) { //即時回復なら、 if (effects[i].getPotionID() == Potion.heal.id) { //ID・効果時間を固定して、 PotionEffect effect = new PotionEffect(Potion.heal.id, 1, effects[i].getAmplifier()); //プレイヤーに付与。 player.addPotionEffect(effect); //即時回復以外なら、 } else { //効果時間のみ固定して、 PotionEffect effect = new PotionEffect(effects[i].getPotionID(), effects[i].getDuration(), effects[i].getAmplifier()); //プレイヤーに付与。 player.addPotionEffect(effect); } } } world.playSoundAtEntity(player, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F); return itemStack; } } コメント この項目に関する質問などをどうぞ。 ItemFood setPotionEffect の引数が (int, int, int, float) ではなく (string) になっているのですが、なぜですか? - あるふぁ 2017-05-20 14 48 36 自己解決しました。 - あるふぁ 2017-05-20 14 51 35 金リンゴのように、満腹度MAXの時でも食べられるものはどう作るのですか? - あるふぁ 2017-05-20 14 54 50 こちらも解決しました。setAlwaysEdible()を使いました。 - あるふぁ 2017-05-20 18 57 23 名前
https://w.atwiki.jp/3dce/pages/27.html
※仮ページとしてとりあえず羅列 ツール関係 BUC00001.zip3D少女カスタムエボリューション向け tdg(tah) tso2mqo 3D少女のファイルを編集可能な状態にします BUC00002.zipカス子modをエボ子に移植 evoconv カスタム少女のMODを3D少女で使えるように変換します 完全に再現されるワケではなく、細かい部分では調整が必要 BUC00005.zip3D少女カスタムエボリューション向け names.txt BUC00017.zip.TBN内容表示 スクリプトを閲覧&txt化して保存 あくまで閲覧専用 BUC00020.zip体型スライダ定義を編集 体型スライダー各種をユーザー側で自由に改造できる 限界突破はもちろん、既存スライダーを全く別の部位に適用する事も可能
https://w.atwiki.jp/akasatanahama/pages/67.html
概要 新しいヘルメット・チェストプレート・レギンス・ブーツを追加する。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraftforge.common.util.EnumHelper; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; public static Item aluminium; public static Item helmetAluminium; public static Item chestPlateAluminium; public static Item leggingsAluminium; public static Item bootsAluminium; public static ArmorMaterial ALUMINIUMARMOR; @EventHandler public void perInit(FMLPreInitializationEvent event) { aluminium = new Item() .setCreativeTab(CreativeTabs.tabMaterials) .setUnlocalizedName("aluminium") .setTextureName("aluminiummod aluminium"); GameRegistry.registerItem(aluminium, "aluminium"); ALUMINIUMARMOR = EnumHelper.addArmorMaterial("ALUMINIUMARMOR", 33, new int[] { 3, 8, 6, 3 }, 10); ALUMINIUMARMOR.customCraftingMaterial = aluminium; helmetAluminium = new ItemAluminiumArmor(0) .setUnlocalizedName("helmetAluminium") .setTextureName("aluminiummod helmetAluminium"); GameRegistry.registerItem(helmetAluminium, "helmetAluminium"); chestPlateAluminium = new ItemAluminiumArmor(1) .setUnlocalizedName("chestPlateAluminium") .setTextureName("aluminiummod chestPlateAluminium"); GameRegistry.registerItem(chestPlateAluminium, "chestPlateAluminium"); leggingsAluminium = new ItemAluminiumArmor(2) .setUnlocalizedName("leggingsAluminium") .setTextureName("aluminiummod leggingsAluminium"); GameRegistry.registerItem(leggingsAluminium, "leggingsAluminium"); bootsAluminium = new ItemAluminiumArmor(3) .setUnlocalizedName("bootsAluminium") .setTextureName("aluminiummod bootsAluminium"); GameRegistry.registerItem(bootsAluminium, "bootsAluminium"); } } ItemAluminiumArmor.java package tutorial.aluminiummod; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; public class ItemAluminiumArmor extends ItemArmor { public ItemAluminiumArmor(int type) { super(AluminiumMod.ALUMINIUMARMOR, 0, type); this.setCreativeTab(CreativeTabs.tabCombat); } @Override public String getArmorTexture(ItemStack itemStack, Entity entity, int slot, String type) { if (this.armorType == 2) { return "aluminiummod textures/models/armor/aluminium_layer_2.png"; } return "aluminiummod textures/models/armor/aluminium_layer_1.png"; } } 解説 ArmorMaterial 防具の性質を保持するためのenum。 Item customCraftingMaterial 金床で修繕するときに使う素材。 EnumHelper ArmorMaterial addArmorMaterial(String name, int durability, int[] reductionAmounts, int enchantability) 新しくアーマーマテリアルを追加するためのメソッド。 引数は順に、アーマーマテリアルの名前・耐久値・部位ごとの防御力・エンチャントの付きやすさ 今回はダイヤモンドと同じ数値を使用。 耐久値は、第二引数で指定された値に、部位ごとにそれぞれ11, 16, 15, 13が乗算される。 防御力は、第三引数に防御力アイコン一個=2として入れる。 例えば、ヘルメット2、チェストプレート4、レギンス2、ブーツ1の防御力にする場合は、 第三引数にnew int[]{4, 8, 4, 2}と渡す。 ItemArmor コンストラクタ(ArmorMaterial material, int renderIndex, int armorType) armorTypeはどの部位かを表す数値。 renderIndexはgetArmorTextureをオーバーライドしているので関係ない。 String getArmorTexture(ItemStack itemStack, Entity entity, int slot, String type) アーマーのモデルのテクスチャファイルの場所を返す。 モデルのテクスチャは、"C /forge/src/main/resources/assets/aluminiummod/textures/models/armor/"に、"aluminium_layer_1.png"、"aluminium_layer_2.png"として保存する。 バニラのものを参考にするとよい。 使用例 オファレンの防具を追加している部分。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /** @author Akasata Nahama */ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String VERSION = "[1.7.10]1.0.0"; /*略*/ /** 最初に行われる処理。アイテム・ブロックの追加などを行う */ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ // アイテムを設定するメソッドを実行 OfalenModItemCore.registerItem(); /*略*/ } /*略*/ } OfalenModItemCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModItemCore { /*略*/ //アーマーの定義 public static Item helmetOfalen; public static Item chestplateOfalen; public static Item leggingsOfalen; public static Item bootsOfalen; /*略*/ /**アイテムを設定する*/ public static void registerItem () { /*略*/ //アーマーの設定 helmetOfalen = new OfalenArmor(OfalenModMaterialCore.OFALENA, 0, 1) .setUnlocalizedName("helmetOfalen") .setTextureName("ofalenmod ofalen_helmet"); GameRegistry.registerItem(helmetOfalen, "helmetOfalen"); chestplateOfalen = new OfalenArmor(OfalenModMaterialCore.OFALENA, 1, 1) .setUnlocalizedName("chestplateOfalen") .setTextureName("ofalenmod ofalen_chestplate"); GameRegistry.registerItem(chestplateOfalen, "chestplateOfalen"); leggingsOfalen = new OfalenArmor(OfalenModMaterialCore.OFALENA, 2, 1) .setUnlocalizedName("leggingsOfalen") .setTextureName("ofalenmod ofalen_leggings"); GameRegistry.registerItem(leggingsOfalen, "leggingsOfalen"); bootsOfalen = new OfalenArmor(OfalenModMaterialCore.OFALENA, 3, 1) .setUnlocalizedName("bootsOfalen") .setTextureName("ofalenmod ofalen_boots"); GameRegistry.registerItem(bootsOfalen, "bootsOfalen"); /*略*/ } } OfalenModMaterialCore.java package nahama.ofalenmod.core; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraftforge.common.util.EnumHelper; public class OfalenModMaterialCore { //ツールマテリアルの定義 public static ToolMaterial OFALENT = EnumHelper.addToolMaterial("OFALENT", 4, 1561, 8.0F, 3.0F, 10); public static ToolMaterial OFALENG2T = EnumHelper.addToolMaterial("OFALENG2T", 4, 3123, 16.0F, 6.0F, 20); public static ToolMaterial OFALENG3T = EnumHelper.addToolMaterial("OFALENG3T", 4, 6247, 32.0F, 12.0F, 40); public static ToolMaterial PERFECTT = EnumHelper.addToolMaterial("PERFECTT", 5, 12495, OfalenModConfigCore.efficiencyPerfectTool, 24.0F, 80); //アーマーマテリアルの定義 public static ArmorMaterial OFALENA = EnumHelper.addArmorMaterial("OFALENA", 33, new int[]{3, 8, 6, 3}, 10); public static ArmorMaterial OFALENG2A = EnumHelper.addArmorMaterial("OFALENG2A", 66, new int[] {3, 8, 6, 3}, 20); public static ArmorMaterial OFALENG3A = EnumHelper.addArmorMaterial("OFALENG3A", 132, new int[] {3, 8, 6, 3}, 40); public static ArmorMaterial PERFECTA = EnumHelper.addArmorMaterial("PERFECTA", 264, new int[] {3, 8, 6, 3}, 80); } OfalenArmor.java package nahama.ofalenmod.item.armor; import nahama.ofalenmod.OfalenModCore; import nahama.ofalenmod.core.OfalenModItemCore; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; public class OfalenArmor extends ItemArmor { private int grade = 0; public OfalenArmor(ArmorMaterial material, int type, int grade) { super(material, 0, type); this.setCreativeTab(OfalenModCore.tabOfalen); this.grade = grade; } /**テクスチャを指定する*/ @Override public String getArmorTexture(ItemStack itemStack, Entity entity, int slot, String type) { int i = 1; if (this.armorType == 2) i = 2; if (this.grade == 4) return "ofalenmod textures/models/armor/ofalen_P_layer_" + i + ".png"; return "ofalenmod textures/models/armor/ofalen_G" + grade + "_layer_" + i + ".png"; } /*略*/ } コメント この項目に関する質問などをどうぞ。 防御力の設定は、どうやるのですか。 - 新人もっだー 2015-12-23 11 41 45 訂正しました。addArmorMaterialの第三引数で、ヘルメット、チェストプレート、レギンス、ブーツの順で登録してください。 - Tom Kate 2015-12-23 14 09 17 一応コメントにて。耐久値を1600に設定していざ動かしてみたら、耐久値が17600になったので、計算してみたところ耐久値は設定されている値に16かけた数値みたいですね。 - 初心者modder 2016-01-20 14 54 07 ご指摘ありがとうございます。コードより確認し、addArmorMaterialの説明部分に追記しておきました。 - 赤砂蛇凪浜 2016-10-10 12 27 46 「ItemStack customCraftingMaterial」にブロックは指定できないのですか? - モアイさん 2016-10-04 19 14 00 返信遅くなり申し訳ありません。記述に間違いがありました。customCraftingMaterialはItem型です。修正しておきます。ブロックを指定する場合、Item.getItemFromBlockメソッドを使用してItem型として代入してください。 - 赤砂蛇凪浜 2016-10-10 12 22 34 「装備していると何かが起こる防具」を作る方法を教えてください。 - あるふぁ 2017-05-25 17 33 50 「何か」とは、具体的にどのようなことでしょうか。Item.onArmorTick(World, EntityPlayer, ItemStack)は、プレイヤーが装備している時に毎tick呼ばれます。ある程度のことはこのメソッドを利用することで実装できると思います。 - 赤砂蛇凪浜 2017-05-26 13 31 31 装備しているmob(プレイヤー)にポーション効果をつけたかったのですが、汎用性を高めるために、わかりにくくしてしまいました。すみません。ともかく、ありがとうございました。 - あるふぁ 2017-05-26 20 34 50 このソースコードをコピペしても金床で修理することが出来ません - 名無しさん 2017-06-11 15 31 00 ご指摘ありがとうございます。ArmorMaterial.customCraftingMaterialへの代入がaluminiumへの代入より先だったため、素材指定ができていませんでした。修正しておきました。ご確認ください。 - 赤砂蛇凪浜 2017-06-16 18 29 15 初心者ですが二日かかっても解決できなかった部分を解決できました。ソースコードを書いてくれた方、本当に感謝しています。ありがとうございます。 - 名無しさん 2017-08-07 09 32 11 上の「装備していると何かが起こる防具」を作る方法を教えてください。 - 名無しさん 2017-09-02 00 30 22 に被ってしまうと思いますが全ての防具スロットに着けているのを確認する方法がわかりません... - 名無しさん 2017-09-02 00 31 07 Item#onArmorTick(World, EntityPlayer, ItemStack)の第二引数を利用します。EntityPlayer#getCurrentArmor(int)を呼び出すと、プレイヤーが装備している防具をItemStackとして取得できます。引数は、3が頭、2が胴、1が脚、0が足になっていますので、ご注意ください。 - 赤砂蛇凪浜 2017-09-03 11 32 17 名前
https://w.atwiki.jp/resha1201/pages/21.html
DQRmod(旧DQM3Nextmod)は、マインクラフトの世界に某ゲームのアイテムやモンスター、職業、魔法などの 新要素を追加するmodです。
https://w.atwiki.jp/aceofspades/pages/28.html
AoSでは、ゲーム用のファイルを編集したり置き替えることによって、ゲーム内のアイテムやプレイヤーキャラクター等の外観を変更することができる。 こうして変更されたゲーム用ファイルを、ここでは「mod」という。「mod」は自分でファイルを編集して作るか、他の人が作ってネット上にアップロードしたものを使うことができる。 modを入れる方法を説明する。 銃ファイルの変更 変更の対象となるファイルの場所は、Aosがインストールされたフォルダにある「kv6」フォルダ(デフォルトでは「C \Ace of Spades\kv6」)である。 注意 変更前にフォルダの中身のバックアップ推奨 銃ファイルを編集する場合、編集ソフト(slab6)が必要 プレイヤー関連のkv6はデフォルトと同じ最大幅でないと認識されないので注意 画像ファイルの変更 変更の対象となるファイルの場所は、AoSがインストールされたフォルダにある「png」フォルダ(デフォルトでは「C \Ace of Spades\png」)である。 注意 変更前にフォルダの中身をバックアップ推奨。 画像を編集する場合、透過画像を扱える画像編集ソフト(GIMP等)が必要。 アイアンサイトの変更 ゲーム中で銃使用時に右クリックすると表示されるアイアンサイト(照準器)の見かけを変更する。 上記フォルダ中の「semi」「smg」「shotgun」という名前のpng画像ファイルを編集するか置き替える(「semi」がライフル用、「smg」がマシンガン用、「shotgun」がショットガン用)。 編集上の注意 画像の座標(400,300)が中心点である。この点が示す方向へ銃弾が放たれる。 画像の「背景」つまり銃身や照準器以外の領域(スコープ型の照準器を描く場合、ガラス部分も)を透過領域にしておく。
https://w.atwiki.jp/xops/pages/23.html
MOD紹介・解説とか テンプレ [名前] [URL] [導入手順] [コメント] [名前]XOPS Addon Downloader [URL]http //www15.atwiki.jp/xops?cmd=upload act=open pageid=23 file=addon+downloader_3.zip [導入手順]中に入っている説明書を参照 [コメント]アドオンミッションを公開している場所のリストを作るソフトです うん、MODではないんだ。済まない(´・ω・`) [名前]ADDdata20070110 [URL]http //www15.atwiki.jp/xops?cmd=upload act=open pageid=23 file=ADDdata20070110.zip [導入手順]中に入っている説明書を参照 [コメント]XOPS Addon Downloader用のミッションデータ。07/01/10版
https://w.atwiki.jp/mineminemagic/pages/16.html
導入しているModのフォーラムに飛べます。()内は現在導入しているバージョンです。 クライアント&サーバー両方に導入する必要があるMod MinecraftForge(1.4.7-6.6.0.518) MinecraftForge AllVersion MinecraftIM (v2.2b) SignFix(forge6.5.0.467)←同フォーラム BitmapFont(1.1.3_forMC1.4.7) IndustrialCraft2(1.115.207) Advanced Machines(4.7b) Advanced Power Management(1.1.55-IC2_1.112) AtomicStryker's Power Converters(1.4.1) IC2 Backpack HUD(v2.3 - MC 1.4.6) QuantumPack(1.06) IronChest(1.4.7-5.0.0.228) BuildCraft(3.4.3) Additional Pipes(2.1.2-1.4.7) AtomicStryker's Minefactory Reloaded(1.6.7) Valve Pipe(1.4.7-2013/01/27付) RedPower2(2.0pr6) RailCraft(1.4.7-6.17.0.0) Flan's Mod(2.1.1 for Minecraft 1.4.7) ContentPack:Simple Parts Pack(1.1.0 for Flans Mod 2.1) ContentPack:World War Two Pack(1.1.0 for Flans Mod 2.1) ContentPack:Modern Weapons Pack(1.1.0 for Flans Mod 2.1) Mo'Creatures(v4.5.1) CustomMobSpawner(1.11) GuiAPI(0.15.2-1.4.6) CobbleStoneFuel(1.4.6) BackPack(1.5.7-1.4.6) CraftGuide(1.6.5.12) WirelessRedstone(v1.6.1) TreeCapitator(1.4.6.r06) クライアントのみで導入するMod OptiFine(1.4.6_HD_U_D5) OptiFine日本語化(1.4.6_HD_U_B2_jpLocalize) MCPatcher HD fix(2.4.5_02) IDChecker(1.4.6) Rei's Minimap(v3.2_06) MAtmos(r21__1_4_6) Matmos expansion(1.35) Audiotori(r3__1_4_6) Tooltip Plus(v2.3.2.10) ConvenientInventory(2.9) Minecraft ControlPack(5.6)
https://w.atwiki.jp/akasatanahama/pages/86.html
もし宜しければ他のmodのアイテムを使ったレシピの追加方法も教えて頂けませんでしょうか? - 名無しさん 2015-06-30 19 00 52ご意見ありがとうございます。現在追加予定です。 - TomKate 2015-07-01 16 29 41先ほど、他MODのアイテム取得のチュートリアルを掲載いたしました。 - Tom Kate 2015-07-01 18 47 11 特殊な形のブロックを作る場合はどうしたらよろしいのでしょうか。可能であれば教えて下さい。 - Modding 2015-07-04 14 54 30ご意見ありがとうございます。現在追加予定です。 - Tom Kate 2015-07-05 12 21 02ありがとうございます。 - # 2015-07-05 14 39 37 追加させていただきました。 - Tom Kate 2015-07-08 21 24 38 GUIの追加方法を教えてください。 - R 2015-07-04 20 18 50ご意見ありがとうございます。今後、「上級編」にて紹介する可能性がありますので、しばらくお待ちください。 - Tom Kate 2015-07-05 12 21 57 「GUIの実装」を作成しました。遅くなってしまい申し訳ございません。 - 赤砂蛇凪浜 2015-12-18 18 40 12 骨粉などの農業系の追加法を教えていただけないでしょうか? - 名無しさん 2015-07-07 19 40 10ご意見ありがとうございます。「木・作物の追加」を追加予定です。 - 赤砂蛇凪浜 2015-07-07 20 00 09 遅くなりましたが、「木の追加」を作成しました。骨粉はIGrowableを実装すれば対応できますが、今後「植物の追加」も作成予定です。 - 赤砂蛇凪浜 2015-12-17 07 47 45 作物の追加を作成しました。 - 赤砂蛇凪浜 2017-01-24 19 49 20 この会話はコメント/トップページに移動しました。 この会話はコメント/MOD製作チュートリアル/ツール類の追加に移動しました。 「MOD製作チュートリアル」をもっと更新していただけませんか? - 名無しさん 2015-11-07 23 31 18更新が滞っていてすみません。MODの更新で手一杯な状況です。MOD更新直後などのタイミングで一気にチュートリアルの更新ができるかと思いますので、もうしばらくお待ちください。 - 赤砂蛇凪浜 2015-11-11 20 14 34 Mobの追加方法を教えてくださいますか? - 名無しさん 2015-12-06 16 11 45ご意見ありがとうございます。今年中に更新したいと思いますのでもうしばらくお待ちください。 - Tom Kate 2015-12-06 17 07 01 ここのMOD講座がわかりやすくて助かります。建材MODを作るとして、階段、半ブロック、フェンス、ゲート、壁、ガラス、ガラス板などを、16個のテクスチャーからメタデータを使って追加するチュートリアルがあると非常にありがたいです - 名無しさん 2015-12-10 21 08 49ご意見ありがとうございます。返信が遅れてしまいすみません。少なくとも階段・ハーフブロックは方向をメタデータを利用して保持しているので、一つのIDで16個追加するのは無理かと思われます。私自身が半ブロック・フェンス・ゲート・壁・ガラス板の実装をやったことがないので、BFOの製作などで技術を身につけてからになりますが、それでよろしければチュートリアルを追加します。 - 赤砂蛇凪浜 2015-12-16 13 00 59返答感謝。メタデータで方向を管理していたんですね。BFO楽しみにしてます。 - 名無しさん 2015-12-20 02 12 33 プレイヤーにダメージを与えたり燃やしたりする方法のチュートリアルを作っていただけないでしょうか。 - 新人もっだー 2016-01-17 15 38 01わかりました。今後追加します。少し遅くなるかもしれません。少々お待ちください。 - 赤砂蛇凪浜 2016-01-18 18 38 30 既存クラスの書き換えの方法を教えていただけないでしょうか。 - World_of_the_Takumi 2016-02-11 15 09 38私自身、既存クラスの書き換えをやったことがないため、チュートリアルを作成することができません。今後、もし使うことがあればその際に追加します。申し訳ございません。 - 赤砂蛇凪浜 2016-02-11 20 06 00返信ありがとうございます。自分で頑張ってみようと思います。 - World_of_the_Takumi 2016-02-12 07 43 03 実績の追加と、作物の追加を教えてくださいますか? - 88taishi88 2016-04-10 14 06 51コメントありがとうございます。現在、管理人がどちらも多忙なため、今暫くお待ちください。申し訳ありません。 - Tom Kate 2016-04-10 22 21 10返信ありがとうございます。そうですか・・・ 頑張ってください!待ってます - 88taishi88 2016-04-11 17 08 17 追加いたしました。 - Tom Kate 2016-12-11 08 15 47 作物の追加を作成しました。 - 赤砂蛇凪浜 2017-01-24 19 49 20 1.8以降のテクスチャ指定方法を解説をしていただきたいです - 名無しさん 2016-05-05 11 43 071.8以降のチュートリアルも準備中です。今しばらくお待ちください。 - Tom Kate 2016-08-14 23 20 16 TileEntintyの追加を押したら木の追加に飛ばされるんですが・・・ - 名無しさん 2016-08-14 18 37 20ご報告ありがとうございます。修正いたしました。 - Tom Kate 2016-08-14 23 20 38 新しい独自の魚を追加する方法、できれば教えてください - 名無しさん 2016-09-10 21 06 54コメントありがとうございます。私達がやったことがないため、チュートリアルの作成ができません。申し訳ありません。 - 赤砂蛇凪浜 2016-09-17 14 06 50わかりました。返信ありがとうございます。 - 名無しさん 2016-09-17 17 54 48 お久しぶりです。よろしければ、サウンドの追加などを解説してもらえますか。 - hrt1534 2016-09-20 00 35 56次のオファレンMODのバージョンアップで挑戦してみようと思っていました。成功したら作成しますので、しばらくお待ちください。誤爆のようですので一部コメントアウトしておきますね。 - 赤砂蛇凪浜 2016-09-22 11 30 15分かりました。ありがとうございます。 - hrt1534 2016-09-24 22 56 55 もしよろしければ村人の追加なども解説していただけませんか? - aaaa 2016-12-06 19 45 50追加しました。このような内容でよろしかったでしょうか? - Tom Kate 2016-12-12 22 45 31 すみません、よろしければ爆発の処理なども解説していただけないでしょうか? - PPAP 2016-12-30 00 59 39「イベントの活用」チュートリアルで解説予定です。 - Tom Kate 2016-12-30 18 08 53ありがとうございます - 名無しさん 2016-12-30 20 38 39追加しました。 - Tom Kate 2017-05-27 11 31 41 コンフィグの生成方法のチュートリアル作ってくださいませんか? - shu_hrg 2016-12-30 11 55 48今後追加したいと思います。 - Tom Kate 2016-12-30 18 09 23 作成しました。 - 赤砂蛇凪浜 2017-01-30 18 40 53 弓の追加の仕方を教えてください - 名無しさん 2017-01-22 15 36 27 アイテムの追加を参考に、追加するItemにItemBowを継承したクラスを渡して下さい。テクスチャの変更方法等もItemBowを参照すればわかると思います。また何かありましたら、ご質問下さい。 - Tom Kate 2017-01-22 20 52 29強さ(飛距離や攻撃力)を変えるにはどうすればいいでしょうか? - 名無しさん 2017-01-23 16 10 17 エンチャント追加の方法を教えてください。modding wikiのほうにもあったのですがバージョンが違うせいかインポート文の時点でエラーが出てしまいました。 - 名無しさん 2017-01-28 10 01 50 新しいエンチャントの追加です。わかりにくくてすいません。 - 名無しさん 2017-01-28 10 03 36 解決しました。 - 名無しさん 2017-02-06 18 43 08 バイオームとディメンションの追加の仕方を教えてください。 - mod初心者 2017-02-08 19 13 13 教えてくださいというか、解説してくださいですね。分かりにくくてすいません。 - mod初心者 2017-02-11 09 35 33 ご意見ありがとうございます。上級編に解説を作成予定です。 - 赤砂蛇凪浜 2017-02-11 18 44 56 ありがとうございます! - mod初心者 2017-02-11 22 58 34 新しいゲージ(体力ゲージのような)の追加のチュートリアルの追加をしてみたらどうですか? - 参考になっております。 2017-04-05 21 58 33 すみません。わかにくいですね、 □□□□□□□□□□ ♥♥♥♥♥♥♥♥♥♥ □□□□□□□□□□ こんな感じで水のゲージ(ステータス(?))を追加するチュートリアルはどうでしょうか? - 参考になっております。 2017-04-09 10 58 13 左の四角が水、右のしかくが肉です。(肉のゲージの上に水のゲージが来るようなイメージで、) - 参考になっております。 2017-04-09 11 03 45 ご意見ありがとうございます。私もTom Kate氏も挑戦したことがありませんので、チュートリアルの作成ができません。もし今後、ゲージ追加に成功した場合は、チュートリアルを作成したいと思います。 - 赤砂蛇凪浜 2017-04-09 18 53 12 ご回答ありがとうございます。そうですか…mod制作頑張ってください。 - 参考になっております。 2017-04-10 22 01 40 この会話はコメント/MOD製作チュートリアル/ツール類の追加/コメントログに移動しました。 独自のクラフトシステムと作業台を追加するにはどうすればいいのですか? - 名無しさん 2017-05-20 23 18 06 私もTom Kate氏も挑戦したことがありませんので、チュートリアルの作成ができません。もし今後、成功した場合は、チュートリアルを作成したいと思います。 - 赤砂蛇凪浜 2017-05-22 19 22 55 cliantからtileentityを同期させる方法の解説をお願いしたいです - anatawa12 2017-05-21 16 35 25 GUIを開いている時に開いているプレイヤーのみに対してであれば、ContainerクラスにあるdetectAndSendChangesなどの一連のメソッドが利用できます。また、かまどなどのように、いくつか(16種類まで)の状態を切り替えるだけであれば、メタデータを利用することができます。テクスチャへの反映などで常時、詳しいデータの同期が必要な場合は、独自にパケットを追加する必要があると思われます。チュートリアル「パケットの追加」は今後作成する予定です。 - 赤砂蛇凪浜 2017-05-22 19 30 28 moddingの時によくこのサイトを拝見させていただくのですが、私だけかもしれませんが突然文字化け?のようなことが起こり一部のチュートリアルが閲覧できませんでした。ご時間ありましたら、対処をお願いします。長文失礼しました。 - 名無しさん 2017-07-31 23 51 44 例えば、「アイテムの追加」が、以下のようになっていたりします。 - 名無しさん 2017-07-31 23 54 17 span style="color #a1a100;" import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "AluminiumMod""Aluminium Mod", version = "1.0.0"//追加するアイテムの宣言 //Itemのインスタンスを生成し、代入する。 //クリエイティブタブの登録 //システム名の登録 "aluminium") //テクスチャ名の登録 "aluminiummod aluminium"); //GameRegistryへの登録 "aluminium"); } } - 名無しさん 2017-07-31 23 54 31 よく拝見させていただきます。私も同じですー(汗 対処方お願いいたします。 - ad2y 2017-08-02 21 41 15 ご迷惑をおかけしております。@wikiのプラグインの不具合と思われます。トップページのお知らせを更新しましたので、ご覧ください。 - 赤砂蛇凪浜 2017-08-03 11 58 10 正常に表示されております。ありがとうございました。 - ad2y 2017-08-05 06 11 12 エフェクトの追加の仕方を教えてください。 - 名無しさん 2017-08-13 01 16 42 ご意見有難うございます。記事追加は赤砂蛇凪浜と話し合って何をやるか決めますので、検討いたします。 - Tom Kate 2017-08-13 23 13 27 わかりました。 - 名無しさん 2017-08-14 02 19 18 「エフェクト」とは何を指していますか?ポーション効果や、パーティクル、サウンドなどかと思いましたので、それぞれについてお伝えします。ポーション効果かサウンドでしたら、解説を作成予定です。パーティクルは私たちに技術がないため解説できません。返信いただけるとありがたいです。 - 赤砂蛇凪浜 (2017-08-18 10 32 40) ポーション効果です。 - 名無しさん (2017-08-18 18 31 50) オファレン変換機やオファレン製錬機の様な新しいレシピシステムを追加するチュートリアルを作っては頂けないでしょうか。 - 名無しさん 2017-09-16 16 15 49 できれば鉱石辞書にも対応していただけるとありがたいです。 - 名無しさん 2017-09-16 17 49 48 ご意見ありがとうございます。今後、解説を作成したいと思います。 - 赤砂蛇凪浜 2017-09-16 18 25 38 有難うございます - 名無しさん 2017-09-17 09 01 36 素材や完成品を2つ以上にすることも可能でしょうか。できるのであれば、そのチュートリアルも作って頂けないでしょうか。 - 名無しさん 2017-09-18 15 33 22 わかりました。ページを分けるかどうかは作成の際に検討したいと思います。 - 赤砂蛇凪浜 2017-09-21 16 40 47 基本事項のGradleのとこがコンパイラとなってますが、ビルドシステムのほうが正しいと思います - anatawa12 2017-10-11 21 03 11 ご指摘ありがとうございます。修正しました。 - 赤砂蛇凪浜 2017-10-12 16 31 19
https://w.atwiki.jp/skyrim_mod/pages/23.html
スクリプトmod製作過程 スクリプトを使ったmodの製作過程を一から纏めてみました。 トライ&エラーで修正しつつmodの作成を目指します。 言語としてのpapyrusの説明は最小限に留めています。 ifとwhileしかない言語なのでそれ自体はそんなに難しくはないですので。 どんなmodを作るか考える。 仕組みを考える CKの作業1Skyrim.esmの読み込み オブジェクト(Object) スクリプト(Script)1繰り返し処理をする 攻撃対象の取得 Onhitを使う1 イベント(Event) 再検討 スペル(Spell) CKの作業2マジックエフェクト(Magic Effect)の作成 既存のエフェクトを複製 既存のスペルを複製 現状確認 スクリプト(Script)2スペルをプレゼントする プロパティ(Property) aaaBundoriTargetスクリプト完成 スクリプト(Script)3イベント ぶんどり発動条件 定義 アイテムの選定 ぶんどる 完成?! 不満点服を着てしまうぞ!フザケンな。 ぶんどり100%ないわー もうちょっと演出をなんとかしてくれ 不意打ちでぶんどる出来ない 更新はないの? どんなmodを作るか考える。 おぼろげに"こんなモノ"が欲しいと考えるのは簡単なのですが、その"こんなモノ"を形にするのはとても大変です。 今回は、かの有名な国産RPGの一つのアビリティからアイデアを頂戴して"ぶんどる"を作ることにします。 実際にskyrimで作れるのかどうかが心配です… 仕組みを考える ここにある関数を使って作っていきますが、ある意味で一番大変であり重要な所です。 "こんなモノ"をどのようにすればskyrimのmodとして形にできるのでしょう? とりあえず"ぶんどる"を作るには、どのような処理をするのかを考えます。 プレイヤーの「攻撃対象を取得」して「攻撃を当てた時」に、対象の「手持ちアイテム」を「盗む」 なんとなくコレで出来そうです。 では、上記のURLでそれっぽい物を探します。 ※適当に検索等で探しています 攻撃対象を取得 → GetCombatTarget 攻撃を当てた時 → OnHit 手持ちアイテム → GetNumItems 盗む → RemoveItem 探した結果、出来そうな物が揃っていましたので難しいことをしないでも可能なようです。 早速、作り始めることにします。 今回のようにスクリプトで何が出来て何が出来ないのかを 事前に判断できれば良いのですが、始めての人には難しいと思います。 作りたいものが出来たら兎に角作ってみましょう。 CKの作業1 Skyrim.esmの読み込み まずはCKを起動します。 CKウィンドウの左上にあるFile→Dataと選んだあとskyrim.esmをダブルクリックしてチェックを入れてOKボタンを押します。 エラー表示は[キャンセル]を押してください。 これでskyrimの世界を読み込んだ状態になりました。 これから変更を加えた場合、skyrimの"何か"を変更することになりますが マスターファイル(esm)自体は追加・編集をする事が出来ませんので安心してください。 保存をする場合は"何か"の部分を上書きするプラグイン(esp)を作ることになります。 オブジェクト(Object) 攻撃対象を取得するのにGetCombatTargetを使うことにしていますが スクリプトは何らかのオブジェクトにくっつけて動作する必要があります。 例えば、ゲーム開始時に自動で"Hello World"と文字を出そうとした場合は 「スクリプトをquestに付けて、そのquestをスタートさせた時に文字を出す」 「プレイヤーにスクリプトを付けて、ゲームに読み込まれた時に文字を出す」 といった形になります。本であれ魔法であれクエストであれ とにかく何かに付ける事で動かす事が出来ると覚えてください。 今回はプレイヤーの攻撃対象を取得するのですから"Player"に付ける事にします。 { ※この説明ではスクリプトを直接Playerに付けていますが、この方法は現在はほぼ使われていません。 新規QuestのReferenceAliasでPlayerを指定。スクリプトをAliasに張り付ける手法が一般的です。 } 画面左にある"object window"の上のあるFilterに"player"と入れて マウスでActorを選択すれば"Player"を発見できるはずです。 ダブルクリップで開き、Actor window左側にあるScriptsの"Add"を押します。 出てきたscript windowの上段の"[New File]"を押せば 新しいスクリプトをくっ付ける事が出来ます。 スクリプトの名前を決めるwindowが出てきました。 今回は"aaaBundoriTarget"とでもしておきます。 他はとりあえずそのままでおkです。 aaa等を付けることでfilterが使いやすくなります。 スクリプトはオブジェクトに付いたので一度保存しておきます。 Actor windowの左下の[OK]を押して、閉じてください。 保存をするためには、開いたwindowは閉じて置かなければいけません。 CKのメニューバーFile→Saveと選んで"BundoriTutorial"と名前を入力しました。 先ほど閉じた"Player"を再度開きます。 "aaaBundoriTarget"がScriptとして追加されていますが、"aaaBundoriTarget"の所で右クリックするとメニューが出てくるので、"Edit Source"を選びます。 ※その下の"Open in External Editor"を選ぶとpscファイルに関連付けされたテキストエディタで編集することができます。 スクリプト(Script)1 今回、私が考えているスクリプトはこのような感じです。 1 繰り返し処理をする 2 プレイヤーの攻撃対象を取得する 3 攻撃対象に攻撃を与えたか確認する 4 確認できたら何を持っているか確認する 5 ランダムで選んだアイテムをプレイヤーに移動する 6 1にもどる では順番にやっていきましょう。 繰り返し処理をする 繰り返し処理に関してはこのwikiの逆引きリファレンスの中にある常時稼動させるスクリプトを参考にします。 実際の処理の部分を置き換えればそのまま使えそうです。 攻撃対象の取得 ck wikiのGetCombatTargetのページを開きます。 細かい仕様は後に回しましょう。用があるのはExamplesです。 素晴らしいことに必要であるプレイヤーの攻撃対象を取得するサンプルがありました。 これをそのまま使います。 先ほどの繰り返し処理と併せてこのような感じになっています。 ここで一度スクリプトを保存します。Edit windowのFile→Save(ctrl+S)です。 これで攻撃対象の取得を一秒ごとに繰り返すはず… ところが…なにやらエラーらしきものが出てしまいました。 [いいえ]を押して修正をします。 下段に理由がかいてありますが、8行目のTargetRefが指定されていないのが問題のようです。 c \...\aaaBundoriTarget.psc(8,1) variable TargetRef is undefined c \...\aaaBundoriTarget.psc(8,1) type mismatch while assigning to a none (cast missing or types unrelated) 8行目という事はGetCombatTargetの部分なのでGetCombatTargetのページに戻ります。。 答えはSyntaxにありました。 赤丸がついた所、Functionの前にActorと書いてあります。 これはGetCombatTargetがActor型で返すと言うことなので、8行目のTargetRefはActor型でなければいけません。 TargetRefの頭にActorと付けて指定することで無事に成功しました。 Onhitを使う1 先ほどと同じようにOnHitのページを開きます。 とりあえずはExamplesからなのですが…先ほどとは少し違います。 どうやら、OnHitはFunctionではなく"Event"のようです… イベント(Event) "Event"はスクリプトを動かす為のトリガーです。 本を読むとOnReadが、扉を開くとOnOpenのイベントが起こります。 ですが重要な事は、その動作を受け取ったオブジェクトに対してイベントが起こる事です。 上記の例の場合、OnReadのイベントが起こるのは本のオブジェクトであり、本を読んだ人には起こりません。 極稀な一部のイベントを除いて、ほぼ全てのイベントは受動の為、慣れるまではイライラすると思います。 今回の場合、OnHitは攻撃対象(TargetRef)に起こり、Playerには起こりません。 再検討 当初の予定のままでは駄目なようなので予定を変更することにしました。 現在作った部分はそのままに再検討しています。 その時に書いたメモはこんな感じです 手書きのものを画像で作りなおしてはいますが、だいたいこのような感じです。 修正案では先ほどの物とは別のスクリプトを用意しようとしています。 攻撃対象は特定されていない今回の場合はどのようにすれば良いのでしょう? 今回は攻撃対象にスクリプトを動的にくっつける為に"Spell"を使う事にします。 スペル(Spell) スペルは様々な"Magic Effect"を組み合わせたもので、アビリティ・病気・パワー・呪文・スクロール・シャウト等全てスペルの一つです。 明かりの魔法のように "Spell - MagicEffect" が一対になっているものもあれば、術者のレベルで使用するMagicEffectを変えるもの、雷の魔法のようにダメージ+麻痺にする物もあります。 とりあえず、スペルにはMagic Effectが必要だと覚えてください。 SpellやMagic Effectの細かい部分はCK wikiのここが一番詳しいです。 CKの作業2 マジックエフェクト(Magic Effect)の作成 まずはぶんどりスペルのマジックエフェクト部分から作ります。 最初のうちは新規に作るよりも間違いが少なく良いと思います 既存のエフェクトを複製 複製と言っても適当な物を選んでしまっていいのでしょうか? 今回は"abGhost"を事前に選んでおきました。 理由として アビリティである。 ビジュアルエフェクトがついている。 このエフェクトを単独で使っているスペルがある。 があります。 フィルターに "abg" と入力すれば"abGhost"が見つかるので開いてください。 開いたら左上にあるIDとNameをそれぞれ"aaaBundoriOnhit","Bundori Onhit"に変更します。 次に画面左側のFlagsの中の"No Hit Effect"にチェックを入れてください。 これにチェックを入れるとvisual effectを無視します。 逆に効果が出ているか確認したい時はチェックを外します。 また、右下の"Papyrus Scrips"にある"magicsetActorAlphaScript"は不要なので削除しておきました。 選択して右側のRemoveボタンを押してください。 代わりに2個目の自作スクリプト"aaaBundoriOnHit"を新規作成して付けておきます。 とりあえず今は付けておくだけです。 最後に下の方にある[OK]を押します。 勝手にIDを変更した為に確認のダイアログが出てきますが、既存エフェクトを元にして新規作成したいので[OK]を押します。 これで"abGhost"を元にしたマジックエフェクト"aaaBundoriOnhit"を作りました。 既存のスペルを複製 次はスペルなのですが既存スペルに"abGhostを使っている物があります。 せっかくなのでそちらのスペルも使わせていただきました。 abGhostを右クリックして一番下 "Use Info" を開きます。 このリポートは今後よく使う事になると思います。とても便利。 ※ここから使用されている物・所が一覧で参照できる このリポートからも直接スペルを開く事が出来ます。 前回と同じようにID,Nameを変えた後、今回は右側のエフェクト"Ghost Visuals"も変更しておきます。 右クリックしてEditを選んでください。ダブルクリックでも良いです。 "Ghost Visuals"は"abGhost"の事なので、今回作った"Bundori Onhit"に変更しておきます。 ID順に並んでいるのでaaaを付けている事で一番上にありました。 後はそのまま変更しないで問題ありません。 現状確認 予定通りにスペルをつくりました。 これで後はスクリプトの完成を目指すだけになりました。 Category ID Script Actor Player aaaBundoriTarget Magic Effect aaaBundoriOnhit aaaBundoriOnhit Spell aaaBundoriAbility ところで別々のオブジェクトにスクリプトが付いた事でCKでの作業がしづらくなりました。 毎回、フィルターを切り替えても良いのですがもっと簡単に出来る方法があります。 object windowの右側、一覧部分の適当な部分で右クリックをして出てくるメニューから"Create New Object Window"を選ぶと 新しいObject windowが出てきます。 これを使えばPlayerとaaaの2つのフィルターを同時に使う事が出来るので非常に便利です。 ※こんな感じで同時に出しておくことが出来る スクリプト(Script)2 スペルをプレゼントする 現状確認の項で見た通りPlayerについている"aaaBundoriTarget"は現状対象の取得だけ行なっています。 これに先ほど作ったスペルをプレゼントする部分を追加します。 GetCombatTargetの行の後に次のように加えました。 Actor TargetRef = Game.GetPlayer().GetCombatTarget() if TargetRef != none TargetRef.AddSpell(aaaBundoriAbility) endif TargetRefが空じゃない場合、先ほど作った"aaaBundoriAbility"をTargetRefに与えると言うもの。 ですが、これを保存しようとするとやっぱりエラーが出ました。 aaaBundoriAbilityの未定義エラー…スクリプトにはCKにあるIDを直接書いても駄目なようです。 存在するスペルをスクリプト内で使う為には"Property"を使って指定してあげる必要があります。 今回は[はい]を選び、スクリプトはその状態のまま保存して"Property"の定義を行います。 プロパティ(Property) プロパティは外部(主にCK)からオブジェクトや変数を指定したい場合に使います。 面倒くさいように感じますがプロパティがある事で汎用性のあるスクリプト作成が可能になります。 "Player"のScriptsから"Properties"を選びます。 Add Propartyを選び、更にtypeを指定(今回はSpell)。 今回は汎用スクリプトではありませんので"aaaBundoriAbility"としておきます。 IDと同じにすると自動的で割り当ててくれますが、ちゃんと指定されていることも確認します。 これで"aaaBundoriAbility"の定義が出来ました。 もう一度"Edit Source"を開き保存をしてください。 今度はエラーも無く成功しました。 aaaBundoriTargetスクリプト完成 一つ目のスクリプトが完成しました。 この状態でCKの保存をしましょう。 Scriptname aaaBundoriTarget extends ObjectReference Event Oninit() RegisterForSingleUpdate(1) EndEvent Event OnUpdate() Actor TargetRef = Game.GetPlayer().GetCombatTarget() if TargetRef != none TargetRef.AddSpell(aaaBundoriAbility) endif RegisterForSingleUpdate(1) EndEvent SPELL Property aaaBundoriAbility Auto スクリプト(Script)3 最後にもう一つのスクリプトを作りました。 こちらのスクリプトに関しては作成済みのものを使い、簡単にを説明していきます。 Scriptname aaaBundoriOnhit extends ActiveMagicEffect Event OnHit(ObjectReference akAggressor,Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) if akAggressor != Game.Getplayer() return elseif akSource as Spell return elseif akProjectile != none return endif Actor targetRef = GetTargetActor() int index = targetRef.GetNumItems() form akForm if index 1 int random = Utility.RandomInt(1, index) akForm = targetRef.GetNthForm(random) elseif index == 1 akForm = targetRef.GetNthForm(index) endif if akForm != none targetRef.RemoveItem(akForm,1,false,Game.GetPlayer()) endif EndEvent イベント Event OnHit(ObjectReference akAggressor,Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) ぶんどり発動条件 if akAggressor != Game.Getplayer() return elseif akSource as Spell return elseif akProjectile != none return endif 違った場合Returnを返して処理を終了させています。 上から順に プレイヤーの攻撃ではない場合 魔法で攻撃をしている場合 飛び道具で攻撃している場合 となります。 現在はプレイヤーの攻撃にしか反応しないようになっています。 modを拡張しようとした場合、条件の緩和や追加なども考えられます。 定義 Actor targetRef = GetTargetActor() int index = targetRef.GetNumItems() form akForm このイベント内で使用する変数を用意しています。 一行目、GetTargetActor()は本来 "MagicEffectProperty.GetTargetActor()"と言うようにしなければいけませんが、省略した場合予約語selfが指定されたことになります。 この場合のSelfはMagic Effectの"aaaBundoriOhHit"を指していますが、この事はスクリプトの一行目にあるScriptnameのextendsで何を拡張するスクリプトなのか宣言されています。 Scriptname aaaBundoriOnhit extends ActiveMagicEffect もちろん self.GetTargetActor()と言うようにしても構いません。 二行目、GetNumItems()はSKSEを使った拡張関数でコンテナ(宝箱)のアイテム種類の数を返します。 その為、ぶんどりmodはSKSEが必須となっています。 アイテムの選定 if index 1 int random = Utility.RandomInt(1, index) akForm = targetRef.GetNthForm(random) elseif index == 1 akForm = targetRef.GetNthForm(index) endif アイテムの種類数が二個以上あればランダムで、一個ならそれをakFormにしています。 現在akFormは全てのアイテムの内の何かと同じオブジェクトを指していることになります。 同じものですがそのもの自体ではありません。 ぶんどる if akForm != none targetRef.RemoveItem(akForm,1,false,Game.GetPlayer()) endif 最後にプレイヤーに向けてアイテムを移動します。 完成?! ついに完成?!しました。早速動かしてみましょう。 なんだかアレなmodが出来た気もします。しかし夢が広がりそうでもあります。 とりあえずは脱が…ぶんどる事が出来ましたので良しとしましょう。 出来た物はここを置いておきます。 不満点 ここからはこのmodの問題点・不満な所をあげて、改善案が思いつくのなら考えていきたいと思います。 服を着てしまうぞ!フザケンな。 modとしての動作は問題ないのですがスカイリムの仕様のために、完全に装備を外してしまうと何処からか鎧・服を持ちだしてきて着てしまいます。 靴は対象外にする等の処理を加えるか、鎧を取った後にぶんどれない透明な服を着せるとか少し考えなければいけません。 でもやっぱ足元だけ残ってるのがロマンだと思う。 ぶんどり100%ないわー 現在は攻撃が当たったらすぐにアイテムを剥ぎに行っていますがFFの「ぶんどる」はランダムです。 元々の確率を低くして、敵の体力に比例して確率が上がっていくような処理を加えても良いかも知れません。 もうちょっと演出をなんとかしてくれ いきなり取ってしまうのでもう少しなにかあっても良いですね。 ぶんどったものはその場に散乱するとかあっても良いのかな? …今考えたら過剰演出かも知れません。 不意打ちでぶんどる出来ない 対象のreferece取得が簡単で分かりやすいのでGetTargetActorを使いましたが、本当はスペルをプレゼントする相手は攻撃対象じゃなくても構わないです。 攻撃前にスペルをプレゼントする仕組みを考えれば可能です。 少し冗長になるので今回は簡単な方を選びました。 更新はないの? ありません。権利等全てフリーなmodです。 更新したいと思った人が引き継いで結構です。 出来たら更新した部分と手法をwikiに反映して欲しいです
https://w.atwiki.jp/callofduty4pc/pages/98.html
● Call of Duty 4 Map and Mod Tools v1.1 (604MB/画像/動画/08.1.19更新) CoD4のModと、シングル、マルチのカスタムマップ作成を支援するための公式ツール集です。 ・ 現在のところ英語のみのサポート ・ XP互換モードでの動作報告はあるが、基本的にVistaでの動作は不可 ・ パッチ済みのCoD4、Shader3.0対応のDX9ビデオカード、NET Framework Ver2.0以上が必要 導入 : DLして解凍した中身を「Call of Duty 4 - Modern Warfare」フォルダに展開して、 コンパイルツール (\bin\CoD4CompileTools\ CoD4CompileTools.exe) と Modビルダー (\bin\MoDBuilder.exe) のショートカットを任意の場所に作成します。 http //www.infinityward.com/wiki/index.php?title=Mod_Tools_Download_and_Revision_History Call of Duty 4 Mod Tools Wiki (本家・英語) : http //www.infinityward.com/wiki/ Call of Duty 4 Mod Tools 日本語 Community Wiki : http //www13.atwiki.jp/cod4mod/ *) Modツールを使用するには、CoD4フォルダ下に多数のフォルダを展開する必要があります。 使う当てのない人は入れないほうがいいかも。 Modの導入方法 <シングルプレイModの場合> 1) ダウンロードしたファイルを解凍し、その中にある拡張子 ”****.iwd” ファイルなどが入っているフォルダ ”mymod (仮名)” をまるごと、CoD4をインストールした場所にある以下のフォルダ内にコピーします。 ~\Program Files\Activision\Call of Duty 4 - Modern Warfare\Mods Modファイルが ”****.iwd” のみの場合は、”Mods” フォルダ下に”mymod (仮名/任意の名前でよい)” フォルダを新規作成するか、現在使用しているModのフォルダに一緒に入れてください。 2) CoD4シングルプレイのショートカット (”iw3sp.exe” のショートカット) を右クリック → ”プロパティ” → ”リンク先(T)” の文末に以下の命令文を追加します。 ~\Call of Duty 4 - Modern Warfare\iw3sp.exe" +set fs_game mods/mymod 3) 2)で作成したショートカットから起動すると、”mymod” フォルダ内のModがプレイに反映されます。 複数のModを同時に使用する場合は、使いたいModの ”iwd” ファイルを ” +set fs_game mods/” で指定した1つのModフォルダにまとめて入れて下さい。 4) Modを外す時は、該当Modの ”iwd” ファイルを ”mymod” フォルダから除去するか、”mymod” フォルダ 自体を削除してください。 <マルチプレイModの場合> 1) シングルプレイModと同じ手順で、”Mods” フォルダ下に各Mod用のフォルダをコピーします。 2) CoD4マルチプレイのショートカット (”iw3mp.exe” のショートカット) を右クリック → ”プロパティ” → ”リンク先” の文末に以下の命令文を追加します。 ~\Call of Duty 4 - Modern Warfare\iw3mp.exe" +set fs_game mods/mymod 3) またはCoD4マルチプレイを起動し、メニュー画面の ”Mods” から適用したいModのフォルダを選択して ”Launch” を押します。 適用されているModを外すには ”Mods” → ”Launch without Mod” を選択します。 <カスタムMAPの場合> 1) ダウンロードしたファイルを解凍し、その中の”****.iwd”や”****.ff”ファイルなどが入っているMAP名の フォルダ ”mp_mymap (仮名)” を、CoD4をインストールした場所にある以下のフォルダ内にコピーします。 ~\Program Files\Activision\Call of Duty 4 - Modern Warfare\usermaps ”usermaps”フォルダがない場合は新規に作成してください。 2) 1)と同じMAPを導入しているマルチプレイサーバーに接続してプレイします。 3) 一人で導入済みのMAPを探索したいときは、CoD4マルチプレイを起動し、メニュー画面から ”Mods” → ”ModWarfare” を選択して ”Launch” を押します。 4) メニュー画面でコンソール(Ctrl+半角/全角キー)を開いて、”map mp_mymap” と入力します。 *) コンソールに長い文を入力する時は、事前に文をコピーしておけば ”Ctrl”+”V” キーで入力場所にペースト できて便利です。 *) マルチプレイでは”Options”→”Multiplayer Options”→”Allow Downloading”を”Yes”にすると サーバーに接続すると同時に、ModやMAPなどの必要なファイルをプレーヤーのHDDへダウンロードします。 但し、サーバー側のアップロード回線が細かったり、DLするファイルが膨大な場合には、事前にサーバーの 管理者が運営するサイトなどから必要なファイルをDLして導入しておく必要があります。 *) 基本的にカスタムMAPを含むModを導入しているサーバーでは、敵を倒してもRankを上げるための XPを獲得することはできません。 但しModによっては独自のRankを設けているものもあります。