游牧风云吧 关注:4,742贴子:253,513
  • 25回复贴,共1

modding 教学(大坑) Ⅱ

只看楼主收藏回复

K娘居然要人再发一个才精
那麼,第二章自然是modding的核心部分,决议-事件-任务,在这一部分中会让你了解到游戏的基本运作方式,而学过C++/C语言的人应该可以迅速跨过这一部分。同时这也是整个modding过程中最要命的部分,新人在刚刚开始尝试写决议和事件的时候经常会弄混省份用代码和国家用代码,或者括号忘记打。所以接下来,我会把国家决议和省份决议的写法简单的做一下示范,你们把简单的部分做完,自然会裏清楚思路,并放胆去试吧。
1,决议
要新建一个决议需要打开EU3 Divine Wind\decisions文件夹,并在此处新建一个TXT档案。
接下来输入:

输入完成后再储存,之后打开游戏,选择一个国家之后进行游戏,在决议栏中便可以看见:
完成这一步再往下看
如果你成功了,接下来要讲解一下,国家决议的格式:
P.S:先观察一下每句语句的括号,你可以得知在每一句“定义”中他的内容必须在同一个括号下,第一句country_decisions是整个文件的定义所以要括住全部内容,第二句just_a_cat是这个决议的名字所以要括住决议的内容,如此类推,第三句potential 是指显示这个决议的条件,那它括住的便是什麼条件了。
country_decisions = { #宣告这是一个国家决议
just_a_cat = { #宣告和定义这个决议的名称(和国家简写是一个性质所以不能用中文)
potential = { #在什麼条件下这个决议会出现
ai = no #条件为当下国家不是AI
}
allow = { #满足哪些条件才可以点击这个决议
ai = no #当前国家不是AI
}
effect = { #点击这个决议会带给国家什麼
treasury = 10 #添加10块钱
}
ai_will_do = { #ai会不会点击这个决议?
factor = 0 #不会,如果填1就是会
}
}
}
以上便是国家决议的主要部分:country_decisions,potential ,allow ,effect , ai_will_do。我们整理一下上面那段代码就可以得出这个决议的意思:只要你不是AI就可以拿10块钱。但实际上是无限块钱,我们想一想当我们点下决议后,我们还符不符合点决议的要求?是可以的,所以这就形成了循环决议,没有什麼意义了。要令一个决议只会生效一次的方法自然便是使决议执行后那个国家就不再符合条件了,我以成立大不列颠为例,成立大不列颠决议的出现条件是
potential = {
NOT = { exists = GBR } #大不列颠不存在
NOT = { tag = PAP } #你不是教皇国
NOT = { tag = HRE } #你不是神圣罗马帝国
OR = { #括号中任意一项符合条件即可
culture_group = british #你的文化属於大不列颠
primary_culture = welsh #你的主流文化是威尔士
}
}
当你点下成立大不列颠的决议时,大不列颠便存在了,所以这个决议就会消失,不会形成循环。但是,当你发现你设计的决议无法像这个决议一样解决循环问题时就要依靠FLAG。
我们再打开刚才我输入的那段代码,如图添加上:
像这样,图中上面新增那句代表我需要没有一个国家旗帜叫there_are_no_cat,而下面那句意思是为国家添加一个旗帜叫there_are_no_cat,当你点下决议时因为你已经拥有了这个旗帜所以这个决议也就消失了。旗帜分三种,省份的,国家的,世界的,主要用途其实是用来完成一个事件组,或者以一个国家触发但会影响全世界(世界旗帜)


