解析/ハウジング

From Ylvapedia
Revision as of 08:58, 3 February 2025 by Inno (talk | contribs) (→‎税収)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


バージョン EA23.74: この記事は、Elin最新の安定版リリースに、少なくとも20のマイナーバージョンが遅れています。ページの更新をお願いします。

ゲスト/宣伝/魅力

あなたの居住地を訪れる訪問者の量を把握するためのセクションです。

Value# Element
(2206) 魅力
(2811) 観光客保護条例
(3702) 古代遺跡
(2822) セレブ天国
(2810) 開店
(2710) マザー禁止区
(2202) 宣伝

FactionBranch.csの374行目にあった記述です。

if (EClass.rnd(5) == 0 && this.policies.IsActive(2810, -1))
        {
            int num8 = 3 + this.lv + this.Evalue(2206) / 5 + this.Evalue(3702) * 2 + this.Evalue(2202) / 2;
            num8 = num8 * (100 + this.Evalue(3702) * 20 + this.Evalue(2206)) / 100;
            num8 = num8 * (100 + (int)Mathf.Sqrt((float)this.Evalue(2811)) * 3) / 100;
            if (EClass._map.CountGuest() < num8)
            {
                Chara chara;
                if (this.policies.IsActive(2822, -1) && Mathf.Sqrt((float)(this.Evalue(2822) / 2)) + 5f >= (float)EClass.rnd(100))
                {
                    chara = CharaGen.CreateWealthy(this.ContentLV);
                    EClass._zone.AddCard(chara, EClass._zone.GetSpawnPos(SpawnPosition.Random, 100) ?? EClass._map.GetRandomSurface(false, true, false));
                }
                else
                {
                    chara = EClass._zone.SpawnMob(null, SpawnSetting.HomeGuest(this.ContentLV));
                }
                if (chara != null && (chara.id == "nun_mother" || chara.id == "prostitute") && this.policies.IsActive(2710, -1))
                {
                    chara.Destroy();
                    chara = null;
                }
                if (chara != null)
                {
                    this.statistics.visitor++;
                    chara.memberType = FactionMemberType.Guest;
                    chara.SetInt(34, EClass.world.date.GetRaw(0));
                    chara.c_allowance = chara.LV * 100;
                    if (chara.IsWealthy)
                    {
                        chara.c_allowance *= 10;
                    }
                    if (date.IsRealTime)
                    {
                        Msg.Say("guestArrive", chara.Name, null, null, null);
                    }
                    else
                    {
                        chara.TryAssignBed();
                    }
                }
            }
        }

※まだ不明点がいくつかあり、更なるテストが必要です

  • 上記を要約すると、「開店」のポリシーが有効な場合、1時間あたり80%の確率で以下の処理がなされます。
    • 多くのゲストがやってきます。人数は[3 + 土地Lv + 土地の魅力 / 5 + 宣伝 / 2 + 20[1]]* ((100 + 土地の魅力 + 200[2]) / 100) * (100 + sqrt(観光客保護条例レべル * 3) / 100)
    • もしセレブ天国ポリシーが有効で、sqrt(セレブ天国レベル/ 2) + 5が1-100の乱数以上であれば、以下の処理がされます。
      • 土地のコンテンツレベルに基づいて富裕層のゲストが来訪します。コンテンツレベルが高ければ高いほど、観光客のレベルも高くなり、つまり彼らが持ってくるお金も多くなります。したがって、利益を最大化するために「悪魔呼び」ポリシーをオンにすることは、実際に有益です。
      • (未検証)「夜型生活条令」をオンにすると、ゲスト、ひいてはゲストからの利益が毎時生成されると思われるため、有益かもしれません。
  • マザー禁止区のポリシーが有効でない場合、マザーはスポーンできます。
    • 各ゲストはキャラレベル*100の小遣いを持っています。富裕層の場合、小遣いはキャラレベル* 1000となります。
  1. 古代遺跡の土地フィートがある場合
  2. これが200なのか20なのかは今のところ不明です


税収

このセクションは、住民から税金を徴収する際に発生する利益の額を理解するためのものです。

Collapse
Value# Element
(2500) 富裕税
(2501) 信仰税
(2512) 住民税

