ACTのプラグインを作成していきます。C#が理解できている方が前提です。ACTの使い方などの説明ページではありません。

独自の設定ファイルを保存したい時 


C#では、クラス構造がそのままXML化できるので、これを使うのが良いでしょう。

XML用クラスの設計


例えば、レーダー機能に、エリアごとに反応して欲しいモブの名前を登録するような「設定ができる」機能を追加する

・ランクごとの設定
   public class Mobs
    {
        public List<string> ss = new List<string>();
        public List<string> a = new List<string>();
        public List<string> b = new List<string>();
        public List<string> etc = new List<string>();
    }

・地名ごとの設定
public class Zones { public Mobs Middle La Noscea= new Mobs(); }

エリア別・リスキーモブランク別、登録用ヘルパー 関数群

   using System.Collections.Generic;
    using System.IO;
    class XmlHelper
    {
        Zones area;

        public XmlHelper(string fileName)
        {
            if (File.Exists(fileName))
            {
                LoadAreaData(fileName);
            }
            else
            {
                area = new Zones();
                SaveAreaData(fileName);//空のデーターを作成して保存
            }
        }

        //検索リストに追加
        public bool AddMob(string zoneName , MobType mobType ,string name)
        {
            if( area!= null)
            {
                bool addZone = false;
                bool addName = false;
                foreach (ZoneData zoneData in area.zones)
                {
                    if(zoneData.name == zoneName)
                    {

                        List<string> mobs =new List<string>(); 
                        switch (mobType)
                        {
                            case MobType.SS:
                                mobs = zoneData.ss;break;
                            case MobType.A:
                                mobs = zoneData.a; break;
                            case MobType.B:
                                mobs = zoneData.b; break;
                            case MobType.ETC:
                                mobs = zoneData.etc; break;

                        }
                        foreach (string mob in mobs)
                        {
                            if(mob== name)
                            {
                                //既に存在する
                                return true;
                            }
                        }
                        //エリア名は存在する&モブ名前がない
                        addName = true;
                        
                    }
                    if (addName == true)
                    {
                        switch (mobType)
                        {
                            case MobType.SS:
                                zoneData.ss.Add(name); break;
                            case MobType.A:
                                zoneData.a.Add(name); break;
                            case MobType.B:
                                zoneData.b.Add(name); break;
                            case MobType.ETC:
                                zoneData.etc.Add(name); break;
                        }
                        return true;
                    }
                }
                //ゾーンから新規登録
                if (addZone == false)
                {
                    ZoneData zone = new ZoneData();
                    zone.name = zoneName;
                    switch (mobType)
                    {
                        case MobType.SS:
                            zone.ss.Add(name); break;
                        case MobType.A:
                            zone.a.Add(name); break;
                        case MobType.B:
                            zone.b.Add(name); break;
                        case MobType.ETC:
                            zone.etc.Add(name); break;
                    }
                    area.zones.Add(zone);
                    return true;
                }
            }
            return false;
        }

        //リストから削除
        public void RemoveMob(string zoneName, MobType mobType, string name)
        {
            if (AddMob(zoneName, mobType, name) == false)
            {
                foreach (ZoneData zoneData in area.zones)
                {
                    if (zoneData.name == zoneName)
                    {
                        switch (mobType)
                        {
                            case MobType.SS:
                                zoneData.ss.Remove(name); break;
                            case MobType.A:
                                zoneData.a.Remove(name); break;
                            case MobType.B:
                                zoneData.b.Remove(name); break;
                            case MobType.ETC:
                                zoneData.etc.Remove(name); break;
                        }
                        return;
                    }
                }
            }
        }

        //定義データーを取得する
        public ZoneData getMobList(string zoneName)
        {
            foreach (ZoneData zoneData in area.zones)
            {
                if (zoneData.name == zoneName)
                {
                    return zoneData;
                }
            }
            return null;
        }

        //保存
        public void SaveAreaData(string fileName)
        {

            area = new Zones();
            System.Xml.Serialization.XmlSerializer serializer =
            new System.Xml.Serialization.XmlSerializer(typeof(Zones));
            System.IO.StreamWriter sw = new System.IO.StreamWriter(
            fileName, false, new System.Text.UTF8Encoding(false));
            //シリアル化し、XMLファイルに保存する
            serializer.Serialize(sw, area);
            sw.Close();
        }

        //読み出し
        public void LoadAreaData(string fileName)
        {
            //XmlSerializerオブジェクトを作成
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(Zones));
            System.IO.StreamReader sr = new System.IO.StreamReader(
                fileName, new System.Text.UTF8Encoding(false));
            //XMLファイルから読み込み、逆シリアル化する
            area = (Zones)serializer.Deserialize(sr);
            sr.Close();

        }
    }

    public enum MobType
    {
        SS,
        A,
        B,
        ETC
    };

    public class Zones
    {
        public List<ZoneData> zones = new List<ZoneData>();
    }

    public class ZoneData
    {
        public string name;
        public List<string> ss = new List<string>();
        public List<string> a = new List<string>();
        public List<string> b = new List<string>();
        public List<string> etc = new List<string>();
    }

