chiark / gitweb /
Add +/-0.5s to wait times to make behaviour less clumpy
[ypp-sc-tools.db-test.git] / yoweb-scrape
index 08ebf8eccf131819e41bdf6f007cc7b848d2dffe..b43e5a2ea728379e9d2fea85243b415fd3e23bb3 100755 (executable)
@@ -1,4 +1,32 @@
 #!/usr/bin/python
+# This is part of ypp-sc-tools, a set of third-party tools for assisting
+# players of Yohoho Puzzle Pirates.
+#
+# Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+# are used without permission.  This program is not endorsed or
+# sponsored by Three Rings.
+
+copyright_info = '''
+yoweb-scrape is part of ypp-sc-tools  Copyright (C) 2009 Ian Jackson
+This program comes with ABSOLUTELY NO WARRANTY; this is free software,
+and you are welcome to redistribute it under certain conditions.
+For details, read the top of the yoweb-scrape file.
+'''
 
 #---------- setup ----------
 
@@ -15,6 +43,7 @@ import re as regexp
 import random
 import curses
 import termios
+import random
 from optparse import OptionParser
 from StringIO import StringIO
 
@@ -40,7 +69,7 @@ duty_puzzles = ([ 'Navigating', 'Battle Navigation' ] +
                core_duty_puzzles +
                [ 'Treasure Haul' ])
 
-standingvals = ('Able/Distinguished/Respected/Master'+
+standingvals = ('Able/Proficient/Distinguished/Respected/Master'+
                '/Renowned/Grand-Master/Legendary/Ultimate').split('/')
 standing_limit = len(standingvals)
 
@@ -114,12 +143,14 @@ class Fetcher:
                min_age = 1
                need_wait = 0
                for age in ages:
-                       if age < min_age and age < 300:
+                       if age < min_age and age <= 5:
                                debug('Fetcher   morewait min=%d age=%d' %
                                        (min_age, age))
                                need_wait = max(need_wait, min_age - age)
                        min_age += 3
                        min_age *= 1.25
+               if need_wait > 0:
+                       need_wait += random.random() - 0.5
                return need_wait
 
        def _rate_limit_cache_clean(self, now):
@@ -448,7 +479,7 @@ class PirateAboard:
                                return pa.pi
                        debug('PirateAboard refresh %d > %d  %s' % (
                                age, guide, pa.name))
-                       imaginary = [2,6]
+                       imaginary = [2,4]
                else:
                        imaginary = [1]
                wait = fetcher.need_wait(now, imaginary)
@@ -1030,7 +1061,9 @@ def do_ship_aid(args, bu):
 
 class KeyBasedSorter:
        def compar_key_pa(self, pa):
-               return self.compar_key(pa.pirate_info())
+               pi = pa.pirate_info()
+               if pi is None: return None
+               return self.compar_key(pi)
        def lsort_pa(self, l):
                l.sort(key = self.compar_key_pa)
 
@@ -1099,8 +1132,11 @@ def ship_aid_core(myself, track, displayer, kreader):
 
                tbl_s = StringIO()
                tbl = StandingsTable(tbl_s)
-               tbl.headings(' %d aboard' % len(aboard),
-                               '  sorted by '+sort.desc())
+
+               if track.vesselname(): howmany = ' %d aboard' % len(aboard)
+               else: howmany = ''
+
+               tbl.headings(howmany, '  sorted by '+sort.desc())
 
                for pa in aboard:
                        pi = pa.pirate_info()
@@ -1180,8 +1216,7 @@ actions:
 
 display modes (for --display) apply to ship-aid:
  --display=dumb       just print new information, scrolling the screen
- --display=overwrite  use cursor motion, selective clear, etc. to redraw at top
-''')
+ --display=overwrite  use cursor motion, selective clear, etc. to redraw at top''')
        ao = pa.add_option
        ao('-O','--ocean',dest='ocean', metavar='OCEAN', default=None,
                help='select ocean OCEAN')
@@ -1211,6 +1246,7 @@ display modes (for --display) apply to ship-aid:
        random.seed()
 
        if len(args) < 1:
+               print >>sys.stderr, copyright_info
                pa.error('need a mode argument')
 
        if opts.debug_fd is not None: