約 1,139,653 件
https://w.atwiki.jp/nico2525/pages/74.html
笛の名手。 どんな曲でもfooさんとわかるようにふける。
https://w.atwiki.jp/marowiki/pages/266.html
目次 【時事】ニュース食品 フード food RSS食品 フード food 口コミ食品 フード food 【参考】ブックマーク 関連項目 関連項目 タグ 最終更新日時 【時事】 ニュース 食品 カレールウ割らない説が勃発、本当なの!? エスビー食品に聞いた「溶かす最適温度は65度です」(まいどなニュース) - Yahoo!ニュース - Yahoo!ニュース ローソンと劇場版「呪術廻戦」がコラボ!タイアップ食品全部買いたい。:マピオンニュースの注目トピック - mapion.co.jp 「いぶりがっこ」がピンチに 秋田を代表する発酵食品 - www.fnn.jp 【写真多数】シンクの生ゴミ、鮭の皮…“食品サンプル”ギネス記録保持者の主婦が語る「私が出会ったヘンなサンプル」 - 文春オンライン 志満秀 海老の多の詩一部 食品表示シール欠落|食品事故情報|食の安全|フーズチャネル - フーズチャネル ブランチ松井山手に「ecoeat」って食品ロス削減を目指すお店ができるみたい。12月18日オープン - 枚方つーしん 「KINDAI Ramen Venture 近大をすすらんか。」×ケンミン食品 学生経営のラーメン店で、グルテンフリー麺使用の特製ラーメン無料試食会を実施:時事ドットコム - 時事通信 福島産の食品輸入規制、イギリスが撤廃へ - 読売新聞オンライン クリスマスギフトの予算はいくら? ほしいもの1位は「食品・飲料」(ITmedia ビジネスオンライン) - Yahoo!ニュース - Yahoo!ニュース 気仙沼市内スーパーで一部食品値上げの動き | 株式会社 三陸新報社 - sanrikushimpo.co.jp 中国で調理済み食品が大人気 「長い賞味期限が不安」の声も(東方新報) - Yahoo!ニュース - Yahoo!ニュース 日本は再び「コロナパニック」に陥るか…? いまもっとも怖い「食べ物から感染」の実態(現代ビジネス) - Yahoo!ニュース - Yahoo!ニュース お好み焼を“誰でも簡単に上手に”、使い切り小分けパックで計量の手間いらず/昭和産業 - 食品産業新聞社 食品輸出加速へ税特例 設備投資促進、グリーン化も(時事通信) - Yahoo!ニュース - Yahoo!ニュース 英、原発事故後の日本産食品輸入規制撤廃へ - 佐賀新聞 お酒は発酵食品? 一生涯付き合える、上手なお酒の飲み方とは?(フィガロジャポン) - Yahoo!ニュース - Yahoo!ニュース 原材料費の高騰などで日清食品チルドと日清食品冷凍が値上げへ(TBS系(JNN)) - Yahoo!ニュース - Yahoo!ニュース パウダールウ製法により、カレールウ市場に新たな選択肢/エスビー食品 - 食品産業新聞社 木田小学校の児童が家庭で集めた食品を贈る 県民生協「フードドライブ」【福井】(福井テレビ) - Yahoo!ニュース - Yahoo!ニュース 訳あり食品スーパー『マルヤス』運営会社が環境大臣表彰を受賞 食品ロス削減を通じた温室効果ガス削減への貢献が評価 - PR TIMES 【福袋2022】「にんにくまみれ」に「強刺激」など、エスビー食品からテーマ別全7種 - 中日新聞 大正三年創業の老舗製麺会社【南京軒食品】にてライバー麺を期間限定で発売決定!12月12日スタート! - PR TIMES 鈴与(株)・鈴与カーゴネット(株)による「食品等の海上輸送へのモーダルシフト」への取り組みが 「令和3年度モーダルシフト最優良事業者賞(大賞)」を受賞 - PR TIMES 家計調査10月、健康食品支出額10%増(健康産業速報) - Yahoo!ニュース - Yahoo!ニュース 国内食品メーカー初となる代替卵食品「HOBOTAMA」/キユーピー - 食品産業新聞社 「ディープチャージ コラーゲン」シリーズ(機能性表示食品) 2022年2月17日発売 :時事ドットコム - 時事通信 「社会問題の食品ロスをプラスに!」第3回スタ★アトピッチ 出場のお知らせ - PR TIMES 食品ロス/在庫ロス削減のマーケット「Let(レット)」、12/10(金)より「廃棄に待った!食品事業者応援セール」を開催 (2021年12月10日) - エキサイトニュース foodpanda、牛乳・卵・豆腐など冷蔵食品をpandamartで販売開始 クーポン配布キャンペーンも実施(AMP[アンプ]) - Yahoo!ニュース - Yahoo!ニュース 「柿の種」類似品に仮処分申請 亀田製菓 - 食品新聞社 「カップラーメン」売れ筋ランキング&おすすめピックアップ 温かい麺でぽかぽかに!【2021年12月】 - - ITmedia 年会費無料で、大容量の食品・日用品をお得に買えるミレニアル世代向けアプリ『Tinder Box』をリリース - PR TIMES 「お〜いお茶」から機能性表示食品発売、おいしさも両立/伊藤園 - 食品産業新聞社 スマホで食品の在宅臨床試験ができるアプリが運用開始、半分以下のコストで多彩なデータ取得が可能|ECのミカタ - ECのミカタ 大館北秋田森林組合 きのこづくし 保存方法誤表記|食品事故情報|食の安全|フーズチャネル - フーズチャネル 機能性表示食品「日清MCTオイルHC」と美容ローラー「リファカラットレイ」が当たる!日清MCTオイル公式Instagramアカウント フォロー&いいねキャンペーン - PR TIMES 食品ロス/在庫ロス削減のマーケット「Let(レット)」、12/10(金)より「廃棄に待った!食品事業者応援セール」を開催 - PR TIMES BLUE SKY中部空港店 乗り物サポート 賞味期限切れ|食品事故情報|食の安全|フーズチャネル - フーズチャネル パタゴニア APRICOT+ALMOND BAR カビ発生の恐れ|食品事故情報|食の安全|フーズチャネル - フーズチャネル 柿の種”入りの「パスタストロー」、老舗メーカーが100%食品素材でSDGs「茹でれば食べられなくはないです」(オリコン) - Yahoo!ニュース - Yahoo!ニュース もはや「値上げ祭り」日本の激安生活が終わる日 - 東洋経済オンライン 日清食品の培養肉ステーキがスーパーに並ぶ日【未来予測8】 - 日経クロストレンド CO2から食品や燃料 水素細菌、脱炭素で脚光 - 日本経済新聞 食品ロスへの関心高く 座学と体験でSDGs学ぶ | 秦野 | タウンニュース - タウンニュース 消費者物価上昇、中国もじわり 燃料・食品が高騰(写真=ロイター) - 日本経済新聞 コンビニやスーパーの冷凍食品、売り場拡大中 おつまみ・デザート(朝日新聞デジタル) - Yahoo!ニュース - Yahoo!ニュース 食品認証市場は2030年まで年平均成長率7%で成長すると予想される - PR TIMES 「BtoBプラットフォーム」のフードソリューションが第51回食品産業技術功労賞を受賞! - PR TIMES コロナ禍の冷凍食品需要の高まりに対応 2つの冷凍室を搭載した「冷凍冷蔵庫320L」発売 - PR TIMES 【シンガポール】ヨシムラ・フード、食品不動産管理社を買収(NNA) - Yahoo!ニュース - Yahoo!ニュース 日本の味噌が〝悪い食品〟? 欧州ルールに飲まれる日(Wedge) - Yahoo!ニュース - Yahoo!ニュース 平塚信用金庫全店で食品の寄附運動「フードドライブ」を実施 - PR TIMES 消費期限が近い食材は、赤に。家庭からの食品ロスを防ぐスマートタグ | 世界のソーシャルグッドなアイデアマガジン - IDEAS FOR GOOD 世田谷自然食品、高級食材の定期販売に参入(ネットショップ担当者フォーラム) - Yahoo!ニュース - Yahoo!ニュース ブランド評価で食品・飲料はサントリー、コンビニはファミマが首位 - 日経クロストレンド 廃棄予定食品を届けるサブスクがスタート 5000円は高いか安いか - 日経クロストレンド 高校生が食品スーパーと弁当開発…栄養バランスや美味しい給食がテーマ(富山テレビ) - Yahoo!ニュース - Yahoo!ニュース マルハニチロ 食品事業は想定以上に順調推移、北米鮭鱒撤退も養殖・海外まき網事業に課題残る/池見社長年末会見 - 食品産業新聞社 【ウェビナー】マレーシアの最新日本食品市場 | イベント情報 - ジェトロ(日本貿易振興機構) 株式会社五橋水産における生鮮水産物の不適正表示に対する措置について:農林水産省 - 農林水産省 専門家がオススメする「疲れと戦うための食品」9つ(AskDoctors) - Yahoo!ニュース - Yahoo!ニュース 【調査レポート】食品通販会社の81.5%が「テレビでのプロモーション」に興味。一方で実際に行ったことがあるのは39.8%。(東通メディア調べ) - PR TIMES 株式会社紀文食品「創業84年目に上場!紀文が誇る強みとは?」宮﨑香蓮の社会科見学:東京新聞 TOKYO Web - 東京新聞 Mellow、食品卸企業へのサポートを開始。インフォマート×Mellow、withコロナでの「新しい食品卸企業のカタチ」12月9日(木)オンラインセミナー開催 - PR TIMES 熊本・新町の酒販店「福城屋」に冷凍食品のおつまみ自販機 店内でレンチンも(みんなの経済新聞ネットワーク) - Yahoo!ニュース - Yahoo!ニュース 物流はいまだ食品小売の「暗黒大陸」 経営戦略に組み込み変革する方法とは - ダイヤモンド・チェーンストア・オンライン 植物性食品中心の食生活は心臓によい!? 海外の研究で判明(ウィメンズヘルス) - Yahoo!ニュース - Yahoo!ニュース 微生物から大量のタンパク質、砂漠で北極で生産可... 代替食品はここまできた(ニューズウィーク日本版) - Yahoo!ニュース - Yahoo!ニュース 光触媒技術活用 食品を常温で新鮮保存 カルテックが新製品 将来はエネルギー分野にも(電波新聞デジタル) - Yahoo!ニュース - Yahoo!ニュース アンドブリッジ/「KURADASHI」と食品の余剰在庫品を期間限定販売 - 流通ニュース ニコキッチン&パントリーで食品配布(要申込)を行います! | 大分県中津市 - 中津市 吉祥寺にアジア食品専門店「亜州太陽市場」 1400点超の品ぞろえ(みんなの経済新聞ネットワーク) - Yahoo!ニュース - Yahoo!ニュース 「むね肉」に疲労軽減成分 奥美濃古地鶏、機能性表示食品に認定(岐阜新聞Web) - Yahoo!ニュース - Yahoo!ニュース 日清食品・ポーラ…ゼネコンの受注を決める創業家との「人脈・血縁」と、その切れ目 - ダイヤモンド・オンライン 名城食品 滋賀、名古屋工場でFSSC取得 食品安全の取り組み強化 下関工場でも計画(中部経済新聞) - Yahoo!ニュース - Yahoo!ニュース 令和3年度 愛媛県 ―米国食品安全強化法(FSMA)対応セミナーシリーズ第2弾― 未然予防有資格者(PCQI)養成講座 | イベント情報 - ジェトロ(日本貿易振興機構) 「農林水産物・食品の輸出額」年間1兆円突破が確実な見通し(農水省) - 日本商工会議所 食品スーパーのサミット、正月三が日は「休業」 社員の“元気充電”で「のんびり過ごさせていただきます」(ITmedia ビジネスオンライン) - Yahoo!ニュース - Yahoo!ニュース 韓国、食品物価が高騰…7-9月期の上昇率5%、OECD加盟国で5位(中央日報日本語版) - Yahoo!ニュース - Yahoo!ニュース 台湾日本産食品サンプルショールーム及びオンライン商談会「水産品・水産加工品展」 | イベント情報 - ジェトロ(日本貿易振興機構) 《玄侑宗久の色眼鏡》食品ロスをなくすポイントは”賞味期限” 舌の感覚を研ぎ澄まして(福島テレビ) - Yahoo!ニュース - Yahoo!ニュース 健康のために食べている「発酵食品」ランキング 3位は「みそ」、2位は「ヨーグルト」、1位は? - ITmedia ビジネスオンライン 冨永愛の美肌の素は「手づくりの発酵食品」 - ダイヤモンド・オンライン 「食品メーカーが多い都道府県ランキング」を発表 1位は、断トツの110社 - ITmedia ビジネスオンライン 食品大手、売上げ堅調も利益は明暗 コスト上昇の圧力強まる 3月期上期業績(食品新聞) - Yahoo!ニュース - Yahoo!ニュース 食品の値上げで注目の「食品スーパー」関連株を解説!原材料価格や物流コストの高騰で食品の値上げが続く中、低価格商品を提供する「食品スーパー」が狙い目 - ダイヤモンド・オンライン もうすぐ年末年始。「冷凍食品」みんなの1カ月の購入金額やアレンジ方法は?(LIMO) - Yahoo!ニュース - Yahoo!ニュース ハウス食品の社員食堂に「サステナブルフード」提供、健康と環境意識を醸成/シダックス(食品産業新聞社ニュースWEB) - Yahoo!ニュース - Yahoo!ニュース マヨ、食用油値上げ ソーセージも、原料高騰 食品各社(時事通信) - Yahoo!ニュース - Yahoo!ニュース 三菱食品ダイヤモンドフェア2021開幕、「食で創造する、持続可能な社会」テーマに商品提案(食品産業新聞社ニュースWEB) - Yahoo!ニュース - Yahoo!ニュース キユーピー、機能性表示食品のごぼうサラダ(健康産業速報) - Yahoo!ニュース - Yahoo!ニュース 食品ロス量が前年度より30万トン減少しました:農林水産省 - 農林水産省 「植物性の代替食品市場」が10年で5倍に急拡大した理由とは(ダイヤモンド・オンライン) - Yahoo!ニュース - Yahoo!ニュース 冷凍食品 値上げの動き相次ぐ 原材料や物流コストの高騰で - NHK NEWS WEB 食品・化粧品素材の太陽化学、コロナ禍でも伸びる製品戦略(会社四季報オンライン) - Yahoo!ニュース - Yahoo!ニュース 食品表示の情報をスマホで 消費者庁の実証調査始まる - NHK NEWS WEB 【業スーマニア】が選ぶ「買って正解・失敗」冷凍食品5選!挽回方法も(LIMO) - Yahoo!ニュース - Yahoo!ニュース 節約志向で「安い食品ばかり買う」人の重大盲点 - 東洋経済オンライン 「穀物高騰」で中国の食品メーカー続々値上げ - 東洋経済オンライン 町の八百屋なども届出が必要に!? 食品衛生法改正で新たに創設された「営業届出制度」を解説(TOKYO FM+) - Yahoo!ニュース - Yahoo!ニュース フード 博多デイトス地下1階に新店舗 JR九州フードサービス - ふくおか経済 あったら即買い…! 【カルディ、無印】マニア溺愛「名店級の神フード」6選(ananweb) - Yahoo!ニュース - Yahoo!ニュース 千葉・幕張メッセでハンドメードイベント アート、雑貨、フードなど手作り作品一堂に - 千葉経済新聞 「フードブース」エリア - 千葉経済新聞 ハーレークインにバットマン、大阪にDCコラボフードが集結 » Lmaga.jp - Lmaga.jp(京阪神エルマガジン社) 「東京リベンジャーズ」松野千冬のフード付き二ットが受注生産で商品化 - コミックナタリー クリスマスのストリートフード ワッフルとホットワイン - 特派員ブログ 意識と運気が高まるサスティナブルなフードコート【辛酸なめ子の東京アラカルト#57】:マピオンニュース - mapion.co.jp クリスマス気分を先取り!テイクアウトできるフードブースも出店!『オリオンスクエア』で『クリスマスフェスタ2021』開催!12月12日。 - うつのみや通信 買えるのは関西だけ!あのソウルフードが「かっぱえびせん」に…!? - anna-media.jp 食のアミューズメントパーク「フードトラックパーク」が神奈川県秦野市にプレオープン | ガジェット通信 GetNews - ガジェット通信 文章がうまい人は「この言葉」を使わない - ダイヤモンド・オンライン 専門学校で販売会 手作りパン、ケーキずらり(テレビ高知) - Yahoo!ニュース - Yahoo!ニュース 大規模リニューアルの松山三越グランドオープン 四国最大級フードコート登場 「笑顔で集う場に」【愛媛】(テレビ愛媛) - Yahoo!ニュース - Yahoo!ニュース TVアニメ『プラオレ!~PRIDE OF ORANGE~』コラボカフェのフードメニューやグッズの全貌を公開!来店特典やキャストも登場するクリスマススペシャルイベントも決定! - PR TIMES SDGsの取り組み ジュエリーメーカーが食料などをフードバンク山梨に寄付 山梨(UTYテレビ山梨) - Yahoo!ニュース - Yahoo!ニュース 木田小学校の児童が家庭で集めた食品を贈る 県民生協「フードドライブ」【福井】(福井テレビ) - Yahoo!ニュース - Yahoo!ニュース 黄昏のジャンクフード(2) チートス Flamin Hot 激辛チーズ味 旨味と辛味がバランスよく両立 - iza(イザ!) プジョーのフードトラック 家電メーカーとのおしゃれなコラボ! - Goo-net(グーネット) 立川のヤタパラ跡地に飲食店の集合体「ガレーラ」 出店テナント明らかに - 立川経済新聞 商船三井/アフリカでフードバリューチェーン参入目指す - LNEWS ウエノフードテクノ、砂糖調製品を再値上げ 断続的な原料高騰で - 食の情報源 【バオガー】渋谷東急フードショーにて催事出店! - PR TIMES パーソナルフードの「GREEN SPOON」がCVR1.5倍を実現、UGC活用ソリューション「Letro」導入で|ECのミカタ - ECのミカタ 【B級フード研究家・野島慎一郎のバカレシピ】埼玉県民のソウルフード・ぎょうざの満洲がピザに大変身!「ぎょうざの満洲のガーリックピザ」(週プレNEWS) - Yahoo!ニュース - Yahoo!ニュース 新潟県民のソウルフード! 『みかづき』の「イタリアン」ってどんな料理? (2021年12月10日) - エキサイトニュース 米ファストフード各社が、英国市場にチャンスを見出している理由 - Forbes JAPAN 長浜「木之本塾」がフードバンク取り組み 食材の寄付呼び掛け - 中日新聞 余った食品、ぜひ提供を 17日まで若狭町「フードドライブ」 - 47NEWS 【立川市・昭島市】悲しみでいっぱいです。「フードフェスまんパク」終了へ。 - 立川市・昭島市 人気コレクションのBlack Labelに新たなフードスタイルが登場 - PR TIMES 「BtoBプラットフォーム」のフードソリューションが第51回食品産業技術功労賞を受賞! - PR TIMES 立川・グリーンスプリングスにローカルフードのセレクト店「AMEKAZE」(みんなの経済新聞ネットワーク) - Yahoo!ニュース - Yahoo!ニュース イケア「福袋2022」は人気フードや収納グッズなど全6種類、お年玉クーポンや3000円分ギフトカードのプレゼントも、年始に店頭販売 - 食品産業新聞社 【シンガポール】ヨシムラ・フード、食品不動産管理社を買収(NNA) - Yahoo!ニュース - Yahoo!ニュース <2021年ベストコスメ速報>「ワフードメイド 酒粕パック」が@cosmeベストコスメアワード2021「ベスト洗い流すパック・マスク 第1位」を受賞! - PR TIMES 約44万件の商品から今年生活者に支持された食品を表彰、「もぐナビベストフードアワード2021」発表!総合大賞は「不二家 カントリーマアム チョコまみれ」が受賞 - PR TIMES 【総タンパク質量約160g以上!】手軽に高タンパク質フードを楽しめる「高タンパク質福袋」を12/9(木)より数量限定販売 - PR TIMES 北九州のソウルフード「資さんうどん」は、12/15(水)~お持ち帰り限定 とくとく とり唐弁当 を販売開始!資さん自慢のおかずを贅沢に乗せ、ボリューム満点の 丼 に仕上げた自信作、是非ご賞味ください! - PR TIMES 平塚信用金庫全店で食品の寄附運動「フードドライブ」を実施 - PR TIMES 小池 玄太郎さん | 相模原市フードトラック協会の理事長を務める | さがみはら中央区 | タウンニュース - タウンニュース 常設フードドライブ開始 町田市小山町NPO法人ゆどうふ 若者と地域をつなぐ | 町田 | タウンニュース - タウンニュース スマートフードスケール市場-タイプ別(機械式、電子式食品スケール);材料別(ステンレス鋼、ガラス、その他);重量別;流通チャネル別(オンライン、オフライン)-グローバル需要分析と機会見通し2030年 - PR TIMES アリオ川口/フードコートに「からあげ、定食、丼 がブリチキン。」出店 - 流通ニュース 食の世界を変える「フードテック」伝道師に聞く“日本の立ち位置”…Smart Kitchen Summit創業者インタビュー(BUSINESS INSIDER JAPAN) - Yahoo!ニュース - Yahoo!ニュース FOODCROSS 2021展示会レポート。炭火焼肉たむら、フード関連企業のニューノーマル時代の取り組み(前編)|フーズチャネル - フーズチャネル 【フレッシュペットフードD2Cバイオフィリア】保護犬に手作りフードが寄付できる参加型クリスマスチャリティーを開催 - PR TIMES USJが20周年! クリスマス限定フードや“スヌーピー”グッズを一挙大公開!(with online) - Yahoo!ニュース - Yahoo!ニュース 大阪市で大規模スカイランタン飛ばし Xmasフード&サンタさんも - いこレポ | 子どもが喜ぶ遊び場・おでかけガイド 新店2店舗はフードコート内!人気中華料理店『張園(ちょうえん)』が西区『イオン新潟青山店』と東区『イオン新潟東店』のフードコート内に大衆中華『張園』としてオープン! - 株式会社ユニークワン 北米のフード業界に新風、「30歳未満の30人」選出(Forbes JAPAN) - Yahoo!ニュース - Yahoo!ニュース 【30代今日のコーデ】水曜日は、フードつきジャケットできれめリラックスコーデ(集英社ハピプラニュース) - Yahoo!ニュース - Yahoo!ニュース 最強の雨の日用ウェア!?秘密はフードにあり『GORE-TEXハイドロマスタージャケット(フォックスファイヤー)』(ルアマガ+) - Yahoo!ニュース - Yahoo!ニュース 森星のプロジェクトtefutefu がフードボックスをリリース!!第一弾は能登(石川県)の有機野菜と伝統食材のセット。里山里海の味覚をお届けします! - PR TIMES <W解説>韓国「Kフード」世界化の国策=ミシュランガイドを通じて日本を意識すべき?(WoW!Korea) - Yahoo!ニュース - Yahoo!ニュース Uberギフトカード誕生。乗車やフードデリバリーに - Impress Watch 大食いで月収700万 フードファイターMAX鈴木の「クズ生活」からの大逆転劇〈dot.〉(AERA dot.) - Yahoo!ニュース - Yahoo!ニュース 宝くじ付き唐揚げ!? 超ビッグサイズな台湾の人気フード「年末ジャンボ黄金ジーパイ」とは?(食楽web) - Yahoo!ニュース - Yahoo!ニュース 日本初!フードデリバリーの比較から注文までワンストップでできるアプリ「done!(ダン)」サービス正式開始 - PR TIMES レストランやフードデリバリーの容器再利用を進めるDispatch Goodsが4.2億円を調達 - TechCrunch Japan <注目&急成長中「植物性食品」市場最前線>フードテックベンチャー「グリーンカルチャー」日本初「植物性ゆで卵」の開発に成功 - PR TIMES 食事は「3Dフードプリンター」で印刷する時代に【未来予測1】 - 日経クロストレンド エキスパートの愛葉香さんに聞く、スーパーフードの手軽な取り入れ方。(クロワッサンオンライン) - Yahoo!ニュース - Yahoo!ニュース 「広げよう子どもの食支援」児童福祉施設・フードバンク・子ども食堂への募金呼びかけ 名古屋駅前で(CBCテレビ) - Yahoo!ニュース - Yahoo!ニュース 最先端!「プラントベース」のヘルシージャンクフードを試しに銀座ロフトに潜入!|Mart(magacol) - Yahoo!ニュース - Yahoo!ニュース キッチンカーを自動化。スペースX出身者がフードデリバリーの課題に挑む(Forbes JAPAN) - Yahoo!ニュース - Yahoo!ニュース 「おいしい」と「ヘルシー」を兼ね備えたKALDIのぜいたくダイエットフード!(サンキュ!) - Yahoo!ニュース - Yahoo!ニュース 県立看護大学前で学生支援のフードパントリー | ニュース - joetsu.ne.jp 最も熱い業界「フードデリバリー」の今、そして今後の行方を占う3つのポイント(AMP[アンプ]) - Yahoo!ニュース - Yahoo!ニュース 猫にカリカリとウェットフード両方を与える理由は…… 猫愛あふれる理由に「ハッとした」「うちもやります」の声続々(ねとらぼ) - Yahoo!ニュース - Yahoo!ニュース 【山口】フードバンク山口がSDGsに取り組む企業・団体と情報交換(KRY山口放送) - Yahoo!ニュース - Yahoo!ニュース 15分の超速フードデリバリー「JOKR」が7カ月でユニコーンに - Forbes JAPAN 宇都宮のフードバンク コメや生理用品など市内5か所で配布会|NHK 栃木県のニュース - NHK NEWS WEB 「プラントベース」フードは地球を救う? 【コトバから考える社会とこれから】 - VOGUE JAPAN オイシックス・ラ・大地、いい肉の日に「プラントベースフード体験会」を開催、ネクストミーツ、モスフードサービス、グリーンカルチャーがトークセッション(食品産業新聞社ニュースWEB) - Yahoo!ニュース - Yahoo!ニュース ハウス食品の社員食堂に「サステナブルフード」提供、健康と環境意識を醸成/シダックス(食品産業新聞社ニュースWEB) - Yahoo!ニュース - Yahoo!ニュース フードデリバリーサービス「DiDi Food」が奈良に4社目参入 後発ゆえの工夫も(みんなの経済新聞ネットワーク) - Yahoo!ニュース - Yahoo!ニュース 保温と保冷ができる便利な磁器製のフードジャーの実力を試してみた - GIZMODO JAPAN 東洋医学研究者、薄井理恵さんのスーパーフードの取り入れ方。(クロワッサンオンライン) - Yahoo!ニュース - Yahoo!ニュース 「よしもともニッポンフードシフト」キックオフイベントを実施:農林水産省 - 農林水産省 【E17】関越自動車道 寄居PA(上り線)「セブンーイレブン」とフードコート、シャワー施設がオープン! | NEXCO東日本 - NEXCO東日本 千葉市内8カ所で「フードドライブ」 余剰食品を回収し必要な人へ提供(みんなの経済新聞ネットワーク) - Yahoo!ニュース - Yahoo!ニュース 年末に向け生活困窮者に食品届ける「フードドライブ」 長野 - NHK NEWS WEB 富谷市フードドライブ事業を開始しました - 富谷市 食品ロスに取り組む! 自治体に広がる「フードドライブ」(朝日新聞 SDGs ACTION!) - Yahoo!ニュース - Yahoo!ニュース 高校生ならでは!カップスープのアイデアメニュー続々 スマイル“フード”プロジェクト in 東北2021 東洋水産(食品新聞) - Yahoo!ニュース - Yahoo!ニュース フードデリバリーの交通安全講習会|NHK 関西のニュース - nhk.or.jp フードデリバリーで日用品、各社が料理以外のラインアップ強化、“デリバリーの日常化”目指す(食品産業新聞社ニュースWEB) - Yahoo!ニュース - Yahoo!ニュース 代替肉、フードテックで納得の味 投資妙味も三ツ星級 - 日本経済新聞 栄養失調、生活習慣病をなくせ! ベースフードが挑む主食革命(Forbes JAPAN) - Yahoo!ニュース - Yahoo!ニュース 岩沼と登米の企業が「ジャパン・フード・セレクション」受賞 消費者が審査(みんなの経済新聞ネットワーク) - Yahoo!ニュース - Yahoo!ニュース 若者たちがハマる「高カロリーフード」流行の真相 - 東洋経済オンライン マニア記者が徹底解説!東京ディズニーリゾートのクリスマス【フードメニュー@ランド編】|Mart(magacol) - Yahoo!ニュース - Yahoo!ニュース フードデリバリーからコロナ禍の飲食店の新たな挑戦を応援!福岡の食トレンドを発信「ネオローカルフード」プロジェクトスタート 20名のDiDi公式アンバサダー就任決定 - PR TIMES 昆虫食、代替肉…普及のカギは「フードネオフォビア」克服 - 日経ビジネスオンライン 韓国有名ファストフード店のハンバーガーに「はさみ虫」混入、当局が是正命令へ(WoW!Korea) - Yahoo!ニュース - Yahoo!ニュース 「安心して子育てができる社会を目指して」NPO法人埼玉フードパントリーネットワーク - saitama.lg.jp スーパーフードって何? どんな食品が何に効くの?(クロワッサンオンライン) - Yahoo!ニュース - Yahoo!ニュース フードドライブにご協力ください!/東浦町 - 東浦町 家庭で余った食品をファミマに持ち込み。フードドライブを初体験してみた(ライフハッカー[日本版]) - Yahoo!ニュース - Yahoo!ニュース food 日本のサステナブルレストランまとめ【FOOD MADE GOOD 特別番外編】 | 世界のソーシャルグッドなアイデアマガジン - IDEAS FOR GOOD 旅したくなる [食×イベント] 地方とつながる「Food Trip」イベントを開催 特産食材を有名シェフレシピで調理 - PR TIMES 「FOOD展2021」開幕、“冷食JAPAN”など6つの専門展示会に169社が出展(食品産業新聞社ニュースWEB) - Yahoo!ニュース - Yahoo!ニュース 農林水産省、「食から日本を考える。NIPPON FOOD SHIFT FES.」開催 10月29・30日 3つのジャンルでコンテンツを展開(AMP[アンプ]) - Yahoo!ニュース - Yahoo!ニュース CAMPFIRE、JR東日本、Future Food Fundと共同で食のスタートアップピッチイベント「K, D, C,,, FOOD Challenge」初開催 - PR TIMES レストランテック協会、フードビジネスパーソン向けコミュニケーションメディア「FOOD UPDATE」と、事業譲渡に関わる基本合意書を締結 - PR TIMES 【日本初】レストランのサステナビリティを格付けする「FOOD MADE GOOD」最高峰の三つ星を獲得 - PR TIMES 毎日の「食」から未来を考える「SDGs MOOK FOOD」を発売!(FRaU編集部) | FRaU - 現代ビジネス FOOD LOSS BANKの取り組みが、日本の食を通じたサステナブルモデルとしてWFF(ワールド・フード・フォーラム)ウィーク中、国連フードシステムサミット関連映画祭で3時間特別上映、世界配信も! - PR TIMES 【ウェビナー参加募集】“食の主権”をコモンズによって取り戻す:フードイノヴェイションの未来像 第8回:サラ・ロヴェルシ(Future Food Institute創設者) - WIRED.jp FOOD LOSS BANK(フードロスバンク)がジャパンタイムズの「Sustainable Japan Award 2021」Sustainable Japan ESG部門 審査員特別賞を受賞 - PR TIMES 11月23~25日に「うべFOODフェス2021」開催(宇部商工会議所) - 日本商工会議所 UN FOOD SYSTEMサミット開催…持続可能なフードシステムを論議=韓国(WoW!Korea) - Yahoo!ニュース - Yahoo!ニュース バイヤーズブログ更新 「「FOOD TEXTILE」のサスティナブルグッズ第2弾」|ディズニーストア|ディズニー公式 - Disney公式 デベロッパーが注目する輸入食品店、「Food warehouse」を知っているか? - ダイヤモンド・チェーンストア・オンライン ディズニーストアとFOOD TEXTILE/チップ&デールの雑貨!(アニメージュプラス) - Yahoo!ニュース - Yahoo!ニュース FOOD LOSS BANKとNARISAWAがコラボレーションし、食を支える、自然、環境、人に対して感謝の気持ちを込めたありがとうBENTOを発売 - PR TIMES 東京・渋谷〈FOOD TECH PARK〉で体験できる、4つの次世代フードテック(Tarzan Web) - Yahoo!ニュース - Yahoo!ニュース 完全栄養食「BASE FOOD」、シリーズ累計販売数は1000万食を突破 - ITmedia 食に関する新規事業支援や人材育成を推進し、東京から食の未来を創る「一般社団法人TOKYO FOOD INSTITUTE」 設立のお知らせ - PR TIMES フードテックに関するあらゆる情報を発信するWebメディア「FOOD TECH Lab」がオープン - PR TIMES 「Fine Food and Sake HIROSHIMA」(食品・酒類バイヤーオンライン商談会) | イベント情報 - ジェトロ(日本貿易振興機構) 「食品ロス」と「フードロス」は違う?その理由をSDGsとFAOの定義から読みとく(井出留美) - 個人 - Yahoo!ニュース - Yahoo!ニュース ベトナム・ホーチミン市「Food and Hotel Vietnam 2021」ジャパンパビリオン | イベント情報 - ジェトロ(日本貿易振興機構) 里山レストラン「茅乃舎」に聞く、スローフードとサステナビリティの関係性【FOOD MADE GOOD#7】 | 世界のソーシャルグッドなアイデアマガジン - IDEAS FOR GOOD 中国・上海「Food and Hospitality China 2021」ジャパンパビリオン | イベント情報 - ジェトロ(日本貿易振興機構) FOOD-Eは、緊急事態宣言終了まで、配送料を半額に致します。 - PR TIMES 「FOOD PLAYLIST」のサービスを導入【相鉄ビルマネジメント・Super Duper】 - sotetsu.co.jp 家庭のキッチンに近い朝食を。地域を巻き込むビジネスホテルのレストラン「モンローズ」【FOOD MADE GOOD#2】 | 世界のソーシャルグッドなアイデアマガジン - IDEAS FOR GOOD 「DiDi Foodアワード 2020」受賞店・者を発表! ローストビーフ専門店が総合1位に - PR TIMES ベルリンに日本食材店「HIS JAPAN FOOD & TRAVEL」オープン - PR TIMES 「DiDi Food」が福岡でサービス提供開始 新規登録でもれなく5,000円分クーポンプレゼント!! 総額2億円のキャンペーンで盛大にスタート - PR TIMES 「DiDi Food」が1月20日に福岡でサービス開始 - PR TIMES 「DiDi Food」に「スシロー」が加盟 - PR TIMES 世界の都市で広がる食のエコシステム構築が京橋で始動!「FUTURE FOOD HUB IN JAPAN(フューチャー フード ハブ イン ジャパン)」本格稼働 - PR TIMES Nature Food | Nature Portfolio - Nature Asia 日本初の高級レストランデリバリーブラウザーアプリ、FOOD-Eがサービスを開始 - PR TIMES 『HIS FOOD PROJECT』 始動 「食」を通じて、人とつながり、未来をつくる - PR TIMES 日米で急成長する完全栄養食ブランド「BASE FOOD」に学ぶD2Cブランドの作り方| - @DIME 香港でアジア有数の食品見本市「Food Expo」開催(香港) | ビジネス短信 - ジェトロ(日本貿易振興機構) ロンドン発、食のAirbnb「food.social」店舗を持たない世界最大のレストランを目指す | 世界のソーシャルグッドなアイデアマガジン - IDEAS FOR GOOD 「FOOD TAIPEI 2019」に過去最大のジャパンパビリオンを設置 | 2019年 - 記者発表 - お知らせ・記者発表 - ジェトロ(日本貿易振興機構) 世界初の宇宙食料マーケット創出を目指す「Space Food X」プログラムを始動 ~多種多様な30以上のパートナー企業等が共創~ - 宇宙航空研究開発機構 若い世代に広がる新・食スタイル「Plant-BasedFood(植物性由来食)」 - アットプレス Food - ananweb FOOD JEWELRY株式会社のプレスリリース|PR TIMES - PR TIMES ごはん日記 Gohan s Food Diary - yaizu.lg.jp RSS 食品 #gnews plugin Error gnewsは1ページに3つまでしか使えません。別ページでご利用ください。 フード #gnews plugin Error gnewsは1ページに3つまでしか使えません。別ページでご利用ください。 food #gnews plugin Error gnewsは1ページに3つまでしか使えません。別ページでご利用ください。 口コミ 食品 #bf フード #bf food #bf 【参考】 ブックマーク サイト名 関連度 備考 Wikipedia ★★ Wikipedia ★★ フード 曖昧さ回避 関連項目 項目名 関連度 備考 研究/食物 ★★★★★ 研究/食事 ★★★★ 研究/食育 ★★★★ 研究/料理 ★★★★ 研究/菓子 ★★★★ 研究/飲料 ★★★★ 研究/野菜 ★★★ 研究/果物 ★★★ 研究/肉 ★★★ 研究/魚 ★★★ 研究/卵 ★★★ 研究/乳製品 ★★★ 研究/栄養 ★★★ 研究/水分 ★★★ 研究/梅干 ★★★ 研究/パスタ ★★★ 研究/ミネストローネ ★★★ 研究/サルサ ★★★ 研究/チキンライス ★★★ 関連項目 項目名 関連度 備考 研究/ ★★★ タグ 生活 最終更新日時 2012-08-20 冒頭へ
https://w.atwiki.jp/2chshotbowwiki/pages/69.html
Exolesco Exolesco #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (hrwmrqi.png) Exolesco is a great town for food, bandages, and potions. This structure is made up of one big tree stump with little huts built onto the flat surface. Water is viable here but there are no crafting tables. It is suggested to go to Stillwater Motte afterwards to craft all the food you need to craft. Though this place is festering with giant mushrooms and zombies, a spawn-gear (or otherwise) wood sword will do until you can find something better in the military chests. General Info 座標 (-2850, -1000) Area Type Tree Stump Village Number of Buildings 15 ゾンビの湧き率 Medium Number of Chests 19 墓(苔石) None General Resources 水源 ✔ 作業台 X 農場 X ポーション台 X Civilian Loot Common Chests X Uncommon Chests 7 Food Loot Common Chests X Uncommon Chests 7 Rare Chests X Potion Loot Common Chests X Uncommon Chests 2 Rare Chests X Tool Loot Common Chests X Uncommon Chests X Military Loot Common Chests X Uncommon Chests 3 Rare Chests X Epic Chests X Mythic Chests X Room Loot Common Chests X Uncommon Chests X Rare Chests X Contents Loot Chests 観光時の助言と注意 Loot Chests Huts (14)7 civ_uncommon 7 food_uncommon Purple and Pink Mushroom1 mil_uncommon Yellow and Oragne Mushroom1 mil_uncommon Blue and Light Blue Mushroom1 mil_uncommon Tower2 pots_uncommon 観光時の助言と注意 The middle Tower is easy to parkour onto from the purple mushroom allowing a great logout spot or saftey from bandits and zombies. Be careful when climbing the central Tower, gaps in the staircase could lead to fatal falls. However, these are pretty easy to avoid. Beware of the soulsand all around the town it can slow escapes. However, it also slows zombies, making combat feasible. Although this is a great place to obtain Food and healing supplies from food_uncommon/civ_uncommon_chests, keep in mind that Exolesco has no crafting table. This area is good for groups to camp at, because of the relative safety, medium spawn rate of zombies, and abundance of food, but for larger groups it s not viable. It is possible to camp in the trees surrounding Exolesco if you need a break from the zombie hordes to recover. However, not all of these are zombie-proof, and they can catch up to you, though it may take a while.
https://w.atwiki.jp/bannerlord/pages/89.html
クエストの構造 サンプルクエストExampleIssues テスト サンプルクエストの肉付け発生の条件 条件消滅 発生の影響 解決手段 進捗状況 報酬 決着の影響 Quest の中断 会話の作成 サンプルクエスト最終形 クエストの構造 我々が一般に「クエスト」と呼んでいるものは、NPC の抱える問題を表す Issue と、その解決手段から成り立っています。 解決手段は、 プレイヤーによる直接解決である Quest コンパニオンによる代理解決である Alternative Solution 自領で発生した Issue にのみ実行可能な Lord Solution に分類できます。 クラス構造は以下のように、Issue と解決手段を Behavior でくるんでゲームに組み込む、という形になっています。 using TaleWorlds.CampaignSystem; public class Behavior CampaignBehaviorBase { internal class Issue IssueBase { // Issue 自体の定義 // Alternative Solution 関連の定義 // Lord Solution 関連の定義 } internal class IssueQuest QuestBase { // Quest の定義 } } Alternative/Lord Solution は会話や数値のやり取りだけで完結するため、IssueQuest のようなクラスはありません。 以上に加え、データを保存するための SaveableCampaignBehaviorTypeDefiner というクラスも使用します。 サンプルクエスト ExampleIssues プロジェクト名は ExampleIssues としています。 プロジェクトのファイル構成は以下のようになります。 ExampleIssues Main.cs VillageNeedsFood.cs (さらに自分で試作 Issue を増やしていくならファイルを追加) Main.cs using TaleWorlds.CampaignSystem;using TaleWorlds.Core;using TaleWorlds.MountAndBlade; namespace ExampleIssues{ public class SubModule MBSubModuleBase { protected override void OnGameStart(Game game, IGameStarter gameStarterObject) { base.OnGameStart(game, gameStarterObject); if (game.GameType is Campaign) { CampaignGameStarter campaignGameStarter = (CampaignGameStarter)gameStarterObject; campaignGameStarter.AddBehavior(new VillageNeedsFoodBehavior()); // 他にも Issue を作ったなら // campaignGameStarter.AddBehavior(new Issue01Behavior()); // campaignGameStarter.AddBehavior(new Issue02Behavior()); // campaignGameStarter.AddBehavior(new Issue03Behavior()); // のようにまとめて登録します。 } } }} VillageNeedsFood.cs + クリックで展開 using Helpers;using System;using TaleWorlds.CampaignSystem;using TaleWorlds.Core;using TaleWorlds.Localization; namespace ExampleIssues{ public class VillageNeedsFoodBehavior CampaignBehaviorBase { private const float IssueDuration = 30f; private const float QuestTimeLimit = 10f; private const float IssuePreConditionMinPlayerRelation = -10f; public override void RegisterEvents() { CampaignEvents.OnCheckForIssueEvent.AddNonSerializedListener(this, OnCheckForIssue); } public override void SyncData(IDataStore dataStore) { } // イベントリスナーです。 private void OnCheckForIssue(Hero hero) { // 詳しいことは分かりませんが、条件に合う Hero が見つかると // 指定した頻度で Issue が生成されるという感じでしょうか。 if (ConditionsHold(hero)) { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( new PotentialIssueData.StartIssueDelegate(OnStartIssue), typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon, null)); } else { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon)); } } // Hero が Issue を持つのに必要な条件を設定しています。 private bool ConditionsHold(Hero issueOwner) { return issueOwner.IsNotable; } private IssueBase OnStartIssue(in PotentialIssueData pid, Hero issueOwner) { return new VillageNeedsFoodIssue(issueOwner, DefaultItems.Grain); } // ---------------------------------------------------------------- // Issue に対する Behavior の定義はここまで。 // // ここからは、カスタム型を保存するためのクラスです。 // ---------------------------------------------------------------- // カスタムビヘイビアーで使用する型を登録します。 public class VillageNeedsFoodBehaviorTypeDefiner SaveableCampaignBehaviorTypeDefiner { // saveBaseId は、自分のビヘイビアー同士はもちろん、同時使用している他の MOD とも被ってはいけないそうです。 // また、番号を途中で変えるとセーブデータ読み込み時にクラッシュします。 // 番号付け規則は、追々コミュニティー内で意思統一が図られることでしょう。 public VillageNeedsFoodBehaviorTypeDefiner() base(001_123_456) { } // このクエストで使う独自のクラスを登録しています。 // // 構造体型なら SaveableTypeDefiner.DefineStructTypes() // 列挙型なら SaveableTypeDefiner.DefineEnumTypes() // のようにメソッドが分かれています。 protected override void DefineClassTypes() { // こちらの saveId は、各 SaveableCampaignBehaviorTypeDefiner の中で被りが無ければいいようです。 AddClassDefinition(typeof(VillageNeedsFoodIssue), 1); AddClassDefinition(typeof(VillageNeedsFoodIssueQuest), 2); } } // ---------------------------------------------------------------- // カスタム型の宣言はここまで。 // // ここからは Issue 本体の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssue IssueBase { [SaveableField(10)] private readonly ItemObject _requestedFood; // IssueBase.IssueBase() に渡す日数は、Issue が自然消滅するまでの日数です。 // クエストの達成期限と混同しないようにしてください。 public VillageNeedsFoodIssue(Hero issueOwner, ItemObject requestedFood) base(issueOwner, CampaignTime.DaysFromNow(IssueDuration)) { _requestedFood = requestedFood; } // Issue のタイトルです。 // 町などで Issue を抱えている人物のポートレートに表示されます。 // Quest のタイトルとは同じにも別にもできます。 // // チートコードで IssueOwner を探せなくなるので、テストでは日本語名は避けた方がいいです。 public override TextObject Title = new TextObject("Village Needs Food"); // Issue 内容の簡単な説明です。 // IssueOwner のポートレートで Title にマウスカーソルを合わせるとホバー表示されます。 public override TextObject Description { get { TextObject textObject = new TextObject("{ISSUE_OWNER.LINK} が食糧を届けるよう頼んでいる。"); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); return textObject; } } // 導入部のセリフのオーバーライドです。 public override TextObject IssueBriefByIssueGiver { get { TextObject textObject = new TextObject( "{FOOD} が乏しくなっているのですが、 " + "近くの町でもあまり手に入らないのです。 " + "このご時世、あまり遠方へ買い求めに行くことも " + "できず、困っております。"); textObject.SetTextVariable("FOOD", _requestedFood.Name); return textObject; } } public override TextObject IssueAcceptByPlayer = new TextObject( "何か私にできることはあるか?"); public override TextObject IssueQuestSolutionExplanationByIssueGiver = new TextObject( "いずこかで買い求め、持ってきてはいただけませ " + "んでしょうか? 報酬はお支払いいたします。"); public override TextObject IssueQuestSolutionAcceptByPlayer = new TextObject( "わかった、やってみよう。"); // コンパニオンに解決を任せられるか否かです。 public override bool IsThereAlternativeSolution = false; // 領主として影響力を消費して解決できるか否かです。 public override bool IsThereLordSolution = false; // 要求される食糧の量です。 // クエスト難易度でスケーリングしています。 private int RequestedFoodAmount = (int)(15f + (30f * IssueDifficultyMultiplier)); // Issue が自動生成される頻度です。 // IssueFrequency.VeryCommon // IssueFrequency.Common // IssueFrequency.Rare public override IssueFrequency GetFrequency() { return IssueFrequency.VeryCommon; } // Issue が消滅する条件を設定できます (StayAlive なので、正確には「消滅しないための条件」です)。 // // 例えば、この Issue が「物資を依頼人とは別の人のもとに届ける」というような内容だった場合、 // 届け先の人物が何らかの理由でゲームから退場してしまったら、その時点で Issue は破棄されなければなりません。 // (もちろん、プレイヤーが既にクエストを請けていればクエストも中止されるべきですが、それは Quest 側の仕事です。) // それには、以下のような感じにします。フィールドはあくまで一例です。 // bool IssueStayAliveConditions() = _targetNotable.IsActive; public override bool IssueStayAliveConditions() { return true; } // プレイヤーが Issue 解決を請け負えるかどうかの条件を設定できます。 protected override bool CanPlayerTakeQuestConditions( Hero issueGiver, out PreconditionFlags flag, out Hero relationHero, out SkillObject skill) { // 各条件に対応する PreconditionFlags でビットマスクをかけていきます。 flag = PreconditionFlags.None; relationHero = null; skill = null; // 友好度が低いと受けられないようにする。 if (issueGiver.GetRelationWithPlayer() IssuePreConditionMinPlayerRelation) { // このフラグを立てたときには、誰と仲が悪くて受けられないのかを返す必要があるようです。 flag |= PreconditionFlags.Relation; relationHero = issueGiver; } // 所属国同士が戦争中だと受けられないようにする。 if (issueGiver.MapFaction.IsAtWarWith(Hero.MainHero.MapFaction)) { flag |= PreconditionFlags.AtWar; } // いずれかのフラグが立っていると false が返るので請け負えなくなります。 return flag == PreconditionFlags.None; } // 詳細不明。公式の Issue でもほぼ使われていません。 protected override void CompleteIssueWithTimedOutConsequences() { } // Quest の発行処理です。 // コンストラクターに渡す日数は Quest の達成期限です。 protected override QuestBase GenerateIssueQuest(string questId) { return new VillageNeedsFoodIssueQuest( questId, IssueOwner, RequestedFoodAmount, _requestedFood, RewardGold, CampaignTime.DaysFromNow(QuestTimeLimit)); } protected override void OnGameLoad() { } } // ---------------------------------------------------------------- // Issue の定義はここまで。 // // ここからは Quest の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssueQuest QuestBase { // これらのフィールドは、セーブ/ロードをまたいで保持されるべき数値なので、SaveableField 属性を与えています。 // SaveableCampaignBehaviorTypeDefiner の宣言だけではダメなようです。 [SaveableField(10)] private readonly ItemObject _foodToBeDelivered; [SaveableField(20)] private readonly int _numFoodToBeDelivered; // Quest のタイトルです。 // ジャーナル (クエストログ) に表示されます。 // Issue のタイトルとは同じにも別にもできます。 public override TextObject Title = new TextObject("村が食糧を求めている"); // ジャーナルで達成期限を非表示にするか否かです。 public override bool IsRemainingTimeHidden = false; private TextObject QuestAcceptLog { get { TextObject textObject = new TextObject("{SETTLEMENT.LINK} の {QUEST_GIVER.LINK} に、{REQUESTED_FOOD} を持ってくるよう頼まれた。 報酬として {PAYMENT}{GOLD_ICON} を払ってくれるそうだ。"); StringHelpers.SetSettlementProperties("SETTLEMENT", QuestGiver.CurrentSettlement, textObject); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _foodToBeDelivered.Name) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } private TextObject QuestSuccessLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} のもとに、約束していた食糧を届けた。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } public VillageNeedsFoodIssueQuest( string questId, Hero questGiver, int numFoodToBeDelivered, ItemObject foodToBeDelivered, int rewardGold, CampaignTime duration) base(questId, questGiver, duration, rewardGold) { _numFoodToBeDelivered = numFoodToBeDelivered; _foodToBeDelivered = foodToBeDelivered; SetDialogs(); InitializeQuestOnCreation(); } // クエスト進行中にゲームをセーブ - ロードした場合の初期化はここで行われます。 protected override void InitializeQuestOnGameLoad() { SetDialogs(); } // 会話の流れと、それに伴う処理のデリゲートを設定します。 protected override void SetDialogs() { OfferDialogFlow = DialogFlow.CreateDialogFlow(IssueManager.IssueClassicQuestStartToken) .NpcLine("お手数ですが、よろしくお願いいたします。") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestAcceptedConsequences)) .CloseDialog(); DiscussDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.QuestDiscussToken) .NpcLine("お頼みした仕事の首尾はいかがですかな?") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .BeginPlayerOptions() .PlayerOption("うむ、ここに持ってまいった。") .Condition(new ConversationSentence.OnConditionDelegate(PlayerHasFood)) .NpcLine("おお、ありがとうございます。 それでは、こちらをお納めくだされ。") .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestFinishedConsequences)) .PlayerOption("いま取り組んでいるところだ。 しばし待たれよ。") .NpcLine("さようですか。 何卒よろしくお願いいたします。") .EndPlayerOptions() .CloseDialog(); // QuestCharacterDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.CharacterTalkToken); } // 以下、会話の特定の段階で実行される処理です。 // クエストを請けたとき private void QuestAcceptedConsequences() { AddLog(QuestAcceptLog); // これを呼ぶだけで、通知の表示や効果音再生など、クエスト開始に伴う処理が自動的に実行されます。 StartQuest(); } // クエスト目標をクリアしたとき private void QuestFinishedConsequences() { TransferFoodFromPlayerInventory(); AddLog(QuestSuccessLog); // クエストがどういう結果に終わったのかを QuestBase に知らせる必要があります。 // CompleteQuestWithSuccess() なら成功 // CompleteQuestWithFail() なら失敗 // CompleteQuestWithCancel() なら中止 // CompleteQuestWithTimedOut() なら期限切れ // CompleteQuestWithBetrayal() なら依頼人を裏切る形での決着 CompleteQuestWithSuccess(); } private bool PlayerHasFood() { return PartyBase.MainParty.ItemRoster.GetItemNumber(_foodToBeDelivered) = _numFoodToBeDelivered; } private void TransferFoodFromPlayerInventory() { GiveItemAction.ApplyForParties( PartyBase.MainParty, QuestGiver.CurrentSettlement.Party, _foodToBeDelivered, _numFoodToBeDelivered); } } }} テスト フォルダー構成や SubModule.xml についてなどはこれまで同様です。 セリフ等に日本語テキストを使っていますが、日本語化 MOD を入れていなくても普通に表示されるはずです。 テストプレイの際はチートを使うとはかどります。使い方の詳細については「チート」ページを参照してください。 IssueOwner のもとに行くには、 campaign.print_specific_issues village needs food で所在地が一覧表示されるので、 campaign.find_settlement 拠点名 でカメラ移動し、Ctrl + 左クリックで拠点のそばにワープしましょう。 サンプルクエストの肉付け サンプルは、Issue の生成から Quest 完了までの骨組みだけが実装してあります。このままでも一応動作はしますが、中身はスカスカで何も実行されていない状態なので、これにいろいろ追加していきましょう。 コードはあくまで一例なので、大体のやり方をつかんだら好きにいじくってもらって構いません。 発生の条件 サンプルクエストは Grain を IssueOwner のもとに持っていくというものですが、IssueOwner のいる拠点に Grain が豊富にある場合、その拠点で買ってすぐにクリアなんてことができてしまいますし、何より「食糧が無くて困っている」という Issue のストーリー自体が破綻してしまっています。したがって、Grain が豊富な拠点の Hero はそもそも IssueOwner に選ばれないようにする措置が必要です。 + サンプルコード VillageNeedsFoodIssueBehavior private const int VillageGoodsThreshold = 10; private const int TownGoodsThreshold = 50; private bool ConditionsHold(Hero issueOwner) { // IssueOwner になれるのは Headman (村長) のみ // IssueOwner は村に所属していなければならない // その村の食糧は一定値未満でなければならない Settlement currentSettlement = issueOwner.CurrentSettlement; if (!issueOwner.IsHeadman || currentSettlement is null || !currentSettlement.IsVillage || currentSettlement.ItemRoster.GetItemNumber(DefaultItems.Grain) = VillageFoodThreshold) { return false; } // 町と取引していないか、町にも食糧が無い Settlement tradeBound = currentSettlement.Village.TradeBound; return tradeBound is null || tradeBound.ItemRoster.GetItemNumber(DefaultItems.Grain) TownFoodThreshold; } 条件消滅 Issue 生成時には存在していた問題が、プレイヤー以外の力によって解決してしまうこともあり得ます。サンプルで言えば、最初は Grain が不足していたとしても、村人が買い入れるなどして補充された、というような状況です。そんな時には Issue を消滅させる方が自然でしょう。 消滅条件は IssueBase.IssueStayAliveConditions() で設定します。 + サンプルコード VillageNeedsFoodIssue public override bool IssueStayAliveConditions() { // 食糧がクエスト開始条件の3倍以上に増えたら false を返して消滅させます。 return IssueOwner.CurrentSettlement.ItemRoster.GetItemNumber(_requestedFood) VillageFoodThreshold * 3; } 発生の影響 公式のクエストは、「Issue が存在している限り何らかのパラメーターが変化し続ける」という形で Issue の影響を表現しています。例えば、賊討伐クエストだったら賊がのさばっていることを表すために拠点の治安が減り続け、道具不足の村は寂れて世帯数が減り続ける、といった具合です。 これを実装するには IssueBase.GetIssueEffectsAndAmountInternal() をオーバーライドします。 + サンプルコード VillageNeedsFoodIssue // using System.Collections.Generic protected override Dictionary IssueEffect, float GetIssueEffectsAndAmountInternal() { // 変化量は1日あたりのものです。Issue の自然消滅日数を考慮して設定しないと、 // トータルのペナルティが重くなりすぎてしまいます。 return new Dictionary IssueEffect, float () { { DefaultIssueEffects.VillageHearth, -0.5f }, { DefaultIssueEffects.IssueOwnerPower, -0.2f } }; } 解決手段 Issue の解決手段には、プレイヤーによる Quest クリア、Alternative Solution、Lord Solution の三通りがあります。サンプルには解決手段が Quest しか用意されていないので、Alternative Solution も追加してみましょう。 最初にも書いたように、Alternative/Lord Solution は Quest と違って会話と数値のやり取りしか発生しないので、全ての要素を Issue クラスの中で定義します。IssueBase に用意されたプロパティやメソッドをオーバーライドすることで、大体は動くようになっています。 public abstract bool IsThereAlternativeSolution まずは、これを true にします。 protected virtual int AlternativeSolutionNeededBaseMenCountInternal コンパニオンのお供として連れて行かせる兵数です。 public virtual bool DoTroopsSatisfyAlternativeSolution(TroopRoster troopRoster, out TextObject explanation) Alternative Solution を開始するのに十分な兵がいるかをチェックする場所です。 public virtual bool CompanionOrFamilyMemberClickableCondition(Hero hero, out TextObject explanation) 派遣できる英雄の条件を設定する場所です。 public virtual bool IsTroopTypeNeededByAlternativeSolution(CharacterObject character) お供として選べる兵の条件 (主にティア) を設定する場所です。 protected virtual int AlternativeSolutionBaseDurationInDaysInternal 解決までにかかる日数です。 protected virtual int CompanionSkillRewardXP コンパニオンに入るスキル経験値です。 protected virtual TextObject AlternativeSolutionStartLog protected virtual TextObject AlternativeSolutionEndLogDefault 開始・終了時にジャーナルに書き込まれるログテキストです。 public virtual TextObject IssueAlternativeSolutionExplanationByIssueGiver Quest の説明を受けた後のプレイヤーのセリフ、“Any other way?”(他に手段は?) に続いて表示される IssueOwner のセリフです。 public virtual TextObject IssueAlternativeSolutionAcceptByPlayer いずれかの解決手段を選ぶ場面で、Alternative Solution の選択肢に表示されるテキストです。 public virtual TextObject IssueAlternativeSolutionResponseByIssueGiver Alternative Solution を選択した際の IssueOwner のセリフです。 進捗状況 クエストの進捗状況 (サンプルクエストの場合「物資を幾つ集めたか」) を、プログレスバーとしてジャーナルに表示できます。 protected JournalLog AddDiscreteLog(TextObject text, TextObject taskName, int currentProgress, int targetProgress, TextObject shortText = null, bool hideInformation = false) text ログテキスト taskName プログレスバーが何を表しているのかを説明するテキスト currentProgress プログレスバーの初期値 targetProgress プログレスバーの最大値 ただし、このプログレスバーは自動的に更新されるわけではありません。サンプルクエストで言えば、インベントリーをチェックして物資量に変化があるたびに書き換える必要があります。 + サンプルコード VillageNeedsFoodIssueQuest // using TaleWorlds.CampaignSystem.SandBox private JournalLog _progressLog; private TextObject FoodGatheredInfo { get { TextObject textObject = new TextObject("必要な {FOOD} が集まりました。 依頼人の所に戻りましょう。"); textObject.SetTextVariable("FOOD", _foodToBeDelivered.Name); return textObject; } } private int CurrentFoodAmount = PartyBase.MainParty.ItemRoster.GetItemNumber(_foodToBeDelivered); protected override void RegisterEvents() { CampaignEvents.PlayerInventoryExchangeEvent.AddNonSerializedListener(this, OnPlayerInventoryExchange); } // クエストを請けたとき private void QuestAcceptedConsequences() { AddLog(QuestAcceptLog); // プログレスバーを追加しています。 TextObject text = new TextObject("{FOOD}を{FOOD_NUMBER}集める。") .SetTextVariable("FOOD", _foodToBeDelivered.Name) .SetTextVariable("FOOD_NUMBER", _numFoodToBeDelivered); // text の部分を TextObject.Empty とすれば、純粋にプログレスバーだけの表示になります。 _progressLog = AddDiscreteLog(text, new TextObject("集めた食糧"), 0, _numFoodToBeDelivered); UpdateProgress(); // これを呼ぶだけで、通知の表示や効果音再生など、クエスト開始に伴う処理が自動的に実行されます。 StartQuest(); } private void UpdateProgress() { _progressLog.UpdateCurrentProgress((int)MathF.Clamp(CurrentFoodAmount, 0f, _numFoodToBeDelivered)); } private void OnPlayerInventoryExchange( List ValueTuple ItemRosterElement, int purchasedItems, List ValueTuple ItemRosterElement, int soldItems, bool isTrading) { UpdateProgress(); if (PlayerHasFood()) { // クリア条件を満たしたことを通知でプレイヤーに知らせています。 InformationManager.AddQuickInformation(FoodGatheredInfo); } } 報酬 報酬をお金で渡すには、まず IssueBase.RewardGold プロパティをオーバーライドして報酬額を設定します。固定値にしてもいいですが、公式のクエストではクエスト難易度でスケーリングしていることが多いです。 protected override int RewardGold = (int)(500f + 1000f * IssueDifficultyMultiplier); こうすると、基本値 500 と、難易度係数 (0.1 ~ 1.0) で変動する値が 1000 なので、600 ~ 1500 が報酬額となるわけです。 IssueBase.RewardGold は QuestBase のコンストラクターに渡されるので、QuestBase.RewardGold フィールドにも自動的に値が設定されます。 値を設定したら、次はそれを授与する処理です。「報酬」とは成功したことを報いるものですから、仮想メソッド QuestBase.OnCompleteWithSuccess() をオーバーライドして、そこに記述するのがいいでしょう。 + サンプルコード VillageNeedsFoodIssueQuest protected override void OnCompleteWithSuccess() { // プレイヤーキャラクターに対する報酬 // IssueBase.RewardGold が設定してあれば、QuestBase.RewardGold ↓ にも反映されています。 GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, RewardGold); Hero.MainHero.AddSkillXp(DefaultSkills.Athletics, 100f); } 報酬を物品で渡したいなら、ここをアイテム授与の記述にします。 VillageNeedsFoodIssueQuest protected override void OnCompleteWithSuccess() { GiveItemAction.ApplyForParties(null, PartyBase.MainParty, DefaultItems.Meat, 10); } これで、プレイヤーが Issue を解決する行為、すなわち Quest への報酬が設定されました。Quest 以外の解決手段である、Alternative/Lord Solution に対する金銭報酬は、IssueBase.RewardGold を設定しておくだけで支払いまで勝手にやってくれます。物品の場合は、IssueBase.AlternativeSolutionEndWithSuccessConsequence() や IssueBase.LordSolutionConsequence() あたりをオーバーライドして記述することになるでしょう。 決着の影響 Issue が、成功にせよ失敗にせよ、一応の決着を見たことによって生じる影響はいろいろ考えられますが、代表的なのは、プレイヤーと IssueOwner との Relation (関係性、友好度) 変化でしょうか。IssueBase.RelationshipChangeWithIssueOwner と、QuestBase.RelationshipChangeWithQuestGiver という専用のプロパティが用意されており、そこに変化量を指定するだけで、一部パークの影響なども含めて勝手に処理してくれます。前者は Alternative/Lord Solution 用、後者は Quest 用です。 他にも影響するであろう物事は、 Power 英雄の権力や地位を数値化したもの。問題を解決したことで、IssueOwner の所属コミュニティー内での地位が向上する、というイメージです。 Trait 英雄の特性、性質、性格といったもの。期限を守らなかったり IssueOwner を裏切ったりしたら、プレイヤーの Honor を下げる、みたいなことです。 Skill 例えば武力行使を伴うようなクエストだったら、武器スキル経験値が入ったりするのもいいかもしれません。 + サンプルコード VillageNeedsFoodIssueQuest protected override void OnCompleteWithSuccess() { // プレイヤーキャラクターに対する報酬 // IssueBase.RewardGold が設定してあれば、QuestBase.RewardGold ↓ にも反映されています。 GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, RewardGold); Hero.MainHero.AddSkillXp(DefaultSkills.Athletics, 100f); // クリアしたことによる影響 // Relation 値の幅は -100 ~ +100 なので、それを考慮した変化量にしましょう。 RelationshipChangeWithQuestGiver = 10; // QuestGiver 以外との Relation を変えたいときは、ChangeRelationAction クラスを使います。 // using TaleWorlds.CampaignSystem.Actions // // 例えば、QuestGiver と同じ拠点にいる全ての Notable (有力者) との Relation も上げたいのであれば // 以下のようにします。 foreach (Hero hero in QuestGiver.CurrentSettlement.Notables) { // QuestGiver はすでに上げてあるので除外。 if (hero != QuestGiver) { ChangeRelationAction.ApplyPlayerRelation(hero, 2); } } // Hero の Power 変更は簡単です。 // 公式のクエストを見るに、変化量は最大で±10程度にしておくのがよさそうです。 QuestGiver.AddPower(10f); // 各 Trait (Mercy, Valor, Honor, Generosity, Calculating) の値の幅は -4000 ~ +4000 です。 // using TaleWorlds.CampaignSystem.CharacterDevelopment.Managers TraitLevelingHelper.OnIssueSolvedThroughQuest( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, 50), new Tuple TraitObject, int (DefaultTraits.Mercy, 20) }); } public override void OnFailed() { RelationshipChangeWithQuestGiver = -10; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -50) }); } protected override void OnTimedOut() { RelationshipChangeWithQuestGiver = -5; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -25) }); } Quest の中断 Issue の関係者が死亡したとか、拠点が略奪を受けたために期限内に報告できないとかいうような状況になってしまうこともあり得ます。そうした不可抗力が発生してしまった場合には Quest を中断させましょう。公式のクエストは、拠点が略奪を受けた時と、プレイヤーと IssueOwner の所属勢力同士が戦争を始めた時に中断していることが多いです。 + サンプルコード VillageNeedsFoodIssueQuest private TextObject VillageRaidedLog { get { TextObject textObject = new TextObject("{VILLAGE.LINK} が略奪を受けたようだ。 もはや任務どころではない。"); StringHelpers.SetSettlementProperties("VILLAGE", QuestGiver.CurrentSettlement, textObject); return textObject; } } private TextObject WarDeclaredLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} の国と戦争が始まった。 {?QUEST_GIVER.GENDER}彼女{?}彼{\\?}との約束もこれまでだろう。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } protected override void RegisterEvents() { CampaignEvents.RaidCompletedEvent.AddNonSerializedListener(this, OnRaidCompleted); CampaignEvents.WarDeclared.AddNonSerializedListener(this, OnWarDeclared); } private void OnRaidCompleted(BattleSideEnum winnerSide, MapEvent mapEvent) { if (mapEvent.MapEventSettlement == QuestGiver.CurrentSettlement) { CompleteQuestWithCancel(VillageRaidedLog); } } private void OnWarDeclared(IFaction faction1, IFaction faction2) { if ((faction1.MapFaction == Clan.PlayerClan.MapFaction faction2.MapFaction == QuestGiver.MapFaction) || (faction2.MapFaction == Clan.PlayerClan.MapFaction faction1.MapFaction == QuestGiver.MapFaction)) { CompleteQuestWithCancel(WarDeclaredLog); } } 会話の作成 導入部 Issue に関する NPC とのやり取りの導入部は会話の流れが決まっており、“I heard you may need some help with a problem?”(何か困りごとがあると聞いたが?) より後の部分を、IssueBase クラスに用意された会話の部品となるプロパティをオーバーライドすることで成立させます。 IssueBase のプロパティ public abstract TextObject IssueBriefByIssueGiver Issue 内容を説明する IssueOwner のセリフです。 public abstract TextObject IssueAcceptByPlayer Issue 解決方法に関して説明を求めるプレイヤーのセリフです。 protected virtual TextObject IssuePlayerResponseAfterLordExplanation protected virtual TextObject IssuePlayerResponseAfterAlternativeExplanation 詳細不明です。 public abstract TextObject IssueQuestSolutionExplanationByIssueGiver クエストによる解決に必要な事柄を説明する IssueOwner のセリフです。 public virtual TextObject IssueAlternativeSolutionExplanationByIssueGiver コンパニオンによる解決に必要な事柄を説明する IssueOwner のセリフです。 protected virtual TextObject IssueLordSolutionExplanationByIssueGiver 領主としての解決に必要な事柄を説明する IssueOwner のセリフです。 protected virtual TextObject IssueRewardExplanationByIssueGiver 現状は使われていません。 public abstract TextObject IssueQuestSolutionAcceptByPlayer プレイヤー自身が解決する選択肢を選んだ際のプレイヤーのセリフです。 public virtual TextObject IssueAlternativeSolutionAcceptByPlayer public virtual TextObject IssueAlternativeSolutionResponseByIssueGiver コンパニオンに解決させる選択肢を選んだ際のプレイヤーと IssueOwner のセリフです。 protected virtual TextObject IssueLordSolutionAcceptByPlayer protected virtual TextObject IssueLordSolutionResponseByIssueGiver プレイヤーが領主として解決する選択肢を選んだ際のプレイヤーと IssueOwner のセリフです。 protected virtual TextObject IssueLordSolutionCounterOfferBriefByOtherNpc protected virtual TextObject IssueLordSolutionCounterOfferExplanationByOtherNpc protected virtual TextObject IssueLordSolutionCounterOfferAcceptByPlayer protected virtual TextObject IssueLordSolutionCounterOfferDeclineByPlayer protected virtual TextObject IssueLordSolutionCounterOfferAcceptResponseByOtherNpc protected virtual TextObject IssueLordSolutionCounterOfferDeclineResponseByOtherNpc IssueOwner と利害が対立する NPC が、逆オファーを持ちかけてくるような展開のクエストで使用します。 DialogFlow 導入部以外の会話は TaleWorlds.CampaignSystem.DialogFlow クラスを使って一から組み立てなければなりません。 [[NPC]]「こんにちは」 プレイヤー「やあどうも」 [[NPC]]「今日はどういったご用件で?」 プレイヤー「これこれこういう用で…」 [[NPC]]「分かりました。他に何か?」 ・ある プレイヤー「こういったことが…」 → 「他に何か?」に戻る ・ない [[NPC]]「では、これにて」 のような一連のやり取りをひとまとめにするものだと考えてください。 DialogFlow のメソッドは DialogFlow 自身を返すので、会話の流れに沿ってメソッドを連結していけます。 上の例は、おおむね次のようになります。 var dialogFlow = DialogFlow.CreateDialogFlow("conv_start") // 渡している文字列 (トークン) は適当です .NpcLine("こんにちは") .PlayerLine("やあどうも") .NpcLine("今日はどういったご用件で?") .PlayerLine("これこれこういう用で…") .GetOutputToken(out string token) .NpcLine("分かりました。他に何か?") .BeginPlayerOptions() .PlayerOption("ある") .PlayerLine("こういったことが…") .GotoDialogState(token) .PlayerOption("ない") .NpcLine("では、これにて") .EndPlayerOptions() .CloseDialog(); DialogFlow のメソッド public static DialogFlow CreateDialogFlow(string inputToken = null, int priority = 100) DialogFlow 自体を生成します。 public DialogFlow NpcLine(string npcText, ConversationSentence.OnMultipleConversationConsequenceDelegate speakerDelegate = null, ConversationSentence.OnMultipleConversationConsequenceDelegate listenerDelegate = null) NPC 側のセリフです。 public DialogFlow Condition(ConversationSentence.OnConditionDelegate conditionDelegate) 直前のセリフを条件付きで表示するときに用います。 public DialogFlow Consequence(ConversationSentence.OnConsequenceDelegate consequenceDelegate) 直前のセリフが表示された後に実行される処理を指定します。 public DialogFlow BeginPlayerOptions() public DialogFlow EndPlayerOptions() public DialogFlow PlayerOption(string text, ConversationSentence.OnMultipleConversationConsequenceDelegate listenerDelegate = null) 選択肢を作るときに用います。PlayerOption() が各選択肢で、それを BeginPlayerOptions() と EndPlayerOptions() で挟むようにします。 public DialogFlow GetOutputToken(out string oState) public DialogFlow GotoDialogState(string input) 会話の特定位置にジャンプするときに用います。 public DialogFlow CloseDialog() 会話を終了します。 TextObject の装飾 TaleWorlds.Localization.TextObject の文字列には、特殊な記述によってキャラクター等が持つ動的なパラメーターを反映させることができます。 TextObject textObject = new TextObject("私の名前は {PLAYER.LINK}。 年齢{PLAYER.AGE}歳だ。"); StringHelpers.SetCharacterProperties("PLAYER", Hero.MainHero.CharacterObject, textObject); "PLAYER" となっている部分は任意の文字列リテラルです。ドット以下の部分は使用したメソッドによって使えるものが異なります。どういう値に置換されるのかは Helpers.StringHelpers クラスを参照してください。 上の例は、名前が百科事典のリンク付きになり、現在の年齢が表示されます。 サンプルクエスト最終形 これまでの肉付けを踏まえたコードの最終形です。 VillageNeedsFood.cs + クリックで展開 using Helpers;using System;using System.Collections.Generic;using TaleWorlds.CampaignSystem;using TaleWorlds.CampaignSystem.Actions;using TaleWorlds.CampaignSystem.CharacterDevelopment.Managers;using TaleWorlds.CampaignSystem.SandBox;using TaleWorlds.Core;using TaleWorlds.Library;using TaleWorlds.Localization;using TaleWorlds.SaveSystem; namespace ExampleIssues{ public class VillageNeedsFoodBehavior CampaignBehaviorBase { private const int VillageFoodThreshold = 10; private const int TownFoodThreshold = 50; private const int MinTroopTier = 1; private const float IssueDuration = 30f; private const float QuestTimeLimit = 10f; private const float IssuePreConditionMinPlayerRelation = -10f; public override void RegisterEvents() { CampaignEvents.OnCheckForIssueEvent.AddNonSerializedListener(this, OnCheckForIssue); } public override void SyncData(IDataStore dataStore) { } // イベントリスナーです。 private void OnCheckForIssue(Hero hero) { // 詳しいことは分かりませんが、条件に合う Hero が見つかると // 指定した頻度で Issue が生成されるという感じでしょうか。 if (ConditionsHold(hero)) { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( new PotentialIssueData.StartIssueDelegate(OnStartIssue), typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon, null)); } else { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon)); } } // Hero が Issue を持つのに必要な条件を設定しています。 // // 開始直後から困窮している場所など無いと思われるので、 // テストプレイ用に条件は甘くしてあります。 private bool ConditionsHold(Hero issueOwner) { // IssueOwner になれるのは Headman (村長) のみ // IssueOwner は村に所属していなければならない // その村の食糧は一定値未満でなければならない Settlement currentSettlement = issueOwner.CurrentSettlement; if (!issueOwner.IsHeadman || currentSettlement is null || !currentSettlement.IsVillage || currentSettlement.ItemRoster.GetItemNumber(DefaultItems.Grain) = VillageFoodThreshold) { return false; } // 町と取引していないか、町にも食糧が無い Settlement tradeBound = currentSettlement.Village.TradeBound; return tradeBound is null || tradeBound.ItemRoster.GetItemNumber(DefaultItems.Grain) TownFoodThreshold; } private IssueBase OnStartIssue(in PotentialIssueData pid, Hero issueOwner) { return new VillageNeedsFoodIssue(issueOwner, DefaultItems.Grain); } // ---------------------------------------------------------------- // Issue に対する Behavior の定義はここまで。 // // ここからは、カスタム型を保存するためのクラスです。 // ---------------------------------------------------------------- // カスタムビヘイビアーで使用する型を登録します。 public class VillageNeedsFoodBehaviorTypeDefiner SaveableCampaignBehaviorTypeDefiner { // saveBaseId は、自分のビヘイビアー同士はもちろん、同時使用している他の MOD とも被ってはいけないそうです。 // また、番号を途中で変えるとセーブデータ読み込み時にクラッシュします。 // 番号付け規則は、追々コミュニティー内で意思統一が図られることでしょう。 public VillageNeedsFoodBehaviorTypeDefiner() base(001_123_456) { } // このクエストで使う独自のクラスを登録しています。 // // 構造体型なら SaveableTypeDefiner.DefineStructTypes() // 列挙型なら SaveableTypeDefiner.DefineEnumTypes() // のようにメソッドが分かれています。 protected override void DefineClassTypes() { // こちらの saveId は、各 SaveableCampaignBehaviorTypeDefiner の中で被りが無ければいいようです。 AddClassDefinition(typeof(VillageNeedsFoodIssue), 1); AddClassDefinition(typeof(VillageNeedsFoodIssueQuest), 2); } } // ---------------------------------------------------------------- // カスタム型の宣言はここまで。 // // ここからは Issue 本体の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssue IssueBase { [SaveableField(10)] private readonly ItemObject _requestedFood; // IssueBase.IssueBase() に渡す日数は、Issue が自然消滅するまでの日数です。 // クエストの達成期限と混同しないようにしてください。 public VillageNeedsFoodIssue(Hero issueOwner, ItemObject requestedFood) base(issueOwner, CampaignTime.DaysFromNow(IssueDuration)) { _requestedFood = requestedFood; } // Issue のタイトルです。 // 町などで Issue を抱えている人物のポートレートに表示されます。 // Quest のタイトルとは同じにも別にもできます。 // // チートコードで IssueOwner を探せなくなるので、テストでは日本語名は避けた方がいいです。 public override TextObject Title = new TextObject("Village Needs Food"); // Issue 内容の簡単な説明です。 // IssueOwner のポートレートで Title にマウスカーソルを合わせるとホバー表示されます。 public override TextObject Description { get { TextObject textObject = new TextObject("{ISSUE_OWNER.LINK} が食糧を届けるよう頼んでいる。"); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); return textObject; } } // 導入部のセリフのオーバーライドです。 public override TextObject IssueBriefByIssueGiver { get { TextObject textObject = new TextObject( "{FOOD} が乏しくなっているのですが、 " + "近くの町でもあまり手に入らないのです。 " + "このご時世、あまり遠方へ買い求めに行くことも " + "できず、困っております。"); textObject.SetTextVariable("FOOD", _requestedFood.Name); return textObject; } } public override TextObject IssueAcceptByPlayer = new TextObject( "何か私にできることはあるか?"); public override TextObject IssueQuestSolutionExplanationByIssueGiver = new TextObject( "いずこかで買い求め、持ってきてはいただけませ " + "んでしょうか? 報酬はお支払いいたします。"); public override TextObject IssueQuestSolutionAcceptByPlayer = new TextObject( "わかった、やってみよう。"); // コンパニオンに解決を任せられるか否かです。 public override bool IsThereAlternativeSolution = true; // Alternative Solution 用のセリフです。 public override TextObject IssueAlternativeSolutionExplanationByIssueGiver = new TextObject( "あなた様のご都合が悪いようであれば、お側付き " + "の方に届けていただくのでも構いません。"); public override TextObject IssueAlternativeSolutionAcceptByPlayer = new TextObject( "ならば部下を遣わすとしよう。"); public override TextObject IssueAlternativeSolutionResponseByIssueGiver = new TextObject( "それでは、よろしくお願いいたします。"); // Alternative Solution 用のログテキストです。 protected override TextObject AlternativeSolutionStartLog { get { TextObject textObject = new TextObject( "{SETTLEMENT.LINK} の {ISSUE_OWNER.LINK} に、 {REQUESTED_FOOD} を持ってくるよう頼まれた。 " + "あなたは部下の {COMPANION.LINK} に{TROOP_COUNT}人の兵を預け、それら届けさせることにした。 " + "{RETURN_DAYS}日後には任務を終え、戻ってくるだろう。 " + "その際には、報酬として {PAYMENT}{GOLD_ICON} を手にしてくるはずだ。"); StringHelpers.SetSettlementProperties("SETTLEMENT", IssueOwner.CurrentSettlement, textObject); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); StringHelpers.SetCharacterProperties("COMPANION", AlternativeSolutionHero.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _requestedFood.Name) .SetTextVariable("TROOP_COUNT", AlternativeSolutionSentTroops.TotalManCount) .SetTextVariable("RETURN_DAYS", GetTotalAlternativeSolutionDurationInDays()) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } protected override TextObject AlternativeSolutionEndLogDefault { get { TextObject textObject = new TextObject( "{COMPANION.LINK} たちは {REQUESTED_FOOD} を無事に届けた。 " + "{ISSUE_OWNER.LINK} は大いに喜び、約束通りの報酬を差し出した。"); StringHelpers.SetCharacterProperties("COMPANION", AlternativeSolutionHero.CharacterObject, textObject); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _requestedFood.Name) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } // 領主として影響力を消費して解決できるか否かです。 public override bool IsThereLordSolution = false; protected override int AlternativeSolutionNeededBaseMenCountInternal = (int)(9f + (14f * IssueDifficultyMultiplier)); protected override int AlternativeSolutionBaseDurationInDaysInternal = (int)(10f + (8f * IssueDifficultyMultiplier)); protected override int RewardGold = (int)(500f + (1000f * IssueDifficultyMultiplier)); protected override int CompanionSkillRewardXP = (int)(600f + (800f * IssueDifficultyMultiplier)); // コンパニオンに求められるスキル値です。 // しきい値を下回っているコンパニオンに任せると失敗する可能性が発生します。 public override List SkillObject GetAlternativeSolutionRequiredCompanionSkill(out int requiredSkillLevel) { requiredSkillLevel = CompanionSkillThreshold; return new List SkillObject { DefaultSkills.Roguery, DefaultSkills.Trade, }; } // 要求される食糧の量です。 // クエスト難易度でスケーリングしています。 private int RequestedFoodAmount = (int)(15f + (30f * IssueDifficultyMultiplier)); private int CompanionSkillThreshold = 75; // Issue が自動生成される頻度です。 // IssueFrequency.VeryCommon // IssueFrequency.Common // IssueFrequency.Rare public override IssueFrequency GetFrequency() { return IssueFrequency.VeryCommon; } // Issue が消滅する条件を設定できます (StayAlive なので、正確には「消滅しないための条件」です)。 // // 例えば、この Issue が「物資を依頼人とは別の人のもとに届ける」というような内容だった場合、 // 届け先の人物が何らかの理由でゲームから退場してしまったら、その時点で Issue は破棄されなければなりません。 // (もちろん、プレイヤーが既にクエストを請けていればクエストも中止されるべきですが、それは Quest 側の仕事です。) // それには、以下のような感じにします。フィールドはあくまで一例です。 // bool IssueStayAliveConditions() = _targetNotable.IsActive; public override bool IssueStayAliveConditions() { // 食糧がクエスト開始条件の3倍以上に増えたら false を返して消滅させます。 return IssueOwner.CurrentSettlement.ItemRoster.GetItemNumber(_requestedFood) VillageFoodThreshold * 3; } // プレイヤーが Issue 解決を請け負えるかどうかの条件を設定できます。 protected override bool CanPlayerTakeQuestConditions( Hero issueGiver, out PreconditionFlags flag, out Hero relationHero, out SkillObject skill) { // 各条件に対応する PreconditionFlags でビットマスクをかけていきます。 flag = PreconditionFlags.None; relationHero = null; skill = null; // 友好度が低いと受けられないようにする。 if (issueGiver.GetRelationWithPlayer() IssuePreConditionMinPlayerRelation) { // このフラグを立てたときには、誰と仲が悪くて受けられないのかを返す必要があるようです。 flag |= PreconditionFlags.Relation; relationHero = issueGiver; } // 所属国同士が戦争中だと受けられないようにする。 if (issueGiver.MapFaction.IsAtWarWith(Hero.MainHero.MapFaction)) { flag |= PreconditionFlags.AtWar; } // いずれかのフラグが立っていると false が返るので請け負えなくなります。 return flag == PreconditionFlags.None; } // 詳細不明。公式の Issue でもほぼ使われていません。 protected override void CompleteIssueWithTimedOutConsequences() { } // Quest の発行処理です。 // コンストラクターに渡す日数は Quest の達成期限です。 protected override QuestBase GenerateIssueQuest(string questId) { return new VillageNeedsFoodIssueQuest( questId, IssueOwner, RequestedFoodAmount, _requestedFood, RewardGold, CampaignTime.DaysFromNow(QuestTimeLimit)); } protected override void OnGameLoad() { } // Issue 発生の影響です。 protected override Dictionary IssueEffect, float GetIssueEffectsAndAmountInternal() { // 変化量は1日あたりのものです。Issue の自然消滅日数を考慮して設定しないと、 // トータルのペナルティが重くなりすぎてしまいます。 return new Dictionary IssueEffect, float () { { DefaultIssueEffects.VillageHearth, -0.5f }, { DefaultIssueEffects.IssueOwnerPower, -0.2f } }; } public override bool DoTroopsSatisfyAlternativeSolution(TroopRoster troopRoster, out TextObject explanation) { explanation = TextObject.Empty; return QuestHelper.CheckRosterForAlternativeSolution(troopRoster, GetTotalAlternativeSolutionNeededMenCount(), ref explanation, MinTroopTier); } // 任務に派遣可能な英雄の条件です。 // e1.6.2 にて条件による制限は撤廃され、代わりに担当者のスキルに応じて失敗確率が発生するようになりました。 /* public override bool CompanionOrFamilyMemberClickableCondition(Hero companion, out TextObject explanation) { GetAlternativeSolutionRequiredCompanionSkills(out Dictionary SkillObject, int shouldHaveAll, out Dictionary SkillObject, int shouldHaveOneOfThem); explanation = TextObject.Empty; return QuestHelper.CheckCompanionForAlternativeSolution(companion.CharacterObject, ref explanation, shouldHaveAll, shouldHaveOneOfThem); } */ public override bool IsTroopTypeNeededByAlternativeSolution(CharacterObject character) { return character.Tier = MinTroopTier; } public override void AlternativeSolutionStartConsequence() { // 食糧の購入資金を差し引いています。 Hero.MainHero.ChangeHeroGold(-_requestedFood.Value * RequestedFoodAmount); } protected override void AlternativeSolutionEndWithSuccessConsequence() { // 担当キャラクターに対する報酬は、プロパティで設定してあるので勝手に適用されます。 // クリアしたことによる影響 RelationshipChangeWithIssueOwner = 10; foreach (Hero hero in IssueOwner.CurrentSettlement.Notables) { // QuestGiver はすでに上げてあるので除外。 if (hero != IssueOwner) { ChangeRelationAction.ApplyPlayerRelation(hero, 2); } } IssueOwner.AddPower(10f); TraitLevelingHelper.OnIssueSolvedThroughQuest( IssueOwner, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, 50), new Tuple TraitObject, int (DefaultTraits.Mercy, 20) }); } /* private void GetAlternativeSolutionRequiredCompanionSkills(out Dictionary SkillObject, int shouldHaveAll, out Dictionary SkillObject, int shouldHaveOneOfThem) { // 必須スキル // こちらの Dictionary に登録したスキルは、全てが指定レベル以上でなければなりません。 shouldHaveAll = new Dictionary SkillObject, int { { DefaultSkills.Trade, CompanionSkillThreshold } }; // 選択スキル // こちらの Dictionary に登録したスキルは、いずれかが指定レベル以上でなければなりません。 shouldHaveOneOfThem = null; // 例えば「近接武器スキルいずれか」という条件を追加したいのであれば、以下のように記述します。 // もちろん、しきい値は同一でなくても構いません。 // // shouldHaveOneOfThem = new Dictionary SkillObject, int // { // { DefaultSkills.OneHanded, CompanionSkillThreshold }, // { DefaultSkills.TwoHanded, CompanionSkillThreshold }, // { DefaultSkills.Polearm, CompanionSkillThreshold } // }; } */ } // ---------------------------------------------------------------- // Issue の定義はここまで。 // // ここからは Quest の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssueQuest QuestBase { // これらのフィールドは、セーブ/ロードをまたいで保持されるべき数値なので、SaveableField 属性を与えています。 // SaveableCampaignBehaviorTypeDefiner の宣言だけではダメなようです。 [SaveableField(10)] private readonly ItemObject _foodToBeDelivered; [SaveableField(20)] private readonly int _numFoodToBeDelivered; [SaveableField(30)] private JournalLog _progressLog; // Quest のタイトルです。 // ジャーナル (クエストログ) に表示されます。 // Issue のタイトルとは同じにも別にもできます。 public override TextObject Title = new TextObject("村が食糧を求めている"); // ジャーナルで達成期限を非表示にするか否かです。 public override bool IsRemainingTimeHidden = false; private TextObject QuestAcceptLog { get { TextObject textObject = new TextObject("{SETTLEMENT.LINK} の {QUEST_GIVER.LINK} に、{REQUESTED_FOOD} を持ってくるよう頼まれた。 報酬として {PAYMENT}{GOLD_ICON} を払ってくれるそうだ。"); StringHelpers.SetSettlementProperties("SETTLEMENT", QuestGiver.CurrentSettlement, textObject); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _foodToBeDelivered.Name) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } private TextObject QuestSuccessLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} のもとに、約束していた食糧を届けた。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } private TextObject FoodGatheredInfo { get { TextObject textObject = new TextObject("必要な {FOOD} が集まりました。 依頼人の所に戻りましょう。"); textObject.SetTextVariable("FOOD", _foodToBeDelivered.Name); return textObject; } } private TextObject VillageRaidedLog { get { TextObject textObject = new TextObject("{VILLAGE.LINK} が略奪を受けたようだ。 もはや任務どころではない。"); StringHelpers.SetSettlementProperties("VILLAGE", QuestGiver.CurrentSettlement, textObject); return textObject; } } private TextObject WarDeclaredLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} の国と戦争が始まった。 {?QUEST_GIVER.GENDER}彼女{?}彼{\\?}との約束もこれまでだろう。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } public VillageNeedsFoodIssueQuest( string questId, Hero questGiver, int numFoodToBeDelivered, ItemObject foodToBeDelivered, int rewardGold, CampaignTime duration) base(questId, questGiver, duration, rewardGold) { _numFoodToBeDelivered = numFoodToBeDelivered; _foodToBeDelivered = foodToBeDelivered; SetDialogs(); InitializeQuestOnCreation(); } private int CurrentFoodAmount = PartyBase.MainParty.ItemRoster.GetItemNumber(_foodToBeDelivered); // クエスト進行中にゲームをセーブ - ロードした場合の初期化はここで行われます。 protected override void InitializeQuestOnGameLoad() { SetDialogs(); } // 会話の流れと、それに伴う処理のデリゲートを設定します。 protected override void SetDialogs() { OfferDialogFlow = DialogFlow.CreateDialogFlow(IssueManager.IssueClassicQuestStartToken) .NpcLine("お手数ですが、よろしくお願いいたします。") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestAcceptedConsequences)) .CloseDialog(); DiscussDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.QuestDiscussToken) .NpcLine("お頼みした仕事の首尾はいかがですかな?") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .BeginPlayerOptions() .PlayerOption("うむ、ここに持ってまいった。") .Condition(new ConversationSentence.OnConditionDelegate(PlayerHasFood)) .NpcLine("おお、ありがとうございます。 それでは、こちらをお納めくだされ。") .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestFinishedConsequences)) .PlayerOption("いま取り組んでいるところだ。 しばし待たれよ。") .NpcLine("さようですか。 何卒よろしくお願いいたします。") .EndPlayerOptions() .CloseDialog(); // QuestCharacterDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.CharacterTalkToken); } protected override void RegisterEvents() { CampaignEvents.PlayerInventoryExchangeEvent.AddNonSerializedListener(this, OnPlayerInventoryExchange); CampaignEvents.RaidCompletedEvent.AddNonSerializedListener(this, OnRaidCompleted); CampaignEvents.WarDeclared.AddNonSerializedListener(this, OnWarDeclared); } protected override void OnCompleteWithSuccess() { // プレイヤーキャラクターに対する報酬 // IssueBase.RewardGold が設定してあれば、QuestBase.RewardGold ↓ にも反映されています。 GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, RewardGold); Hero.MainHero.AddSkillXp(DefaultSkills.Athletics, 100f); // クリアしたことによる影響 RelationshipChangeWithQuestGiver = 10; foreach (Hero hero in QuestGiver.CurrentSettlement.Notables) { // QuestGiver はすでに上げてあるので除外。 if (hero != QuestGiver) { ChangeRelationAction.ApplyPlayerRelation(hero, 2); } } QuestGiver.AddPower(10f); TraitLevelingHelper.OnIssueSolvedThroughQuest( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, 50), new Tuple TraitObject, int (DefaultTraits.Mercy, 20) }); } public override void OnFailed() { RelationshipChangeWithQuestGiver = -10; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -50) }); } protected override void OnTimedOut() { RelationshipChangeWithQuestGiver = -5; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -25) }); } // 以下、会話の特定の段階で実行される処理です。 // クエストを請けたとき private void QuestAcceptedConsequences() { AddLog(QuestAcceptLog); // プログレスバーを追加しています。 TextObject text = new TextObject("{FOOD}を{FOOD_NUMBER}集める。") .SetTextVariable("FOOD", _foodToBeDelivered.Name) .SetTextVariable("FOOD_NUMBER", _numFoodToBeDelivered); // text の部分を TextObject.Empty とすれば、純粋にプログレスバーだけの表示になります。 _progressLog = AddDiscreteLog(text, new TextObject("集めた食糧"), 0, _numFoodToBeDelivered); UpdateProgress(); // これを呼ぶだけで、通知の表示や効果音再生など、クエスト開始に伴う処理が自動的に実行されます。 StartQuest(); } // クエスト目標をクリアしたとき private void QuestFinishedConsequences() { TransferFoodFromPlayerInventory(); AddLog(QuestSuccessLog); // クエストがどういう結果に終わったのかを QuestBase に知らせる必要があります。 // CompleteQuestWithSuccess() なら成功 // CompleteQuestWithFail() なら失敗 // CompleteQuestWithCancel() なら中止 // CompleteQuestWithTimedOut() なら期限切れ // CompleteQuestWithBetrayal() なら依頼人を裏切る形での決着 CompleteQuestWithSuccess(); } private bool PlayerHasFood() { return CurrentFoodAmount = _numFoodToBeDelivered; } private void TransferFoodFromPlayerInventory() { GiveItemAction.ApplyForParties( PartyBase.MainParty, QuestGiver.CurrentSettlement.Party, _foodToBeDelivered, _numFoodToBeDelivered); } private void UpdateProgress() { _progressLog.UpdateCurrentProgress((int)MathF.Clamp(CurrentFoodAmount, 0f, _numFoodToBeDelivered)); } // 以下、クエストの推移を判断するためのイベントリスナーです。 private void OnPlayerInventoryExchange( List ValueTuple ItemRosterElement, int purchasedItems, List ValueTuple ItemRosterElement, int soldItems, bool isTrading) { UpdateProgress(); foreach ((ItemRosterElement purchasedItem, int _) in purchasedItems) { // インベントリーに Grain が入れられた場合 if (purchasedItem.EquipmentElement.Item == _foodToBeDelivered PlayerHasFood()) { // クリア条件を満たしたことを通知でプレイヤーに知らせています。 InformationManager.AddQuickInformation(FoodGatheredInfo); break; } } } private void OnRaidCompleted(BattleSideEnum winnerSide, MapEvent mapEvent) { if (mapEvent.MapEventSettlement == QuestGiver.CurrentSettlement) { CompleteQuestWithCancel(VillageRaidedLog); } } private void OnWarDeclared(IFaction faction1, IFaction faction2) { if ((faction1.MapFaction == Clan.PlayerClan.MapFaction faction2.MapFaction == QuestGiver.MapFaction) || (faction2.MapFaction == Clan.PlayerClan.MapFaction faction1.MapFaction == QuestGiver.MapFaction)) { CompleteQuestWithCancel(WarDeclaredLog); } } } }} 名前
https://w.atwiki.jp/nicorpg/pages/118.html
Fooさん(ふー-) 性別 職業 タイプ 弱点 耐性 特性 男 笛のお兄さん 不明 なし 暗黒 通常攻撃の範囲が全体 装備 部位 名称 性能 説明 武器 笛 攻+25,全体攻撃 笛の音で敵全体を攻撃。威力はショボイ。 服装 黒のローブ 防+30,精+40,暗黒耐性 真っ黒なローブ。全身を覆っている。 参戦時ステータスデータ(未ドーピング) MHP MMP 攻撃力 防御力 精神力 敏捷 531 968 87 148 505 358 第31話、第32話でゲスト参戦するときのステータス。 典型的な補助系のキャラ。共に戦うメンバーが強力なため、安心してサポートに徹する事ができる。 HPはさておき、MPの高さが尋常ではない。「さくら」を乱発とかしない限りガス欠を起こすことはまずないだろう。 習得技『特殊技能』 技名 習得Lv 消費MP 効果 属性 単/全 備考 時報 19 補助 単体 味方の攻撃力、精神力を上昇 蛍の光 20 回復 単体 状態異常を回復する 赤とんぼ 48 回復 全体 味方全体のHPを回復する 夕焼け小焼け 68 補助 全体 敵の攻撃力減衰、やる気をなくす さくら ※1 280 攻撃 全体 敵全体に999固定ダメージ ※1:32話でFooさんの笛で覚醒することで習得 また、データ上では一応、エターナルフォースブリザード、ニュークリアⅢ、天呪「アポロ13」、一旦休憩、どん兵衛ちゃん、中曽根OFFを習得できることになっている。 キャラクター概要 ニコニコ動画において削除された動画に出没し、音程の外れた悲しい音色の笛を轟かす謎の男。 目当ての動画が削除された時の絶望感もあってか大多数のユーザーからは好かれていない。 が、そのつたなくも愛嬌のある演奏が一部のユーザーには愛されている。 RC2の後期から休暇を取り、Nice boat.に乗って旅に出ていたようだが、4月になって帰ってきたらしい。 ニコニコRPGでは第二章の最後から登場、最終章でピコ麻呂達の案内役を務める。 「ニコニコ」という異世界の住人であり、ニコニコの崩壊を阻止するためピコ麻呂達に協力を仰ぐ。始終敬語で紳士的な性格。 笛の力により、紫・谷口・僧侶達と同じく空間を渡ることができる。 その姿はキャラチップではローブをまとった普通の人間だが、顔グラフィックは黒い顔に「笛」と書かれているのみ。 これがどう解釈されてしまったのか、お絵かきBBSでは全身黒タイツという 一般市民を彷彿とさせるキモキャラになってしまった(笑) 元ネタと違って演奏を間違えたりはしないが、おそらくこれは笛の音声素材でつたない演奏のものが無いからだと思われる。 ニコニコ動画の削除動画には全て時報女のメッセージが入ってしまっており、素材には不適当だったのだろう。 初登場時の表記は「謎の人」。 なお、正体を公表する予定だったが今のところ有耶無耶になっている。 最近はニコニコ生放送の運営コメントの中の人として、生放送を盛り上げようとしている。 関連動画 この動画の40秒あたりでFooさんの声を聞くことが出来る。『「ド」がでねぇんだけど……』
https://w.atwiki.jp/telespo2010/pages/78.html
バンクーバー冬季オリンピック テレビ東京系列 TX・1 <概要|中継・1|朝帯|23時台> 2月20日(土)ハイライト 2月21日(日)フリースタイル スキークロス男子・予選 2月22日(月)フリースタイル スキークロス男子・決勝 2月25日(木)スピードスケート女子5000m 2月26日(金)スノーボード 女子パラレル大回転・予選 オリンピック番組 2月27日(土)スノーボード 女子パラレル大回転・決勝 2月28日(日)フィギュアスケート エキシビジョン 2月20日(土) ハイライト 18 00~19 54 1部60秒 - JPゆうちょ銀行、大和ハウス工業、FOOD ACTION NIPPON 30秒 - アサヒビール、ソフトバンクモバイル、P G、任天堂、久光製薬、呉工業 2部60秒 - トヨタ自動車、NTTグループ((東西)・(ドコモ)各30秒)、LION、トステム 30秒 - 富士ゼロックス、日本たばこ産業、JA全農、アサヒビール 3部60秒 - パナソニック、読売新聞 30秒 - 大正製薬、日清食品、かっぱ寿司、旭化成ホームズ 2月21日(日) フリースタイル スキークロス男子・予選 26 10~27 20 1部60秒 - パナソニック、日清オイリオ、日本スポーツ振興センター(toto) 30秒 - 久光製薬、FOOD ACTION NIPPON、呉工業 2部60秒 - トヨタ自動車、キリンビール、ロッテ 30秒 - NTTグループ(東西)、日清製粉グループ 2月22日(月) フリースタイル スキークロス男子・決勝 5 05~6 40 1部60秒 - 富士ゼロックス、富士フイルム 30秒 - ソフトバンクモバイル、久光製薬、モビット、マクドナルド 2部60秒 - トヨタ自動車、読売新聞 30秒 - 日清食品、FOOD ACTION NIPPON、ソニー損保 3部60秒 - NTTグループ((東西)・(ドコモ)各30秒)、HONDA 30秒 - 読売新聞、FOOD ACTION NIPPON、呉工業 2月25日(木) スピードスケート女子5000m 5 50~7 50 (TXN系列6局+三重テレビ・テレビ和歌山・岐阜放送・びわ湖放送・奈良テレビ) 1部1 30" - JPゆうちょ銀行 60秒 - KDDI 30秒 - 東洋水産、FOOD ACTION NIPPON、マクドナルド、プレサンスコーポレーション、P G 2部60秒 - コカ・コーラ、富士フイルム、綜合警備保障、日清製粉グループ 30秒 - NTTグループ(ドコモ)、久光製薬、旭化成ホームズ、トライグループ 3部1 30" - 富士ゼロックス 60秒 - トヨタ自動車、日本たばこ産業 30秒 - JPゆうちょ銀行、NEC 2月26日(金) スノーボード 女子パラレル大回転・予選 26 53~28 00 1部60秒 - トヨタ自動車、パナソニック、読売新聞 30秒 - NTTグループ(ドコモ)、FOOD ACTION NIPPON 2部60秒 - SUBARU、日本スポーツ振興センター(toto) 30秒 - JPゆうちょ銀行、日清オイリオ、NEC、武富士 オリンピック番組 28 00~29 15 1部60秒 - JPゆうちょ銀行、トライグループ 30秒 - FOOD ACTION NIPPON、出光興産、東洋水産、アートネイチャー、パナソニック 2部60秒 - NTTグループ((東西)・(ドコモ)各30秒)、トヨタ自動車、日本生命 30秒 - 富士ゼロックス、マクドナルド 2月27日(土) スノーボード 女子パラレル大回転・決勝 5 15~7 00 1部60秒 - ロッテ 30秒 - 大正製薬、FOOD ACTION NIPPON、NEC、出光興産、武富士 2部60秒 - 富士ゼロックス、富士フイルム 30秒 - NTTグループ(ドコモ)、久光製薬、モビット 3部60秒 - パナソニック、HONDA 30秒 - かぶちゃん農園、トライグループ 2月28日(日) フィギュアスケート エキシビジョン 9 00~12 19 1部60秒 - JPゆうちょ銀行、三菱電機、プロミス 30秒 - P G、東洋水産、かぶちゃん農園、アコム 2部60秒 - パナソニック、ヤマト運輸 30秒 - LION、JA全農、第一三共ヘルスケア、メルセデス・ベンツ、プレサンスコーポレーション、ほけんの窓口 3部60秒 - JPゆうちょ銀行、日本たばこ産業、トステム 30秒 - NEC、大正製薬、JACCS、トヨタ自動車 4部60秒 - ロッテ、SUBARU、富士フイルム 30秒 - NTTグループ(東西)、大和ハウス工業、モビット、キッコーマン、(PT)宝くじ 5部60秒 - HONDA、日本生命 30秒 - 日清製粉グループ、富士ゼロックス、旭化成ホームズ、集英社、久光製薬、トライグループ、FOOD ACTION NIPPON
https://w.atwiki.jp/ebi_hq/pages/1344.html
ボーイズラブコミック作品リスト 前ページBLコミック/漫画家索引/か行/く/黒娜さかき 『恋の口火』 販売巻数:2 著者:黒娜さかき 2008/12/19発売「健一と僕は親友で、幼なじみで、恋人で、今も当たり前みたいに二人一緒にいる。僕は変わらない二人の関係を愛してる。なのに、僕だけが変わっていく。歪んだ方向へ自分の足で歩いている――。」健一と悟郎シリーズ2作品に、書き下ろし24ページのシリーズ完結編「まがり角を過ぎても」を収録し、兄を兄弟以上に慕う弟のお話「SLOW FOOD」を加えた傑作短編集!「Su-Suki」「クリィムシチュー」「まがり角を過ぎても」「SLOW FOOD」を収録。 ▲このページのTOPへ eBoysLove アズノベルズ BOYS JAM! Dear+
https://w.atwiki.jp/agricola_kuigo/pages/545.html
食料集め 番号 種類 職業1+ 前提 - コスト - 点数 - ボーナス - 効果 これ以降の6ラウンドに、食料1を置く。これらのラウンドのはじめに、その食料を得る。 裁定 G5より http //playagricola.com/Agricola/Cards/index.php?id=2986 英語版 Food Collector (occ-1+) Place one food on each of the next 6 round spaces at the start of each of these rounds you recive the food. コメント 名前 コメント
https://w.atwiki.jp/fvstreamergta5/pages/408.html
プロフィール 店名 Meer und Himmel(メーア・ウント・ヒンメル) 業種 Cafe&Bar 所在地 8049/8050番地屋上 オープン日 2024年03月23日 + 目次 閉じる 店舗紹介 従業員一覧 商品一覧 イベント 店舗紹介 ● 店名の『Meer und Himmel(メーア・ウント・ヒンメル)』はドイツ語で『海と空』の意。 ● 今のところドイツ料理が多め。 ● 曜日によりCafeとBarのどちらかが開いている。 ● CafeとBarでメニューが異なる。 ● 焚き火を眺めながらChillタイムを過ごすことが出来る。 ● 季節や時間により変わる風景を楽しむことが出来る。 ● 即席でプチコンサートが開かれる場合もある。 ● 勇者とは関係がない。 従業員一覧 役職 名前 就職日 離職日 備考 店長 兎丹 カイルヴェルト U オープニングスタッフ 副店長 ユリウス カイルヴェルト J オープニングスタッフ 紗夢 らい R オープニングスタッフ 紗夢 ひかる H オープニングスタッフ 慈悠 ちゃおs C オープニングスタッフ 星乃丘 めい 2024.07.21 M オープニングスタッフ 星音 キラ 2024.09.19 + 体験 体験状況 名前 体験開始日 体験終了日 備考 体験終了 酒崎 テン 2024.04.05 2024.04.20 体験終了 神楽 まさる 2024.04.23 2024.05.10 体験終了 弥田 セイゴ 2024.05.03 2024.05.28 体験終了 星音 キラ 2024.09.08 2024.09.19 体験中 車田 しの丸 2024.09.22 商品一覧 ☕Cafeメニュー☕ - 開く 種類 商品名 価格 備考 🍴Food シュニッツェルプレート ¥10,000 🍴Food ヘルシープレート(和食) ¥10,000 🍴Food 厚切りベーコンポトフ ¥10,000 🍴Food ぷりぷりエビサラダ ¥10,000 🍴Food ツヴィーベルクーヒェン ¥10,000 🍴Food クラシックフラムクーヘン ¥10,000 🍴Food ぐるぐるソーセージ ¥10,000 ☕Drink 花茶 ¥5,000 ☕Drink マザグラン ¥5,000 ☕Drink リューデスハイマーカフェ ¥5,000 🍴Sweets ロゴ入りクッキー ¥10,000 🍴Sweets シュヴァルツヴェルダー・キルシュトルテ ¥10,000 🍴Sweets プレッツェルスナック ¥10,000 🍸️Barメニュー🍸️ アルコール等。 詳細は店舗にてご確認ください。 イベント 実施日 イベント名 備考 2024.03.15(金) 第1回Roar飲み会 参加者:16名 2024.03.20(水) Meer und Himmelプレオープン 2024.03.23(土) Meer und Himmelグランドオープン 2024.04.16(火) 第1回Meer und Himmel女子会&男子会 参加者:32名(女子会:12名、男子会:20名) 2024.05.06(月) 第2回Meer und Himmel女子会&男子会 参加者:名(女子会:名、男子会:名+心なき1名) 2024.05.28(火) 花火打ち上げサービス開始 提携:花火屋『縁赫』 2024.06.08(土) 第2回Roar飲み会 退職者お疲れ様会 2024.09.13(金) 第3回Meer und Himmel女子会&男子会 参加者:名(女子会:名、男子会:名) 🔝ページTOPへ
https://w.atwiki.jp/evony/pages/14.html
Farm(農場) Farm(農場)概要 必要条件 生産量アップ / アイテム 概要 Food(食物)を生産 序盤はFarmの数・Lvともに少なめでも問題ないが、軍隊を編成するようになると大量なFoodが必要になるため、準備は怠りなく。 必要条件 Lv. 労働人数 生産量(/時間) 生産限度量 前レベルからのレベルアップ所要量 Food Lumber Stone Iron 時間(目安) 1 10 100 10,000 50 300 200 150 30s 2 30 300 30,000 100 600 400 300 1m00s 3 60 600 60,000 200 1200 800 600 2m00s 4 100 1000 100,000 400 2400 1600 1200 4m00s 5 150 1500 150,000 800 4800 3200 2400 8m00s 6 210 2100 210,000 1600 9600 6400 4800 16m00s 7 280 2800 280,000 3200 19200 12800 9600 32m00s 8 360 3600 360,000 6400 38400 25600 19200 1h04m00s 9 450 4500 450,000 12800 76800 51200 38400 2h08m00s 10 550 5500 550,000 25600 153600 102400 76800 4h16m00s Lv.10必須アイテムMichelangelo s Script 生産量アップ Mayorに就任させているHeroのPoliticsが高いほど生産性が上がる。 Agricultureのレベルが高いほどFarmの生産性が上がる。 征服しているGlassland、Swamp、Lake(Valley参照)のレベルが高いほど生産量が上がる。 アイテム Plow share(8cent)24時間のFood生産量が25%アップ Iron rake(50cent)7日間のFood生産量が25%アップ