主题医院吧 关注:8,101贴子:46,724
  • 13回复贴,共1

从复刻版的源码中找到的有趣东西

取消只看楼主收藏回复

function Doctor:tick() Staff.tick(self) -- don't do anything if they're fired or picked up or have no hospital if self.fired or self.pickup or not self.hospital or self.dead then return end
-- if doctor is in a room and they're using an object -- then their skill level will increase _slowly_ over time if self:isLearningOnTheJob() then self:updateSkill(self.humanoid_class, "skill", 0.000003) endend
只要一个医生在房间里并且使用一个物品,那么他们的技能就会得到缓慢增长
以前在游戏中就发现把一个医生丢进房间又没病人,疲劳还是降得比在外面闲逛快。看来“使用物品”本身就是一个动作,这个动作伴随的就是技能增长和疲劳下降。。


IP属地:上海1楼2020-02-01 08:01回复
    -- Pay too low --> unhappy -- Pay too high --> happy local fair_wage = self.profile:getFairWage()
    local wage = self.profile.wage
    self:changeAttribute("happiness", 0.05 * (wage - fair_wage) / (fair_wage ~= 0 and fair_wage or 1))
    工资低于fair_wage会不满,高的话就更满意
    wage = wage + self.skill * 1000 / level_config.gbv.SalaryAbilityDivisor
    fair_wage和能力有关


    IP属地:上海2楼2020-02-01 08:29
    回复
      广告
      立即查看
      诊断:
      基础诊断值:diagnosis_base = 0.4 * (1 - diagnosis_difficulty)
      这个东西居然不受skill影响。
      但是skill大于0.9的时候有一个奖励,这个奖励还和医生的疲劳度挂钩
      也就是说skill小于0.9的诊断成功率其实是一样的


      IP属地:上海3楼2020-02-01 08:45
      收起回复
        if x and not self:getRoom() and not self.world:getObjects(x, y) and self.world.map.th:getCellFlags(x, y).buildable and (not self.world:findObjectNear(self, "bin", 8) or math.random() < 0.05)
        扔垃圾的逻辑判定和八格内有没有垃圾箱有关系


        IP属地:上海4楼2020-02-01 09:04
        回复
          cure_chance = cure_chance * self.diagnosis_progress
          诊断率太低,手动送诊的话,会增加死亡率


          IP属地:上海5楼2020-02-01 09:13
          回复
            local temperature = self.world.map.th:getCellTemperature(self.tile_x, self.tile_y) self.attributes.warmth = self.attributes.warmth * 0.75 + temperature * 0.25
            体温受影响代码
            local min_comfort_temp = 0.22 -- 11 degrees Celcius.
            local max_comfort_temp = 0.36 -- 18 degrees Celcius.
            local decrease_factor = 0.10
            local increase_happiness = 0.005
            低了或高了就减心情,舒适就加


            IP属地:上海6楼2020-02-01 09:27
            回复
              找到了
              细心程度,代码里叫attention_to_detail,切了英文版就知道是这个了
              唯一的作用就是提供医生诊断的bonus,对护士什么的都没用。
              本来找了半天还没找到以为是个大忽悠
              skill还能缩短诊断用的时间
              性格的作用还没找到


              IP属地:上海7楼2020-02-01 10:05
              回复
                性格是profile.desc 没有任何用。。不过双点医院的性格是有作用的
                以上,就是本次源码探索


                IP属地:上海8楼2020-02-01 10:13
                回复
                  广告
                  立即查看
                  护士的能力值只对病房中的诊断有用
                  对药房里配药动画的播放时间没有影响


                  IP属地:上海9楼2020-02-01 10:44
                  回复
                    local length = (math.random(200, 800) * (1.5 - staff.profile.skill)) / self.nursecount
                    -- reduce time in ward if there is more than one nurse on duty
                    病人在病房停留时间取决于护士skill和护士人数
                    length应该就是停留时间了


                    IP属地:上海10楼2020-02-01 11:12
                    收起回复
                      员工心情:
                      self.world:findObjectNear(self, "plant", 2, function(x, y)
                      两格以内所有的装饰品在每个tick都可以增加心情,比如灭火器,花,垃圾桶,书柜,骨架等等
                      注意死的花会减少心情
                      能不能穿墙未知,得看函数判定


                      IP属地:上海11楼2020-02-01 11:25
                      回复
                        复刻版暖气费用的计算是根据本月多少档次的暖气开了多少天来综合结算的。。
                        无法通过月末结算时调整来占便宜
                        暖气系统和温度计算系统比较复杂


                        IP属地:上海12楼2020-02-05 13:18
                        回复
                          暖气计算按每个格子来算:
                          1.计算所有邻接格子的平均温度
                          2.计算格子上的暖气片数量(事实上一个格子上最多可以摆放四个暖气片)影响暖气
                          分情况讨论如下:
                          1 格子没有暖气
                          iMergeRatio = 1000;
                          iMergeTemp = aiTemperature;
                          当前温度=0.25*邻接格子平均温度+0.75*前温度
                          然后受到 大气温度1/1000的影响
                          2.格子一个暖气
                          iMergeTemp = iRadiatorTemperature;
                          iMergeRatio = 2
                          当前温度=0.25*邻接格子平均温度+0.75*前温度
                          受到暖气温度1/2的影响
                          3.格子两个暖气
                          iMergeTemp = iRadiatorTemperature;
                          iMergeRatio = 1.5
                          当前温度=0.4*邻接格子平均温度+0.6*前温度
                          受到暖气温度占比2/3的影响
                          实际上一个格子最多可以摆四个暖气,如果摆四个,系数会低于0,出现bug。。。
                          温度每个tick进行一次计算,一天有50个tick,根据这样的温度算法,如果大气温度不变,最终所有格子的温度会达到一个稳态。
                          大气温度七月温度最高,一月温度最低
                          锅炉损坏是一个随机事件。受难度等级影响


                          IP属地:上海13楼2020-02-05 14:21
                          收起回复
                            暖气始终保持在最低档是最合算的
                            暖气计算温度的公式为0.25 + heat * 0.3,而支付的钱是按heat计算的,heat*75。。(开局是0.5,每次增减都改变0.1)
                            清洁工和护士的作用并不大,都可以雇佣最便宜的,冷的话给奖金就行,但一定要保证医生的温度。


                            IP属地:上海14楼2020-02-05 17:00
                            收起回复