Talk:Monster Reference: Difference between revisions
Added images of the new monsters (as wikilinks) |
m Changed the imageurls to internal wikiimages |
||
| Line 12: | Line 12: | ||
dbtowiki without any arguments will use item_db.txt and mob_db.txt in the current directory to write a monster list in wikicode to stdout. To specify custom files, call: ''dbtowiki <mob_db> <item_db>'' | dbtowiki without any arguments will use item_db.txt and mob_db.txt in the current directory to write a monster list in wikicode to stdout. To specify custom files, call: ''dbtowiki <mob_db> <item_db>'' | ||
<span style="color:red">Note: When changing all images to internal wiki images, I did so by hand and then modified the imageurls by hand, I just hope that I didn't manage to make an error there. Please remove this note when you re-generate the page (and/or fix the imageurls) and all imageurls are correct. Thanks. [[User:Thefox|Thefox]] 23:52, 22 January 2006 (CET)</span> | |||
<pre> | <pre> | ||
| Line 19: | Line 21: | ||
imageurls = { | imageurls = { | ||
'Maggot': " | 'Maggot': "[[Image:Maggot.png]]", | ||
'Scorpion': " | 'Scorpion': "[[Image:Scorpion.png]]", | ||
'RedScorpion': " | 'RedScorpion': "[[Image:RedScorpion.png]]", | ||
'GreenSlime': " | 'GreenSlime': "[[Image:GreenSlime.png]]", | ||
'GiantMaggot': " | 'GiantMaggot': "[[Image:GiantMaggot.png]]", | ||
'Yellow_slime': " | 'Yellow_slime': "[[Image:YellowSlime.png]]", | ||
'Red_slime': " | 'Red_slime': "[[Image:RedSlime.png]]", | ||
'BlackScorpion': " | 'BlackScorpion': "[[Image:BlackScorpion.png]]", | ||
'Snake' : " | 'Snake' : "[[Image:Snake.png]]", | ||
'Fire_Goblin': " | 'Fire_Goblin': "[[Image:FireGoblin.png]]", | ||
'Spider': " | 'Spider': "[[Image:Spider.png]]", | ||
'RudolphSlime': "[[Image:Rudolphslime.png]]", | 'RudolphSlime': "[[Image:Rudolphslime.png]]", | ||
'SantaSlime': "[[Image:Santaslime.png]]", | 'SantaSlime': "[[Image:Santaslime.png]]", | ||
Revision as of 22:52, 22 January 2006
Strength of Red Scorpion
Wasnt the RED scorpion supposed to be a miniboss? that HP seems kinda low for one :o --Bear
Cool, I was thinking about bosses too. I believe that Red Guy is like a boss. There are too many snakes and spiders, a DRAGON should be a good idea for a boss. But ONLY ONE DRAGON, please. --BrightCiro (Ciro Leonardo, the char)
Python program dbtowiki
This is a program to autogenerate a monster page in wikicode from eAthena configuration files.
dbtowiki without any arguments will use item_db.txt and mob_db.txt in the current directory to write a monster list in wikicode to stdout. To specify custom files, call: dbtowiki <mob_db> <item_db>
Note: When changing all images to internal wiki images, I did so by hand and then modified the imageurls by hand, I just hope that I didn't manage to make an error there. Please remove this note when you re-generate the page (and/or fix the imageurls) and all imageurls are correct. Thanks. Thefox 23:52, 22 January 2006 (CET)
#!/usr/bin/python
#Licensed under GNU General Public License
import sys, os;
imageurls = {
'Maggot': "[[Image:Maggot.png]]",
'Scorpion': "[[Image:Scorpion.png]]",
'RedScorpion': "[[Image:RedScorpion.png]]",
'GreenSlime': "[[Image:GreenSlime.png]]",
'GiantMaggot': "[[Image:GiantMaggot.png]]",
'Yellow_slime': "[[Image:YellowSlime.png]]",
'Red_slime': "[[Image:RedSlime.png]]",
'BlackScorpion': "[[Image:BlackScorpion.png]]",
'Snake' : "[[Image:Snake.png]]",
'Fire_Goblin': "[[Image:FireGoblin.png]]",
'Spider': "[[Image:Spider.png]]",
'RudolphSlime': "[[Image:Rudolphslime.png]]",
'SantaSlime': "[[Image:Santaslime.png]]",
'SleepFlower': "[[Image:Sleepflower.png]]",
'EvilMushroom': "[[Image:Evilmushroom.png]]",
'Bat': "[[Image:Bat.png]]"
}
class whatever: pass
log = []
def saveint(string):
a = 0
try:
a = int(string)
except:
a = 0
return a
def parsemonsters(file):
objects = []
for line in file:
s = line[0:line.find('//')].strip()
if s:
values = s.split(',')
if (len(values) != 54):
log.append("mob_db: Warning, monster-line with ID %s has %d values instead of 54" % (values[0], len(values)))
while (len(values) < 54):
values.append('')
while (len(values) > 54):
values.pop()
o = whatever()
o.id = saveint(values[0])
o.name = values[1]
o.jname = values[2]
o.lvl = saveint(values[3])
o.hp = saveint(values[4])
o.sp = saveint(values[5])
o.exp = saveint(values[6])
o.expj = saveint(values[7])
o.range1 = saveint(values[8])
o.atk1 = saveint(values[9])
o.atk2 = saveint(values[10])
o.defense = saveint(values[11])
o.mdefense = saveint(values[12])
o.strength = saveint(values[13])
o.agility = saveint(values[14])
o.vitality = saveint(values[15])
o.intelligence = saveint(values[16])
o.dexterity = saveint(values[17])
o.luck = saveint(values[18])
o.range2 = saveint(values[19])
o.range3 = saveint(values[20])
o.scale = saveint(values[21])
o.race = saveint(values[22])
o.element = saveint(values[23])
o.mode = saveint(values[24])
o.speed = saveint(values[25])
o.adelay = saveint(values[26])
o.amotion = saveint(values[27])
o.dmotion = saveint(values[28])
o.drop = []
for i in range(8):
o.drop.append(whatever())
o.drop[0].id = saveint(values[29])
o.drop[0].per = saveint(values[30])
o.drop[1].id = saveint(values[31])
o.drop[1].per = saveint(values[32])
o.drop[2].id = saveint(values[33])
o.drop[2].per = saveint(values[34])
o.drop[3].id = saveint(values[35])
o.drop[3].per = saveint(values[36])
o.drop[4].id = saveint(values[37])
o.drop[4].per = saveint(values[38])
o.drop[5].id = saveint(values[39])
o.drop[5].per = saveint(values[40])
o.drop[6].id = saveint(values[41])
o.drop[6].per = saveint(values[42])
o.drop[7].id = saveint(values[43])
o.drop[7].per = saveint(values[44])
o.item1 = saveint(values[45])
o.item2 = saveint(values[46])
o.mexp = saveint(values[47])
o.expper = saveint(values[48])
o.mvp = []
for i in range(3):
o.mvp.append(whatever())
o.mvp[0].id = saveint(values[49])
o.mvp[0].per = saveint(values[50])
o.mvp[1].id = saveint(values[50])
o.mvp[1].per = saveint(values[51])
o.mvp[2].id = saveint(values[52])
o.mvp[2].per = saveint(values[53])
objects.append(o)
return objects
def addimageurls(monsters):
global imageurls
for m in monsters:
if imageurls.has_key(m.name):
m.imgurl = imageurls[m.name]
else:
m.imgurl = ''
def adddropnames(monsters,dropnames):
for m in monsters:
for d in m.drop:
if dropnames.has_key(d.id):
d.name = dropnames[d.id]
else:
d.name = ''
def parseitemnames(file):
global log
dic = {}
for line in file:
s = line[0:line.find('//')].strip()
if s:
values = s.split(',')
if (len(values) < 3):
if len(values) > 0: log.append("mob_db: Warning, item-line with ID %s doesnt even have 3 values. Skipped." % (values[0], len(values)))
else:
id = int(values[0])
dic[id] = values[2];
return dic
def printlog():
global log
if len(log) > 0:
sys.stdout.write('\n---------------------------------------\n')
for line in log:
sys.stdout.write(line+'\n')
def getdropstring(monster):
i = 0
output = ""
monster.drop.sort(lambda x,y: y.per-x.per)
for d in monster.drop:
if d.name:
if (i != 0):
output += '<br>'
s = ""
if d.per >= 1000:
s = "%d" % (d.per/100)
elif d.per >= 100:
if (d.per % 100) != 0:
s = "%1.1f" % (d.per/100.0)
else:
s = "%d" % (d.per/100)
else:
if (d.per % 1000) != 0:
s = "%.2f" % (d.per/100.0)
else:
s = "%.1f" % (d.per/100.0)
output += ("%s %s%%" % (d.name.replace('_',' '), s))
i = i + 1
return output
def printmonsters(monsters):
sys.stdout.write('{| border="1" cellspacing="0" cellpadding="5" width="100%" align="center"\n')
sys.stdout.write('! style="background:#efdead;" | Image\n')
sys.stdout.write('! style="background:#efdead;" | Name\n')
sys.stdout.write('! style="background:#efdead;" | ID\n')
sys.stdout.write('! style="background:#efdead;" | HP\n')
sys.stdout.write('! style="background:#efdead;" | Attack\n')
sys.stdout.write('! style="background:#efdead;" | Exp. Points\n')
sys.stdout.write('! style="background:#efdead;" | Dropped Items\n')
for m in monsters:
sys.stdout.write('|-\n')
sys.stdout.write('| align="center" | %s\n' % m.imgurl)
sys.stdout.write('| %s\n' % m.jname.replace('_',' ') )
sys.stdout.write('| align="center" | %d\n' % m.id)
sys.stdout.write('| align="center" | %d\n' % m.hp)
if m.atk1 < m.atk2:
sys.stdout.write('| align="center" | %d-%d\n' % (m.atk1, m.atk2))
elif m.atk1 > m.atk2:
sys.stdout.write('| align="center" | %d-%d\n' % (m.atk2, m.atk1))
else:
sys.stdout.write('| align="center" | %d\n' % m.atk1)
sys.stdout.write('| align="center" | %d\n' % m.exp)
sys.stdout.write('| %s' % getdropstring(m))
sys.stdout.write('\n')
sys.stdout.write('|}')
#MAIN
try:
if (len(sys.argv) == 1):
mob_db = "mob_db.txt"
item_db = "item_db.txt"
elif (len(sys.argv) == 3):
mob_db = sys.argv[1]
item_db = sys.argv[2]
else:
mob_db = ''
item_db = ''
sys.stdout.write("Wrong number of arguments\n")
if (mob_db and item_db) :
if (not os.path.isfile(mob_db)):
sys.stdout.write("File does not exist: %s\n" % mob_db)
mob_db = ''
if (not os.path.isfile(item_db)):
sys.stdout.write("File does not exist: %s\n" % item_db)
item_db = ''
if not (mob_db and item_db):
sys.stdout.write("\nUSAGE:\n")
sys.stdout.write("dbtowiki without any arguments will use item_db.txt and mob_db.txt in the current directory.\n")
sys.stdout.write("to specify custom files, call: dbtowiki <mob_db> <item_db>\n")
exit(-1);
else:
log.append("Monster-list [mob_db] = %s" % mob_db)
log.append("Item-list [item_db] = %s" % item_db)
f = open(mob_db)
monsters = parsemonsters(f);
f = open(item_db)
itemnames = parseitemnames(f);
addimageurls(monsters)
adddropnames(monsters,itemnames)
monsters.sort(lambda x, y: x.hp*(x.atk1+x.atk2) - y.hp*(y.atk1+y.atk2) )
printmonsters(monsters)
sys.stdout.write("\n\n")
finally:
printlog()