Ver. 1.4.x
6 12p1 12p2 13p1 15p1 15p2 15p3 17p1 17p2

Ver. 1.4.0
α24 β2 β3 β4 β11 β12 β13 β16 β17 β18 β19 β20 β21 β22 Release

## Ver. 1.4.17

### Patch 2 (2013/11/04 (Mon) 17:00)

- Twitter API1.1 対応 (Rev. 858)

### Patch 1 (2013/06/23 (Sun) 19:45)

- 配役：最小補正陣営カウント修正 (Rev. 800)

## Ver. 1.4.15

### Patch 3 (2012/01/23 (Mon) 23:47)

- 発言量制限機能のバグ修正 (Rev. 481)

### Patch 2 (2012/01/21 (Sat) 23:30)

- 憑依のバグ修正 (Rev. 475)

### Patch 1 (2012/01/19 (Thu) 00:07)

- 投票済み表示の憑依関連バグ修正 (Rev. 473)

## Ver. 1.4.13

### Patch 1 (2011/12/18 (Sun) 01:25)

- 憑狼のバグ修正 (Rev. 440)

## Ver. 1.4.12

### Patch 2 (2011/11/20 (Sun) 13:27)

- ワーニングを修正 (Rev. 421)

### Patch 1 (2011/11/09 -)

- ワーニングを修正 (Rev. 420)

## Ver. 1.4.6

### include/game_vote_functions.php % 2488行目付近 (2011/02/24 (Thu) 08:24)

#### [before]

    $target->ReturnPossessed('possessed_target', $ROOM->date + 1);

#### [after]

    $target->ReturnPossessed('possessed_target', $ROOM->date + 1);
    $stack = $virtual_target->GetPartner('possessed');
    if($target->user_no == $stack[max(array_keys($stack))]){
      $virtual_target->ReturnPossessed('possessed', $ROOM->date + 1);
    }

### include/game_vote_functions.php % 1970行目付近 (2011/02/25 (Fri) 02:54)

#### [before]

    else{
      continue;
    }

#### [after]

    elseif($voted_wolf->IsRole('possessed_wolf') && $voted_wolf->IsSame($target->uname)){
      $voted_wolf->possessed_cancel = true;
    }
    else{
      continue;
    }

## Ver. 1.4.0

### room_manager.php % 312行目付近 (2010/12/28 (Tue) 19:10)

    × 0, in_array('gerd', $option_role_list) ? $USER_ICON->gerd : 0)) break;
    ○ 1, in_array('gerd', $option_role_list) ? $USER_ICON->gerd : 0)) break;

### config/server_config % 93行目付近 (2010/12/28 (Tue) 19:10)

#### [before]

      //表示する他のサーバのリスト
      var $server_list = array(
         /* 設定例
        'cirno' => array('name' => 'チルノ鯖',
                         'url' => 'http://www12.atpages.jp/cirno/',
                         'encode' => 'UTF-8',
                         'separator' => '<!-- atpages banner tag -->',
                         'footer' => '</a><br>',
                         'disable' => false),
         */
    }

#### [after]

      //表示する他のサーバのリスト
      var $server_list = array(
         /* 設定例
        'cirno' => array('name' => 'チルノ鯖',
                         'url' => 'http://www12.atpages.jp/cirno/',
                         'encode' => 'UTF-8',
                         'separator' => '<!-- atpages banner tag -->',
                         'footer' => '</a><br>',
                         'disable' => false),
         */
                              );
    }

## Ver. 1.4.0 β22

### game_vote.php % 261行目付近 (2010/12/07 (Tue) 00:09)

    × if($SELF->IsRole('evoke_scanner')){
    ○ elseif($SELF->IsRole('evoke_scanner')){

## Ver. 1.4.0 β21

### room_manager.php % 178行目付近 (2010/11/23 (Tue) 22:45)

#### [before]

    array_push($check_game_option_list, 'deep_sleep', 'mind_open', 'blinder');
    $check_option_role_list[] = 'joker';

#### [after]

    array_push($check_game_option_list, 'joker', 'deep_sleep', 'mind_open', 'blinder');

### include/user_class.php % 1200行目付近 (2010/11/23 (Tue) 22:45)

#### [before]

    $stack = array();

#### [after]

    if(! $ROOM->IsOption('joker')) return false;
    $stack = array();

### include/game_vote_functions.php % 1222行目付近 (2010/11/23 (Tue) 22:45)

    × $joker_flag = false; //ジョーカー移動成立フラグ
    ○ $joker_flag = ! $ROOM->IsOption('joker'); //ジョーカー移動成立フラグ

### include/game_vote_functions.php % 2724行目付近 (2010/11/24 (Wed) 21:00)

    × if($role_flag->bishop_priest && $user->GetCamp(true) != 'human') $live_count['dead']++;
    ○ if($user->GetCamp(true) != 'human') $live_count['dead']++;

### include/game_vote_functions.php % 2733行目付近 (2010/11/24 (Wed) 21:00)

    × if($role_flag->priest && $user->GetCamp() == 'human') $live_count['human_side']++;
    ○ if($user->GetCamp() == 'human') $live_count['human_side']++;

## Ver. 1.4.0 β20

### include/game_format.php % 22行目付近 (2010/11/15 (Mon) 03:16)

    × $SELF->live->virtual_live = true;
    ○ $SELF->virtual_live = true;

### include/game_vote_functions.php % 817行目付近 (2010/11/16 (Tue) 05:57)

#### [before]

      //リストにデータを追加
      $live_uname_list[$user->user_no] = $user->uname;
      $vote_message_list[$user->uname] = $message_list;
      $vote_target_list[$user->uname]  = $target->uname;
      $vote_count_list[$user->uname]   = $voted_number;
      foreach($ROLES->Load('vote_ability') as $filter) $filter->SetVoteAbility($target->uname);
    }

#### [after]

      //リストにデータを追加
      $live_uname_list[$user->user_no]   = $user->uname;
      $vote_message_list[$user->user_no] = $message_list;
      $vote_target_list[$user->uname]    = $target->uname;
      $vote_count_list[$user->uname]     = $voted_number;
      foreach($ROLES->Load('vote_ability') as $filter) $filter->SetVoteAbility($target->uname);
    }
    ksort($vote_message_list);
    $stack = array();
    foreach($vote_message_list as $id => $list) $stack[$USERS->ByID($id)->uname] = $list;
    $vote_message_list = $stack;

## Ver. 1.4.0 β19

### game_play.php % 264行目付近 (2010/11/06 (Sat) 04:12)

#### [before]

    $user = $USERS->ByVirtual($SELF->user_no);
    if($ROOM->IsPlaying() && $user->IsLive()){
      $ROLES->actor = $user;
      foreach($ROLES->Load('voice') as $filter) $filter->FilterVoice($voice, $say);
    }

#### [after]

    if($ROOM->IsPlaying() && $SELF->IsLive()){
      $ROLES->actor = $USERS->ByVirtual($SELF->user_no);
      foreach($ROLES->Load('voice') as $filter) $filter->FilterVoice($voice, $say);
    }

### include/role/role_class.php % 132行目付近 (2010/11/06 (Sat) 04:12)

#### [before]

    function Ignored(){
      global $ROOM, $ROLES;
      //return false; //テスト用
      return ! ($ROOM->IsPlaying() && $ROLES->actor->IsLive());
    }

#### [after]

    function Ignored(){
      global $ROOM, $USERS, $ROLES;
      //return false; //テスト用
      return ! ($ROOM->IsPlaying() && $USERS->IsVirtualLive($ROLES->actor->user_no));
    }

### include/game_vote_functions.php % 2591行目付近 (2010/11/06 (Sat) 05:09)

    × 'ogre' => 'yaksa');
    ○ 'yaksa' => 'yaksa');

### include/game_vote_functions.php % 2619行目付近 (2010/11/06 (Sat) 05:09)

    × 'ogre' => 'succubus_yaksa');
    ○ 'yaksa' => 'succubus_yaksa');

