2017/1/7 土曜日

クラス継承(+上書き)の話

Filed under: Armaアドオン製作支援,―config編 — gachopin @ 11:27:22

普通のアドオン作成では行わないconfig作成の応用編。
クラスを上書きして元のクラスを書き換えてしまうconfigの書き方について解説します。
けっこう複雑です。(そして、海外のサイトにもろくに解説が無い)
基本的なクラス継承はBISのwikiをご参照ください。

今回の目的:rhsusf_c_weaponsで定義されている5.56mmライフル用スコープを89式小銃に装備可能にすること。

光学照準器を装着するクラスは、cfgweapons⇒武器クラス⇒class WeaponSlotsInfo⇒class CowsSlotで定義します。
rhsusf_c_weaponsのcfgweaponsでm4のベースクラス(rhs_weap_m4_Base)を見てみると、以下のような記述があります。
class WeaponSlotsInfo
{
mass = 60;
allowedSlots[] = {901};
class UnderBarrelSlot: rhs_western_rifle_underbarrel_slot{};
class CowsSlot: rhs_western_rifle_scopes_slot_short{};
class PointerSlot: rhs_western_rifle_laser_slot_top{};
class MuzzleSlot: rhs_western_rifle_muzzle_slot{};
class GripodSlot: rhs_western_rifle_gripod_slot{};
};
光学照準機の定義はrhs_western_rifle_scopes_slot_shortを継承していることが分かります。
このクラスの親クラス(asdg_OpticRail1913_short)を見るとshortとlongに分かれており、longはスコープマウントが長いものに装着するスコープが定義されていることがわかります。つまり、スコープマウントが短い89式はshortを継承すればよい。
ただ、そのまま継承すると定義が上書きされてgac_JSDFのスコープが装着できなくなってしまうので、追記が必要です。

まずclass CfgPatchesで置き換え元のクラスを書き出します。
例) requiredAddons[] = {“rhsusf_c_weapons”,”gac_JSDF_weapon”};
次にRHSのスコープ定義を記述します。ただし、89式のスコープ定義を継承可能にするため記述を工夫します。

class asdg_OpticRail1913_short;
class rhs_western_rifle_scopes_slot_short: asdg_OpticRail1913_short
{
class compatibleItems; ←継承用に書いておく
};

最後にcfgweaponsのクラスに以下のように追記します。継承関係が分かりやすいよう、親クラスも載せておきます。
class Tavor_base_F; ←BISの銃
class gac_JSDF_W_R_Type89_base: Tavor_base_F ←BISの銃を継承した89式の親クラス
{
class WeaponSlotsInfo; ←継承用に書いておく
};
class gac_JSDF_W_R_Type89 : gac_JSDF_W_R_Type89_base {
class WeaponSlotsInfo: WeaponSlotsInfo ←Type89_baseのweaponslotsinfoを継承
{
class CowsSlot: rhs_western_rifle_scopes_slot_short ←上書き対称のCowsSlot
{
gac_optic_JGSDF_Dotsight = 1; ←継承しつつ、新たに89式小銃用スコープも定義
};
};
89式小銃の折り畳み銃床については最初からスコープがマウントしてある定義がしてあるためか、RHSのスコープが装着できません。おそらくRHSのスコープごとに【装着済みのクラス】を定義してあげないと装備できないと思います。(未確認)

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード TrackBack URL

コメントをどうぞ

HTML convert time: 0.158 sec. Powered by WordPress ME