FactionBranch.cs の 819 行目で見つかりました。

	public int GetResidentTax()
	{
		if (!policies.IsActive(2512, 30))
		{
			return 0;
		}
		int num = 0;
		int num2 = (policies.IsActive(2500, 30) ? Evalue(2500) : 0);
		int num3 = (policies.IsActive(2501, 30) ? Evalue(2501) : 0);
		int num4 = 50 + (int)Mathf.Sqrt(Evalue(2512)) * 5;
		foreach (Chara member in members)
		{
			if (member.IsPC || member.memberType != 0)
			{
				continue;
			}
			bool isWealthy = member.IsWealthy;
			int num5 = 0;
			foreach (Hobby item in member.ListWorks().Concat(member.ListHobbies()))
			{
				int num6 = item.source.tax * 100 / 100;
				if (num6 > num5)
				{
					num5 = num6;
				}
			}
			int num7 = ((isWealthy ? 50 : 10) + member.LV * 2) * num5 / 100 * num4 / 100;
			if (isWealthy && num2 > 0)
			{
				num7 = num7 * (150 + (int)Mathf.Sqrt(num2) * 5) / 100;
			}
			if (num3 > 0)
			{
				num7 += (80 + (int)Mathf.Sqrt(num3) * 5) * member.faith.source.tax / 100;
			}
			num7 = num7 * efficiency / (IsTaxFree ? 100 : 1000);
			num += num7;
			if (num7 > 0)
			{
				Log("bTax", num7.ToString() ?? "", member.Name);
			}
		}
		statistics.tax += num;
		return num;
	}
  • 富裕税、信仰税、住民税は、事前に30日間有効になっていなければなりません。
    • 各住民の基本税率は(50 + 住民税Lvの平方根 * 5)で計算されます。
    • 住民の趣味や仕事ごとに課税率が異なり、これを「趣味税率」と呼びます。
      • 例えば、読書は120、宝くじは140、ガチャは160(ガチャゲーはやめましょう)、喫煙は300、散財は400、ランボーは30、監査は0です。
      • 趣味と仕事の課税率が異なる場合、最も高い税率に準じます。
    • 住民全体の税金は次のように計算されます:
      • 裕福な場合:(50 + 住民のレベル * 2) * 基本税率% * 趣味税率%.
      • 裕福でない場合:(10+住民のレベル*2)*基本税率%*趣味税率 %。
        • 例えば、Lv5の裕福な市民で、趣味が読書、住民税ポリシーレベルが9の場合、彼の税金は(50 + 2 * 5)* 120% * 65% = 46.8オレンとなります。
  • 次に富裕税と信仰税のポリシーを見てみましょう。
    • 富裕層がおり、富裕税が有効な場合:
      • 税金は、(150 + 富裕税レベルの平方根 * 5)%で補正されます。
    • 信仰税が有効な場合:
      • 税金は、+(80 + 信仰税レベルLvの平方根) * 信仰税率%で補正されます。
        • 信仰税率は信仰ごとに異なります。最も高いのは無のエイス 500%、幸運のエヘカトル:300%、最も低いのは忘却のヤカシャ:0%、次いで風のルルウィ:25%です。
  • 最後に、この税率は効率が悪かったり、非課税の土地にいなかったりするとペナルティを受けます。
    • もしあなたの土地が免税地でない場合、すべての住民税に90%のペナルティが課せられます!
    • 例を見てみましょう。ガチャが趣味で、Lv50の富裕な市民がいます。税金はすべてLv100ですが、免税地ではありません。
      • 各ポリシー適用前の税金は、(50 + 50 * 2) * 160% * (50+50)% = 240オレンです。
      • 次に富裕税を適応し、240 * (150 + 50)% = 480オレンに修正されます。
      • そして信仰税により、480 + (80 + 50) * 500% = 1230オレンに修正されます。
    • しかし、あなたの土地は非課税ではないので、最終的な税金は123オレンです。血の気が引いたかい?ミシリアに核を落としたいかな?

宿泊料

これは、ベッドをゲストに割り当てる際に発生する利益額を理解するためのセクションです。

Collapse
Value# Element
(750) ベッドの寝心地
(2812) 旅人の宿のポリシー
(2813) スイートルームのポリシー

FactionBranch.csの865行目にあります。

    public void CalcInnIncome()
    {
        int num = this.CountGuests();
        if (num == 0)
        {
            return;
        }
        int num2 = 0;
        int num3 = 0;
        foreach (Thing thing in EClass._map.things)
        {
            if (thing.IsInstalled)
            {
                TraitBed traitBed = thing.trait as TraitBed;
                if (traitBed != null && traitBed.owner.c_bedType == BedType.guest)
                {
                    int maxHolders = traitBed.MaxHolders;
                    num2 += maxHolders;
                    num3 += traitBed.owner.LV * (100 + traitBed.owner.Quality / 2 + traitBed.owner.Evalue(750) / 2) / 100 * maxHolders;
                }
            }
        }
        num = Mathf.Min(num, num2);
        if (num == 0)
        {
            return;
        }
        num3 /= num2;
        num3 = num3 * (100 + 5 * (int)Mathf.Sqrt((float)this.Evalue(2812))) / 100;
        float num4 = 10f + Mathf.Sqrt((float)num) * 10f;
        if (this.policies.IsActive(2813, -1))
        {
            num4 += Mathf.Sqrt((float)this.CountWealthyGuests()) * 50f * (80f + 5f * Mathf.Sqrt((float)this.Evalue(2813))) / 100f;
        }
        if (this.policies.IsActive(2812, -1))
        {
            num4 = num4 * (float)(100 + num3) / 100f;
        }
        num4 = Mathf.Min(num4, Mathf.Sqrt((float)this.Worth) / 15f + 5f);
        this.incomeInn += EClass.rndHalf((int)num4) + EClass.rndHalf((int)num4);
    }

Numは拠点内のゲストの数です。

もしゲストに割り当てられたベッドが1つなら、以下の通りになります。

  • Num2はベッドの最大保有者数
  • Num3 = ゲストのベッドの価値 * ( 100 + ベッドの品質 / 2 + ベッドの寝心地特性 / 2 ) / 100 * ベッドの最大保有者数
    • ゲストのベッドの価値は隠しパラメータで、MODなどを使わないと確認できません。
  • 新しいNumは宿泊者数の最小値またはベッドの最大保有者数です。
  • Num3はNum3 / Num2になります。
  • Num3 = num3 * ( 100 + ( 5 * sqrt (旅人の宿ポリシーレベル ) ) ) ) / 100
  • Num4 = 10 + 10 * sqrt ( Num )

スイートルームのポリシーが有効な場合:

Num4 = Num4 + sqrt (富裕層のゲスト数 * 50 * ( 80 + 5 * sqrt (スイートルームのポリシーのレベル) ) ) ) / 100

旅人の宿ポリシーが有効な場合:

Num4 = Num4 * ( 100 + Num3 ) / 100

Num4 = ( num4 または ( sqrt (This.Worth) / 15) + 5) の最小値。

※This.Worthが何なのかは今のところ不明です。憶測では、土地全体の価値ではないかと言われています。


最終的な所得は以下のようになります

Num4 + (1 - Num4 / 2) の間の乱数 + (1 - Num4 / 2) の間の乱数。