1楼2013-08-03 22:15回复
    很好,等你整合完毕后会给你精品的……开两个帖子属于骗精两次?哦,也许不是


    IP属地:河南2楼2013-08-03 22:24
    收起回复
      省份决议:
      依旧在EU3 Divine Wind\decisions文件夹下创建一个新文档(实际上一个文档可以装下多个决议这里只是方便理清)
      如图写下以下代码:

      解释
      province_decisions = { #宣告这是一个省份决议
      just_a_dog = { #决议名称
      potential = { #出现条件
      owner = { #省份拥有者(这是一个关联,由於省份决议预设所有定义和判断都放在省份上,所以要在省份决议中判断国家的条件就要加上这句,而在国家决议中判断省份或给省份添加效果则是直接以省份号码加括号即可,如:322 = { 效果/判断 })
      ai = no #省份拥有者不是ai
      }
      NOT = { #括号内的条件不能符合,也就是以下条件不符合才能显示这个决议
      has_province_flag = oh_man #拥有省份旗帜:oh_man
      }
      }
      allow = { #符合以下条件才能点下决议
      citysize = 1000 #该省分有1000人,看完第一章的人不会忘了citysize的意思吧
      }
      effect = { #决议点下后给省份带来的影响
      citysize = 1000 #该省分增加1000人
      set_province_flag = oh_man #增加一个省份旗帜名为oh_man
      }
      ai_will_do = { factor = 0
      }
      }
      }
      由於这个决议所设下的是省份旗帜,这代表着这个旗帜不会在其他省份生效,其他省份依然可以点下这个决议


      3楼2013-08-03 22:48
      收起回复
        宗教决议:
        宗教决议的判断方式是和国家决议一样所以这里我会做一个小测试,看你能不能自己读懂以下代码:
        religion_decisions = {
        send_papal_delegate = {
        potential = {
        religion = catholic
        NOT = { papal_influence = 0.25 }
        papacy_active = yes #这句的意思是指教廷还存在
        }
        allow = {
        missionaries = 1
        }
        effect = {
        add_papal_influence = 0.02
        missionaries = -1
        }
        ai_will_do = {
        factor = 1
        modifier = { #这个是AI的考虑因素
        NOT = { missionaries = 2 } #在传教士不足两个时
        factor = 0 #ai不会去点这个决议
        }
        }
        }
        答案:这是一个宗教决议,这个国家的宗教要是天主教,在教廷的影响力不足25百分比而且教廷存在决议就会出现,只要你有一个传教士就可以执行决议,决议会消耗你一个传教士,增加2百分比的教廷影响力,ai会点击这个决议,但在传教士不足两个时,ai不会点击这个决议


        4楼2013-08-03 22:59
        收起回复
          现在代码翻译在手的同学,在进入“事件”编写这一环时就非常简单了。和决议不同,事件是突然发生的,事件分为三种类型:国家事件,省份事件以及比较有意思的“即时事件”
          事件一般都会设置为循环的,但为了避免会出现像决议一样立即循环,事件存在一个叫做MTTH的概念,也就是多久会发生一次,而计算时间的数字是表示着多少天。我们现在先以国家事件做示范:

          country_event = { #定义这是一个国家事件
          id = 60001 #事件的编号,每个事件一个编号
          trigger = { #扳机,也就是符合以下条件时事件会开始计算时间然后触发事件,如果没有使用MTTH就会立即发生
          OR = { #以下任一符合即可
          tag = CAS #是卡斯提尔
          tag = POR #是葡萄牙
          tag = ARA #是阿拉贡
          }
          controls = 509 #控制了509省份
          exists = GRA #格兰纳达存在
          not = {
          has_global_flag = shoufushidi #没有世界旗帜:shoufushidi
          }
          }
          title = "EVTNAME60001" #事件的题目,格式是EVTNAME"事件编号"
          desc = "EVTDESC60001" #事件的描述,格式是EVTDESC"事件编号"
          mean_time_to_happen = { #MTTH,设置事件发生的周期
          days = 1 #符合条件时一天后事件发生
          }
          option = { #提供的选项,一个option =代码的括号内只能容纳一个选择,所以在设置第二个选择时,要再打一个option =
          name = "EVTOPTA60001" #定义一个选项,格式是EVTOPTA"事件编号",此处的OPTA代表着这是选择A,若是要创造另一个选择,那麼就会是EVTOPTB了
          andalusia = { #指向安达卢西亚地区
          add_core = THIS #为触发事件的国家增加核心在安达卢西亚地区
          }
          set_global_flag = shoufushidi #设置世界旗帜shoufushidi
          }
          }
          总结一下:事件的结构包括:定义事件的性质,设置触发事件的条件,定义事件的编号、题目,描述,设置发生时间,设置选项,设置选项的内容


          6楼2013-08-04 16:33
          回复
            第二章完,只要你把这两章的福利和知识消化完你基本上可以去做一个小型mod,那麼第三章以及往后我会讲解每个文件的修改规则,例如怎麼改政体,宗教,文化


            9楼2013-08-04 18:19
            回复
              你这么分开发 让我加精哪个好呢。。


              10楼2013-08-04 18:21
              收起回复
                额,好坑。
                除了麻烦一点没什么亮点啊


                11楼2013-08-04 18:36
                收起回复
                  eu4的时候搞一个mod吧怎么样


                  IP属地:北京来自手机贴吧12楼2013-08-04 18:41
                  回复
                    好顶赞


                    IP属地:甘肃13楼2013-08-04 22:55
                    回复
                      set_country_flag = trade_company
                      这句话是我从东印度贸易决议里找的,翻译过来是获得修正:贸易公司,但我无论从triggered_modifiers还是event_modifiers都没有找到trade_company这个修正


                      IP属地:上海14楼2013-08-05 00:37
                      收起回复