OSDN Git Service

死体食いの一時的修正&HTMLタグ閉じ漏れ等修正
[wolvez/wolvez.git] / trunk / lib / ms / activepage.rb
1 module ActivePage
2         
3         class Base
4                 def initialize
5                         klass = self.class.to_s.gsub(/.*::/ , '').downcase
6                         @suffix = '.rjhtml'
7                         @fp = 'skel/' + klass + @suffix
8
9                         @header, @footer = false, false
10                 end
11
12                 def header
13                         _ = HEAD1
14
15                         if @title
16                                 _ << "<title>#{GAME_TITLE} #{@title}</title>\n"
17                         else
18                                 _ << "<title>#{GAME_TITLE}</title>\n"
19                         end
20
21                         head =  (@vil.vid) ? HEAD2.gsub(/init\(\)/, "init(#{@vil.vid})") : HEAD2
22                         _ << head
23                         # _ << @login if @login
24                         _
25                 end
26
27                 def footer
28                         FOOT + "</div></body></html>"
29                 end
30
31                 def result
32                         erb = Erubis::Eruby.load_file(@fp)
33                         # erb = ERB.new(File.read(@fp))
34                         erb.filename = @fp
35                         _ = ''
36                         _ << header() if @header
37                         _ << erb.result(binding)
38                         _ << footer() if @footer
39                         _
40                 end
41         end
42
43         class Day < Base
44                 def initialize(village, player)
45                         super()
46
47                         @vil = village
48                         @player = player
49                 end
50         end
51
52         class SyncDay < Day
53                 attr_reader :discussions
54
55                 def initialize(village, player, mid, livestate)
56                         super(village, player)
57                         @mid = mid.to_i
58                         @livestate = (livestate == 'live') ? 0 : 1
59
60                         @discussions = @vil.discussions(@vil.date, @player, true)
61                 end
62
63                 def modified?
64                         !(@mid == @discussions.size)
65                 end
66
67                 def nonmatch?
68                         @mid > @discussions.size
69                 end
70
71                 def livestate_unmatch?
72                         @player.dead != @livestate
73                 end
74
75                 def need_actbox_resync?
76                         ret = false
77                         dis = @discussions[0, @discussions.size - @mid].join.chomp
78                         %w(announce nextra system vote room apology).each {|sysword|
79                                 if dis.index(sysword)
80                                         ret = true
81                                         break
82                                 end
83                         }
84
85                         ret
86                 end
87
88                 def sync
89                         @discussions = @vil.discussions(@vil.date, @player, true)
90                 end
91
92                 def not_modified
93                         "Status: 204 No Content\n\n"
94                 end
95
96                 def bgimage
97                         fn = \
98                                 case @vil.phase
99                                 when Vil::Phase::Sun then 'sun'
100                                 when Vil::Phase::Morning then 'sun'
101                                 when Vil::Phase::Night then 'night'
102                                 else
103                                         'prenight'
104                                 end
105
106                         S[:image_dir] + "phase_#{fn}.png"
107                 end
108         end
109
110         class VilHeader < Base
111                 def initialize(village)
112                         super()
113                         @vil = village
114                         @header = true
115                         @title = "#{@vil.vid} #{@vil.name}"
116                 end
117
118                 def header
119                         _ = super
120                         _.sub(/^<body(.*)>/) {
121                                 %Q(<body#{$1} class="phase#{@vil.phase}">)
122                         }
123                 end
124         end
125
126         class TimeLine < Base
127                 def initialize(village)
128                         super()
129                         @vil = village
130                 end
131         end
132
133         class ActionBalloon < Base
134                 attr_reader :state
135
136                 def initialize(login, player, village)
137                         super()
138
139                         @login = login
140                         @player = player
141                         @vil = village
142                         klass = (@player.dead == 0) ? 'msg' : 'rip'
143                         @state = _state()
144
145                         @fp = 'skel/' + klass + @suffix
146                 end
147
148                 def result?(state)
149                         s = _state()
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)
152                 end
153
154                 def sync_result
155                         result().gsub(%r{<div id="player_wrap">\n<div id="player">(.*)</div>}m, '\1')
156                 end
157
158                 private
159
160                 def _state
161                         @state = __state()
162                         @state
163                 end
164
165                 def __state
166                         case @vil.phase
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'
175                         else
176                                 'std'
177                         end
178                 end
179         end
180
181         class Order < Base
182                 def initialize(vil)
183                         super()
184
185                         @vil = vil
186                         @up = @vil.update_time
187
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(' ')
191
192                         @orders = [c(SHOW_UPDATE, h.sub(/^0/, ''), m, s, dm.sub(/^0/, ''), ds.sub(/^0/, ''))]
193
194                         case vil.state 
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)
201                                 end
202                         when Vil::State::Party
203                                 @orders << c(SHOW_WINNER, @vil.winner)
204                         end
205                 end
206
207                 def sync_result
208                         result().gsub(%r{<div id="order">(.*)</div>}m, '\1')
209                 end
210         end
211
212         class SkillWhisper < Base
213                 def initialize(village, player)
214                         super()
215
216                         @vil = village
217                         @player = player
218                 end
219
220                 def sync_result
221                         result().gsub(%r{<div id="whisper_box-wrap">(.*)</div>}m, '\1')
222                 end
223         end
224
225 end