5 klass = self.class.to_s.gsub(/.*::/ , '').downcase
7 @fp = 'skel/' + klass + @suffix
9 @header, @footer = false, false
16 _ << "<title>#{GAME_TITLE} #{@title}</title>\n"
18 _ << "<title>#{GAME_TITLE}</title>\n"
21 head = (@vil.vid) ? HEAD2.gsub(/init\(\)/, "init(#{@vil.vid})") : HEAD2
23 # _ << @login if @login
28 FOOT + "</div></body></html>"
32 erb = Erubis::Eruby.load_file(@fp)
33 # erb = ERB.new(File.read(@fp))
36 _ << header() if @header
37 _ << erb.result(binding)
38 _ << footer() if @footer
44 def initialize(village, player)
53 attr_reader :discussions
55 def initialize(village, player, mid, livestate)
56 super(village, player)
58 @livestate = (livestate == 'live') ? 0 : 1
60 @discussions = @vil.discussions(@vil.date, @player, true)
64 !(@mid == @discussions.size)
68 @mid > @discussions.size
71 def livestate_unmatch?
72 @player.dead != @livestate
75 def need_actbox_resync?
77 dis = @discussions[0, @discussions.size - @mid].join.chomp
78 %w(announce nextra system vote room apology).each {|sysword|
89 @discussions = @vil.discussions(@vil.date, @player, true)
93 "Status: 204 No Content\n\n"
99 when Vil::Phase::Sun then 'sun'
100 when Vil::Phase::Morning then 'sun'
101 when Vil::Phase::Night then 'night'
106 S[:image_dir] + "phase_#{fn}.png"
110 class VilHeader < Base
111 def initialize(village)
115 @title = "#{@vil.vid} #{@vil.name}"
120 _.sub(/^<body(.*)>/) {
121 %Q(<body#{$1} class="phase#{@vil.phase}">)
126 class TimeLine < Base
127 def initialize(village)
133 class ActionBalloon < Base
136 def initialize(login, player, village)
142 klass = (@player.dead == 0) ? 'msg' : 'rip'
145 @fp = 'skel/' + klass + @suffix
150 #(%w(prevote vote room apology finalvote).index(s) || s != state) mod 2008/10/16 tkt
151 (%w(prevote vote room apology finalvote night).index(s) || s != state)
155 result().gsub(%r{<div id="player_wrap">\n<div id="player">(.*)</div>}m, '\1')
167 when Vil::Phase::PreVote then 'prevote'
168 when Vil::Phase::Vote then 'vote'
169 when Vil::Phase::Room then 'room'
170 when Vil::Phase::AfterRoom then 'afterroom'
171 when Vil::Phase::Apology then 'apology'
172 when Vil::Phase::FinalVote then 'finalvote'
173 when Vil::Phase::Night then 'night'
174 when Vil::Phase::Morning then 'morning'
186 @up = @vil.update_time
188 dt = Time.at(@up - Time.now)
189 dm, ds = dt.strftime("%M %S").split(' ')
190 h, m, s = @up.strftime("%H %M %S").split(' ')
192 @orders = [c(SHOW_UPDATE, h.sub(/^0/, ''), m, s, dm.sub(/^0/, ''), ds.sub(/^0/, ''))]
195 when Vil::State::Welcome
196 min_entries = (@vil.first_restart) ? S[:min_entries] : S[:apply_advance_num]
197 @orders << c(SHOW_UPDATE_PR, @vil.players.size, min_entries)
198 size = @vil.discussion_size(0)
199 if size > S[:log_max] - 50
200 @orders << c(SHOW_WASTE, size)
202 when Vil::State::Party
203 @orders << c(SHOW_WINNER, @vil.winner)
208 result().gsub(%r{<div id="order">(.*)</div>}m, '\1')
212 class SkillWhisper < Base
213 def initialize(village, player)
221 result().gsub(%r{<div id="whisper_box-wrap">(.*)</div>}m, '\1')