地名の英語(地名は英語名で登録する)

/*
ハイデリン Hydaelyn
エオルゼア Eorzea
ラノシア La Noscea
黒衣森 The Black Shroud
ザナラーン Thanalan
クルザス Coerthas
モードゥナ Mor Dhona
リムサ・ロミンサ Limsa Lominsa
リムサ・ロミンサ:上甲板層 Limsa Lominsa Upper Decks
リムサ・ロミンサ:下甲板層 Limsa Lominsa Lower Decks
中央ラノシア Middle La Noscea
低地ラノシア Lower La Noscea
東ラノシア Eastern La Noscea
西ラノシア Western La Noscea
高地ラノシア Upper La Noscea
サスタシャ浸食洞 Sastasha
ブレイフロクスの野営地 Brayflox's Longstop
ワンダラーパレス The Wanderer's Palace
ウルダハ Ul'dah
ウルダハ:ナル回廊 Ul'dah - Steps of Nald
ウルダハ:ザル回廊 Ul'dah - Steps of Thal
西ザナラーン Western Thanalan
中央ザナラーン Central Thanalan
東ザナラーン Eastern Thanalan
南ザナラーン Southern Thanalan
北ザナラーン Northern Thanalan
カッターズクライ Cutter's Cry
カッパーベル銅山 Copperbell Mines
ハラタリ修練所 Halatali
カルン埋没寺院 The Sunken Temple of Qarn
グリダニア Gridania
グリダニア:新市街 New Gridania
グリダニア:旧市街 Old Gridania
黒衣森:中央森林 Central Shroud
黒衣森:東部森林 East Shroud
黒衣森:南部森林 South Shroud
黒衣森:北部森林 North Shroud
タムタラの墓所 The Tam-Tara Deepcroft
ハウケタ御用邸 Haukke Manor
トトラクの千獄 The Thousand Maws of Toto-Rak
イシュガルド Ishgard
クルザス中央高地 Coerthas Central Highlands
ゼーメル要塞 Dzemael Darkhold
オーラムヴェイル Aurum Vale
モードゥナ Mor Dhona
ベントブランチ牧場 Bentbranch Meadows
ホウソーン家の山塞 The Hawthorne Hut
キャンプ・トランキル Camp Tranquil
クォーリーミル Quarrymill
フォールゴウド Fallgourd Float
ウルヴズジェイル The Wolves' Den
サマーフォード庄 Summerford Farms
コスタ・デル・ソル Costa del Sol
ワインポート Wineport
スウィフトパーチ入植地 Swiftperch
エールポート Aleport
キャンプ・オーバールック Camp Overlook
キャンプ・ブロンズレイク Camp Bronze Lake
ホライズン Horizon
ブラックブラッシュ停留所 Black Brush Station
キャンプ・ドライボーン Camp Drybone
リトルアラミゴ Little Ala Mhigo
忘れられたオアシス Forgotten Springs
キャンプ・ブルーフォグ Camp Bluefog
青燐精製所 Ceruleum Processing Plant
モラビー造船廠 Moraby Drydocks
外地ラノシア Outer La Noscea
ウルヴズジェイル係船場 Wolves' Den Pier
オ・ゴモロ火口神殿 The Navel
茨の園 Thornmarch
ハウリングアイ石塔群 The Howling Eye
キャンプ・ドラゴンヘッド Camp Dragonhead
レヴナンツトール Revenant's Toll
ミスト・ヴィレッジ Mist
ラベンダーベッド Lavender Beds
ゴブレットビュート The Goblet
魔導城プラエトリウム Praetorium
ハウリングアイ外縁 The Howling Eye
ロータノ海 Rhotano Sea
ポルタ・デクマーナ Porta Decumana
クルザス西部高地 Coerthas Western Highlands.
アバラシア雲海 Abalathia's Spine: The Sea Of Clouds.
アジス・ラー Azys Lla.
高地ドラバニア The Dravanian Forelands.
ドラヴァニア雲海 The Churning Mists.
低地ドラヴァニア The Dravanian Hinterlands.

/

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます