文明4吧 关注:20,549贴子:760,223

回复:【求抚摸帖】RFC代码解析进度

只看楼主收藏回复

感冒了啊,脑子里面一片浆糊,碰到稍微要想多一点的算式就头昏脑胀,我还是往下看吧,E:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\Mods\RFC Dawn of Civilization\Assets\Python\CityNameManager.py这个内容好多。


21楼2011-11-02 10:48
回复
    E:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\Mods\RFC Dawn of Civilization\Assets\Python\CityNameManager.py
    该文件第三部分第二小段,描述了特定城市被特定文明占据时名称变化的算式,照例我找到了china作为实验对象。
    由表我们知道Yerushalayim不在china的改名表格内,Kyouto在china的改名表格内。于是我们打开bc3000地图,选择china,等待五回合后用wb占领Yerushalayim。
    返回结果为china占领Yerushalayim之后名称未变。打开ad600地图,选择china,依然等待五回合后用wb占领Kyouto,返回结果为china占领Kyouto之后名称改为jingdu。


    22楼2011-11-02 11:25
    回复
      2025-11-15 21:57:44
      广告
      不感兴趣
      开通SVIP免广告
      def renameCities(self, city, iNewOwner):
      """Renames a city depending on its owner"""
      sName = city.getName()
      if (iNewOwner == iChina):
      if (sName == 'Khanbaliq' or sName == 'Pekin' or sName == 'Hokkin'):
      city.setName('Beijing', False)
      if sName == 'Shinkyo':
      city.setName('Changchun', False)
      if (sName == 'Chach' or sName == 'Shash' or sName == 'Tashkent' or sName == 'Binkath'):
      city.setName('Cheshih', False)
      if (sName == 'Seoul' or sName == 'Hanseong' or sName == 'Keijou' or sName == 'Seul'):
      city.setName('Hancheng', False)
      if sName == 'Port Edward':
      city.setName('Weihai', False)
      if (sName == 'Cantão' or sName == 'Canton' or sName == 'Koushuu'):
      city.setName('Guangzhou', False)
      if (sName == 'Laoag' or sName == 'Raoagu'):
      city.setName('Laowo', False)
      if (sName == 'Vladivostok' or sName == 'Urajio' or sName == 'Port May'):
      city.setName('Fuladiwosituoke', False)
      if (sName == 'Singapura' or sName == 'Singapur' or sName == 'Singapore' or sName == 'Shounantou'):
      city.setName('Xinjiapo', False)
      if (sName == 'Mukden' or sName == "Shin'you"):
      city.setName('Shenyang', False)
      if (sName == 'Dilli' or sName == 'Delhi' or sName == 'New Delhi'):
      city.setName('Deli', False)
      if (sName == 'Macao' or sName == 'Macau' or sName == 'Makao'):
      city.setName('Aomen', False)
      if (sName == 'Hong Kong' or sName == 'Honkon' or sName == 'Gon Kong' or sName == 'Sjangan'):
      city.setName('Xianggang', False)
      if (sName == 'Takao' or sName == 'Kaohsiung'):
      city.setName('Gaoxiong', False)
      if (sName == 'Taihoku'):
      city.setName('Taibei', False)
      if (sName == "Dal'nij" or sName == 'Dairen'):
      city.setName('Dalian', False)
      if (sName == 'Rome' or sName == 'Rom' or sName == 'Rumiya' or sName == 'Roma'):
      city.setName('Daqin', False)
      if (sName == 'Shanhai'):
      city.setName('Shanghai', False)
      if (sName == 'Chichiharu'):
      city.setName('Qiqihaer', False)
      


      23楼2011-11-02 11:25
      回复
        if (sName == 'Fukushuu'):
        city.setName('Fuzhou', False)
        if (sName == 'Seitou' or sName == 'Tsingtau'):
        city.setName('Qingdao', False)
        if (sName == 'Chonjin'):
        city.setName('Chongjin', False)
        if (sName == 'Uonsan' or sName == 'Genzan'):
        city.setName('Wonsan', False)
        if (sName == 'Kinshuu' or sName == "Czin'chzhou"):
        city.setName('Jinzhou', False)
        if (sName == 'Kuishuu'):
        city.setName('Hangzhou', False)
        if (sName == 'Nankin'):
        city.setName('Nanjing', False)
        if (sName == 'Kaihou'):
        city.setName('Kaifeng', False)
        if (sName == 'Anyou'):
        city.setName('Anyang', False)
        if (sName == 'Kyokufu'):
        city.setName('Qufu', False)
        if (sName == 'Nanshou'):
        city.setName('Nanchang', False)
        if (sName == 'Heihouku'):
        city.setName('Pingfang', False)
        if (sName == 'Seian'):
        city.setName("Xi'an", False)
        if (sName == 'Rakuyou'):
        city.setName('Luoyang', False)
        if (sName == 'Chousa'):
        city.setName('Changsha', False)
        if (sName == 'Jousai'):
        city.setName('Chongqing', False)
        if (sName == 'Kyou'):
        city.setName('Guiyang', False)
        if (sName == 'Nannei'):
        city.setName('Nannei', False)
        if (sName == 'Konmei'):
        city.setName('Kunming', False)
        if (sName == 'Ranshuu'):
        city.setName('Lanzhou', False)
        if (sName == 'Anzan'):
        city.setName('Anshan', False)
        if (sName == 'Seito'):
        city.setName('Changdu', False)
        if (sName == 'Bukan'):
        city.setName('Wuhan', False)
        if (sName == 'Hakuniuu'):
        city.setName('Hegang', False)
        if (sName == 'Botankou' or sName == "Mudan'czjan"):
        city.setName('Mudanjiang', False)
        


        24楼2011-11-02 11:25
        回复
          if (sName == 'Pataliputra' or sName == 'Patna' or sName == 'Palibothra' or sName == 'Azimabad' or sName == 'Kashijou'):
          city.setName('Huazhicheng', False)
          if (sName == 'Tsuuryou'):
          city.setName('Tungliao', False)
          if (sName == 'Goshuu'):
          city.setName('Wuzhow', False)
          if (sName == 'Shunsen' or sName == "Chunchkhon"):
          city.setName('Chuncheon', False)
          if (sName == 'Fuzan'):
          city.setName('Pusan', False)
          if (sName == 'Hakuryoku' or sName == 'Khabarovsk'):
          city.setName('Boli', False)
          if (sName == 'Choukakou'):
          city.setName('Zhangjiakou', False)
          if (sName == 'Nekka'):
          city.setName('Jehol', False)
          if (sName == 'Hairaru' or sName == 'Hulun'):
          #Japan
          if (sName == 'Oosaka'):
          city.setName('Daban', False)
          if (sName == 'Edo' or sName == 'Toukyou' or sName == 'Tokio'):
          city.setName('Jianghu', False)
          if (sName == 'Yokohama'):
          city.setName('Hengbin', False)
          if (sName == 'Nagoya'):
          city.setName('Mingguwu', False)
          if (sName == 'Sapporo'):
          city.setName('Zahuang', False)
          if (sName == 'Kyouto' or sName == "Kioto"):
          city.setName('Jingdu', False)
          if (sName == 'Niigata'):
          city.setName('Xinxi', False)
          if (sName == 'Kushiro'):
          city.setName('Chuanlu', False)
          if (sName == 'Kagoshima' or sName == "Kagosima"):
          city.setName("Lu'erdao", False)
          if (sName == 'Akita'):
          city.setName('Qiutian', False)
          if (sName == 'Hiroshima'):
          city.setName('Guangdao', False)
          if (sName == 'Nagasaki'):
          city.setName('Changqi', False)
          if (sName == 'Fukuoka'):
          city.setName('Fugang', False)
          if (sName == 'Hakata'):
          city.setName('Boduo', False)
          if (sName == 'Aomori'):
          city.setName('Qingsen', False)
          if (sName == 'Toyohara'):
          city.setName('Fengyuan', False)
          if (sName == 'Matsuyama'):
          city.setName('Songshan', False)
          if (sName == 'Nagano'):
          city.setName('Changye', False)
          if (sName == 'Sendai'):
          city.setName('Xiantai', False)
          if (sName == 'Nara'):
          city.setName('Nailiang', False)
          #Khmer
          if sName == 'Indrapura':
          city.setName('Da Nang', False)
          if sName == 'Vijaya':
          city.setName('Qui Nhon', False)
          if sName == 'Panduranga':
          city.setName('Phan Rang', False)
          if sName == 'Kauthara':
          city.setName('Nha Trang', False)


          25楼2011-11-02 11:25
          回复
            ……召唤删掉重复的和这一楼


            26楼2011-11-02 11:26
            回复
              咦,不是重复的!我的话被度娘强行分成三部分了


              27楼2011-11-02 11:27
              回复
                E:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\Mods\RFC Dawn of Civilization\Assets\Python\CityNameManager.py
                该文件第三部分第三小段描述的是在实行GYJJ体质时名称会出现变化,例如圣彼得堡和察里津,这个就不多说了。
                该文件第三部分第四小段描述的是某些城市在某些特定国家占据时进入某些时代之后,城市名称会出现变化,例如Chang'an会变成Xi'an。
                def onTechAcquired(self, iPlayer):
                era = gc.getPlayer(iPlayer).getCurrentEra()
                if ((iPlayer == iChina or iPlayer == iMongolia or iPlayer == iJapan) and era == con.iMedieval):
                cityList = PyPlayer(iPlayer).getCityList()
                for pCity in cityList:
                city = pCity.GetCy()
                if (city.getName() == "Chang'an"):
                city.setName("Xi'an", False)
                break
                至此CityNameManager.py文件大体解析完毕,进入下一个文件,但是两个问题依然保留没有解决
                


                28楼2011-11-02 11:35
                回复
                  2025-11-15 21:51:44
                  广告
                  不感兴趣
                  开通SVIP免广告
                  原来天朝占领罗马后罗马会命名为大秦……


                  IP属地:广东29楼2011-11-02 12:09
                  回复
                    根据28楼的代码不是到了现代才会变“西安”咩?肿么好像我玩RFC在那里建城一直是“西安”不是“长安”……


                    IP属地:广东30楼2011-11-02 12:11
                    回复
                      不是现代,是中古时代


                      来自手机贴吧31楼2011-11-02 12:27
                      回复
                        看错了……是研发“货币制度”后变为“西安”么?怎么这么早……


                        IP属地:广东32楼2011-11-02 12:49
                        回复
                          在比比c没学过?


                          IP属地:广东来自手机贴吧33楼2011-11-02 12:53
                          回复
                            才开课……


                            IP属地:广东34楼2011-11-02 15:13
                            回复
                              2025-11-15 21:45:44
                              广告
                              不感兴趣
                              开通SVIP免广告
                              E:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\Mods\RFC Dawn of Civilization\Assets\Python\const.py
                              我记得有人问过怎么修改文明出生时间,想把希腊文明和四大古国同时出现,那么答案就在这里。
                              该文件可以找到# civ birth dates,这段文字是这样描述的:
                              # converted to years - edead
                              tBirth = (
                              -3000, # 0, #3000BC
                              -3000, # 0, #3000BC
                              -3000, # 0, #3000BC
                              -3000, # 0, #3000BC
                              -1600, # 50, #1600BC
                              -850, # 84, #844BC
                              -1200, # 66, #814BC # Leoreth: 1200 BC
                              -753, # 90, #753BC
                              -660, # 97, #660BC
                              -300, # 121, #300BC
                              60, # 145, #60AD
                              330,
                              551, # 177, #551AD
                              620, # 183, #622AD
                              655, # 187, #657AD
                              720, # 193, #718AD
                              750, # 196, #751AD
                              820, # 203, #829AD
                              840, # 205, #843AD
                              860, # 207, #860AD
                              1500, # 281, #922AD # Leoreth: 1500 AD
                              989, # 220, #989AD
                              1130, # 234, #1128AD
                              1150, # 236, #1150AD
                              1190, # 240, #1190AD
                              1200, # 241, #1195AD
                              1280, # 249, #1280AD (1071AD)
                              1775, # 346, #1775AD #332 for 1733AD
                              -3000, # 0,
                              -3000, # 0,
                              -3000, # 0,
                              -3000, # 0,
                              -3000, # 0)
                              )
                              从上到下分别对应各个文明,为了考证修改是否可行,我找了AD600出生顺序比较靠前的france,其birth对应的条目是750, # 196, #751AD,我先将其修改为710, # 191, #711AD,即提前到西班牙出生前一回合出生。进入游戏,返回结果为710AD出生,第二回合西班牙出生,不影响独立城邦加入,不影响赠送工人,不影响科技研究速度。
                              而后我找到了AD1775出生的America,其birth对应条目是1775, # 346, #1775AD #332 for 1733AD,我先将其修改为710, # 191, #711AD,即提前到西班牙出生前一回合出生。进入游戏,返回结果为710AD出生,第二回合西班牙出生,但科技全部变为需求1瓶子。
                              结论,猜测America有特殊算法,暂且压下疑问。


                              35楼2011-11-02 15:54
                              回复