## Ver. 1.4.0 β18

### include/user_class.php % 432行目付近 (2010/10/16 (Sat) 03:18)

    × if($this->IsRole('mind_scanner')) return $this->IsVoted($vote_data, 'MIND_SCANNER_DO');
    ○ if($this->IsRole('mind_scanner', 'presage_scanner')) return $this->IsVoted($vote_data, 'MIND_SCANNER_DO');

### img/role/ (2010/10/18 (Mon) 05:33)

    × result_succbus_vampire.gif
    ○ result_succubus_vampire.gif

### game_vote.php % 143行目付近 (2010/10/20 (Wed) 04:56)

    × if(FetchResult($ROOM->GetQueryHeader('room', 'day_night') != 'beforegame')){
    ○ if(FetchResult($ROOM->GetQueryHeader('room', 'day_night')) != 'beforegame'){

## Ver. 1.4.0 β17

### include/user_class.php % 370行目付近 (2010/10/04 (Mon) 00:44)

    × return $result && ! $reverse ? 'wolf' : 'human';
    ○ return ($result xor $reverse) ? 'wolf' : 'human';

### include/room_class.php % 306行目付近 (2010/10/08 (Fri) 02:21)

    × if(empty($uname)) $uname = 'system';
    ○ if($uname == '') $uname = 'system';

## Ver. 1.4.0 β16

### include/game_vote_functions.php % 1474行目付近

#### [before]

    if($target->IsSame($vote_kill_uname)) continue;
    if($target->IsActive($stack)) $target->LostAbility();
    elseif($target->IsRole('lost_ability')){
    	$USERS->SuddenDeath($target->user_no, 'SUDDEN_DEATH_SEALED');
    }

#### [after]

    if($target->IsSame($vote_kill_uname) || ! $target->IsRole($stack)) continue;
    $target->IsActive() ? $target->LostAbility() :
      $USERS->SuddenDeath($target->user_no, 'SUDDEN_DEATH_SEALED');

### include/user_class.php % 409行目付近 (2010/08/31 (Tue) 03:59)

    × $this->IsVoted($vote_data, 'MAGE_DO');
    ○ return $this->IsVoted($vote_data, 'MAGE_DO');

### include/user_class.php % 897行目付近 (2010/09/16 (Thu) 04:22)

#### [before]

    $target = $user;
    do{ //覚醒者・夢語部ならコピー先を辿る
      if(! $target->IsRole('soul_mania', 'dummy_mania')) break;
      $stack = $target->GetPartner($target->main_role);
      if(is_null($stack)) break; //コピー先が見つからなければスキップ

      $target = $this->ByID($stack[0]);
      if($target->IsRoleGroup('mania')) $target = $user; //神話マニア系なら元に戻す
    }while(false);

    while($target->IsRole('unknown_mania')){ //鵺ならコピー先を辿る
      $stack = $target->GetPartner('unknown_mania');
      if(is_null($stack)) break; //コピー先が見つからなければスキップ

      $target = $this->ByID($stack[0]);
      if($target->IsSelf()) break; //自分に戻ったらスキップ
    }

#### [after]

    $target = $user;
    $stack  = array();
    while($target->IsRole('unknown_mania')){ //鵺ならコピー先を辿る
      $id = array_shift($target->GetPartner('unknown_mania', true));
      if(is_null($id) || in_array($id, $stack)) break;
      $stack[] = $id;
      $target  = $this->ByID($id);
    }

    //覚醒者・夢語部ならコピー先を辿る
    if($target->IsRole('soul_mania', 'dummy_mania') &&
       is_array($stack = $target->GetPartner($target->main_role))){
      $target = $this->ByID(array_shift($stack));
      if($target->IsRoleGroup('mania')) $target = $user; //神話マニア系なら元に戻す
    }

## Ver. 1.4.0 β13

### include/game_vote_functions.php % 973行目付近

    × $delete_role_list = array('lovers', 'admire_lovers', 'copied', 'copied_trick', 'copied_soul',
    ○ $delete_role_list = array('lovers', 'challenge_lovers', 'copied', 'copied_trick', 'copied_soul',

### include/game_vote_functions.php % 2510行目付近 (2010/07/19 (Mon) 09:41)

#### [before]

    case 'doll_master':

#### [after]

    case 'whisper_scanner':
    case 'howl_scanner':
    case 'telepath_scanner':
      $stack_role = 'mind_scanner';
      break;

    case 'doll_master':

### game_vote.php % 490行目付近 (2010/07/20 (Tue) 01:58)

#### [before]

    $target->AddRole($add_role);

#### [after]

    $target->AddRole($add_role);
    $target->ParseRoles($target->GetRole());

### include/game_functions.php % 835行目付近 (2010/07/21 (Wed) 01:02)

    × elseif($said_user->IsLonely('silver_wolf')){
    ○ elseif($said_user->IsWolf() && $said_user->IsLonely()){

## Ver. 1.4.0 β12

### include/game_vote_functinons.php % 176行目付近

#### [before]

    $random_replace_list = $CAST_CONF->GenerateRandomList($replace_human_list);
    $CAST_CONF->AddRandom($role_list, $random_replace_list, $over_count);

#### [after]

    $CAST_CONF->AddRandom($role_list, $replace_human_list, $over_count);

## Ver. 1.4.0 β11

### include/user_class.php % 190行目付近

#### [before]

      function IsLonely(){
        return $is_role && ($this->IsRole('mind_lonely') || $this->IsRoleGroup('silver'));
      }

#### [after]

      function IsLonely($role = NULL){
        $is_role = is_null($role) ? true : $this->IsRole($role);
        return $is_role && ($this->IsRole('mind_lonely') || $this->IsRoleGroup('silver'));
      }

### include/user_class.php % 230行目付近 (2010/07/07 (Wed) 21:40)

    × return $ROOM->date > 1 && $ROOM < 5 && $this->IsRole('challenge_lovers');
    ○ return $ROOM->date > 1 && $ROOM->date < 5 && $this->IsRole('challenge_lovers');

### game_vote.php % 295行目付近 (2010/07/07 (Wed) 23:16)

    × if(! $SELF->IsRole('scanner', 'evoke_scanner')){
    ○ if(! $SELF->IsRole('mind_scanner', 'evoke_scanner')){

### include/game_vote_functions.php % 2009行目付近 (2010/07/09 (Fri) 01:18)

    × if($target->IsRole('escaper')) break; //逃亡者は暗殺不可
    ○ if($target->IsRole('escaper')) continue; //逃亡者は暗殺不可

### include/game_functions.php % 834行目付近 (2010/07/11 (Sun) 02:22)

    × elseif($said_user->IsLonely('wolf')){
    ○ elseif($said_user->IsLonely('silver_wolf')){

## Ver. 1.4.0 β4

### user_manager.php % 35行目付近

#### [before]

    //項目被りチェック

#### [after]

    $query = "SELECT COUNT(icon_no) FROM user_icon WHERE icon_no = " . $icon_no;
    if(FetchResult($query) < 1) OutputActionResult('村人登録 [入力エラー]', '無効なアイコン番号です');

    //項目被りチェック

### user_manager.php % 275行目付近 (2010/02/24 (Wed) 21:40)

    × if($ROOM->IsOptionGroup('mania')) $wish_role_list[] = 'mania';
    ○ if($ROOM->IsOptionGroup('mania') && ! in_array('mania', $wish_role_list)) $wish_role_list[] = 'mania';

### include/game_functons.php % 751行目付近 (2010/02/28 (Sun) 02:00)

#### [before]

    $builder->AddSystemTalk($sentence, 'dummy-boy');

#### [after]

    LineToBR($sentence);
    $builder->AddSystemTalk($sentence, 'dummy-boy');

### game_vote.php % 352行目付近 (2010/02/28 (Sun) 20:25)

    × $sub_role_list = $GAME_CONF->sub_role_group_list['sudden-death'];
    ○ $sub_role_list = array_diff($GAME_CONF->sub_role_group_list['sudden-death'], array('panelist'));

## Ver. 1.4.0 β3

### game_play.php % 259行目付近

    × if($ROOM->IsPlaying() && $virtual->IsLive()){
    ○ if($ROOM->IsPlaying() && $virtual_self->IsLive()){

### include/game_format.php % 60行目付近

    × global $RQ_ARGS;
    ○ global $GAME_CONF, $RQ_ARGS;

### include/game_format.php % 83行目付近

#### [before]

    if($RQ_ARGS->add_role) $handle_name .= $user->GenarateShortRoleName(); //役職表示モード対応

#### [after]

    if($RQ_ARGS->add_role){ //役職表示モード対応
      $real_user = $talk->scene == 'heaven' ? $user : $USERS->ByReal($user->user_no);
      $handle_name .= $real_user->GenerateShortRoleName();
    }

### include/talk_class.php % 38行目付近

#### [before]

    case 'dummy_boy':
      if($this->type == $this->uname){

#### [after]

    case 'dummy_boy':
      if($this->type == 'system') break;
      if($this->type == $this->uname){

### include/game_functions.php % 236行目付近 (2010/02/22 (Mon) 23:00)

    × $handle_name .= $real_user->GenarateShortRoleName();
    ○ $handle_name .= $real_user->GenerateShortRoleName();

### include/user_class.php % 216行目付近

    × function GenarateShortRoleName(){
    ○ function GenerateShortRoleName(){

### include/game_functons.php % 461行目付近 (2010/02/28 (Sun) 02:00)

#### [before]

    $builder->AddSystemTalk($sentence, 'dummy-boy');

#### [after]

    LineToBR($sentence);
    $builder->AddSystemTalk($sentence, 'dummy-boy');

## Ver. 1.4.0 β2

### include/game_vote_functions.php % 1188行目

    × elseif(! $ROOM->IsOpenCast() && $user->IsGroup('evoke_scanner')){
    ○ elseif(! $ROOM->IsOpenCast() && $user->IsRole('evoke_scanner')){

### game_play.php % 449 行目

    × array_push($actor_list, 'poison_cat');
    ○ array_push($actor_list, '%cat', 'revive_fox');

## Ver. 1.4.0 α24

### game_play.php % 731 行目

    × $USERS->GetHandleName($target_uname) . 'さんに投票済み');
    ○ $USERS->GetHandleName($target_uname, true) . 'さんに投票済み');

### include/game_functions.php % 705 行目

    ×elseif($pseud_self->IsRole('wise_wolf')){
    ○elseif($virtual_self->IsRole('wise_wolf')){

### user_manager.php % 276 行目 (2010/01/30 02:30)

    × array_push($wish_role_list, 'mage', 'necromancer', 'priest', 'common', 'poison',
    ○ array_push($wish_role_list, 'mage', 'necromancer', 'priest', 'guard', 'common', 'poison',

### include/game_functions.php % 400 行目付近 (2010/02/01 (Mon) 00:15)

#### [before]

    $said_user = $USERS->ByVirtualUname($talk->uname);

#### [after]

    if(strpos($talk->location, 'heaven') === false)
      $said_user = $USERS->ByVirtualUname($talk->uname);
    else
      $said_user = $USERS->ByUname($talk->uname);

### include/game_vote_functions % 1865 行目付近

#### [before]

    $target->dead_flag = false; //死亡フラグをリセット
    $USERS->Kill($target->user_no, 'WOLF_KILLED');
    if($target->revive_flag) $target->Update('live', 'live'); //蘇生対応

#### [after]

    if(isset($target->user_no)){
      $target->dead_flag = false; //死亡フラグをリセット
      $USERS->Kill($target->user_no, 'WOLF_KILLED');
      if($target->revive_flag) $target->Update('live', 'live'); //蘇生対応
    }