Programming Forums
User Name Password Register
 

RSS Feed
FORUM INDEX | TODAY'S POSTS | UNANSWERED THREADS | ADVANCED SEARCH

Reply
 
Thread Tools Display Modes
Old May 9th, 2005, 10:02 PM   #1
Sane
Programming Guru
 
Sane's Avatar
 
Join Date: Apr 2005
Location: Waterloo, Ontario
Posts: 1,888
Rep Power: 5 Sane will become famous soon enough
Send a message via MSN to Sane
Thumbs up Some Nifty Code

A Battle Screen where the monsters and attacks and spells are programmed from a text file! :eek:

I made a translator program that will read a dat file (text file) and translate it into Python to become an enemy object, or a spell, or an attack. I'm soon to do items and abilities too.

data/spells.dat
Translator module programmed by JDI.

Add spells in the format:
[SpellName_Advantage_Weakness_Power_RandomFactor_MPUse]

<Fire/Ice/Water/2/1/4>
<Ice/Thunder/Fire/2/1/4>

data/monsters_2.dat
Translator module programmed by JDI.

Add monsters in the format:
[Name_Level_HP_MP_Strength_Magic_Defense_MagicDefense_Speed_Accuracy_Evasion_Luck_Attack_Spell_Element]

<Goblin/1/random[140|160]/random[100|110]/2/5/3/5/4/4/2/1/:Slash:Stab:Rapid Punch:/:Fire:/None>

data/attacks.dat
Translator module programmed by JDI.

Add attacks in the format:
[AttackName_Power_RandomFactor]

<Kakumei Strike/4/3>
<Ice Sword/4/3>
<Rapid Punch/1/3>
<Slash/3/1>

battle__screen.py
from battle_screen_data import*

class battle_object (object):
    def __init__(self, stats):
        self.name = stats[0]
        self.level = stats[1]
        if len(stats) == 19:
            self.curHP = stats[3]
            self.maxHP = stats[2]
            self.curMP = stats[5]
            self.maxMP = stats[4]
            self.strength = stats[6]
            self.magic = stats[7]
            self.defense = stats[8]
            self.magdefense = stats[9]
            self.speed = stats[10]
            self.luck = stats[11]
            self.accuracy = stats[12]
            self.evasion = stats[13]
            self.experience = stats[14]
            self.weapon = stats[15]
            self.armor = stats[16]
            self.spells = stats[17]
            self.attacks = stats[18]
            self.element = "None"
        elif len(stats) == 15:
            self.experience = ''
            self.weapon = ''
            self.armor = ''
            self.curHP = stats[2]
            self.maxHP = stats[2]
            self.curMP = stats[3]
            self.maxHP = stats[3]
            self.strength = stats[4]
            self.magic = stats[5]
            self.defense = stats[6]
            self.speed = stats[8]
            self.luck = stats[11]
            self.accuracy = stats[9]
            self.evasion = stats[10]
            self.spells = stats[13]
            self.attacks = stats[12]
            self.magdefense = stats[7]
            self.element = stats[14]
        else:
            print len(stats)
    def strike(self, target, attack):

        """Check HitMiss"""
        if Figure.HitMiss("Strike",[self, target]) == "Hit":

            """Declare Attack"""
            PHYSICAL.retreive(attack)
            print "%s attacks %s"%(self.name, target.name)

            """Do Damage"""
            damage = Figure.f_damage("Strike",[self, target], attack)
            if damage < 1:
                damage = "no" ; print "%s was %s"%(attack, random.choice(["useless against %s's %s!"%(target.name, target.weapon),"useless against %s!"%(target.name),"a pointless attempt.","SPLOITZAR"]))
            else:
                target.curHP -= damage

            """Wrap It Up"""
            if target.curHP < 1:
                target.curHP = 0
            print "%s has %s HP remaining after taking %s damage from %s!"%(target.name, target.curHP, damage, attack)

        else:
            print "%s's %s missed %s"%(self.name, attack, target.name)
            
    def cast(self, target, spell):

        """Check HitMiss"""
        if Figure.HitMiss("Cast",[self, target]) == "Hit":

            """Declare Attack"""
            MAGIC.retreive(spell)
            if self.curMP - MAGIC.MPuse < 0:
                print "%s Does Not Have Enough MP To Cast %s"%(self.name, spell)
            else:
                print "%s casts %s on %s"%(self.name, spell, target.name)

                """Do Damage"""
                damage = Figure.f_damage("Cast",[self, target], spell)
                if damage < 1:
                    damage = "no" ; print "%s was %s"%(spell, random.choice(["useless against %s's %s!"%(target.name, target.armor),"useless against %s!"%(target.name),"a pointless attempt.","SPLOITZ"]))
                else:
                    target.curHP -= damage

                """Wrap Up"""
                if target.curHP < 1:
                    target.curHP = 0
                self.curMP -= MAGIC.MPuse
                print "%s has %s HP remaining after taking %s damage from %s!"%(target.name, target.curHP, damage, spell)
        else:
            print "%s's %s missed %s"%(self.name, spell, target.name)
            
class DEC_party (object):
    def __init__(self, MEMBERS, TYPE):
        self.members = MEMBERS
        self.type = TYPE
        if len(self.members) > 0: self.member1 = "T"
        if len(self.members) > 1: self.member2 = "T"
        if len(self.members) > 2: self.member3 = "T"
        if len(self.members) > 3: self.member4 = "T"
        if len(self.members) > 4: self.member5 = "T"
        if len(self.members) > 5: self.member6 = "T"
        self.status = "T"
    def Status(self):
        if self.type == "E":
            if len(self.members)> 0:enemy4 = self.members[0]
            if len(self.members)> 1:enemy5 = self.members[1]
            if len(self.members)> 2:enemy6 = self.members[2]
            if len(self.members)> 3:enemy7 = self.members[3]
            if len(self.members)> 4:enemy8 = self.members[4]
            if len(self.members)> 5:enemy9 = self.members[5]
            if len(self.members) > 0:
                if self.member1 == "T":
                    if enemy4.curHP < 1:
                        self.member1 = "F"
            if len(self.members) > 1:
                if self.member2 == "T":
                    if enemy5.curHP < 1:
                        self.member2 = "F"
            if len(self.members) > 2:
                if self.member3 == "T":
                    if enemy6.curHP < 1:
                        self.member3 = "F"
            if len(self.members) > 3:
                if self.member4 == "T":
                    if enemy7.curHP < 1:
                        self.member4 = "F"
            if len(self.members) > 4:
                if self.member5 == "T":
                    if enemy8.curHP < 1:
                        self.member5 = "F"
            if len(self.members) > 5:
                if self.member6 == "T":
                    if enemy9.curHP < 1:
                        self.member6 = "F"
        if self.type == "P":
            if len(self.members)> 0:character0 = self.members[0]
            if len(self.members)> 1:character1 = self.members[1]
            if len(self.members)> 2:character2 = self.members[2]
            if len(self.members)> 3:character3 = self.members[3]
            if len(self.members) > 0:
                if self.member1 == "T":
                    if character0.curHP < 1:
                        self.member1 = "F"
            if len(self.members) > 1:
                if self.member2 == "T":
                    if character1.curHP < 1:
                        self.member2 = "F"
            if len(self.members) > 2:
                if self.member3 == "T":
                    if character2.curHP < 1:
                        self.member3 = "F"
            if len(self.members) > 3:
                if self.member4 == "T":
                    if character3.curHP < 1:
                        self.member4 = "F"
        temp = 0
        for a in range(1, len(self.members)+1):
            if a == 1:
                if self.member1 == "F": temp += 1
            if a == 2:
                if self.member2 == "F": temp += 1
            if a == 3:
                if self.member3 == "F": temp += 1
            if a == 4:
                if self.member4 == "F": temp += 1
            if a == 5:
                if self.member5 == "F": temp += 1
            if a == 6:
                if self.member6 == "F": temp += 1
            if a == 7:
                if self.member7 == "F": temp += 1
            if a == 8:
                if self.member8 == "F": temp += 1
            if a == 9:
                if self.member9 == "F": temp += 1
        if temp == len(self.members):
            self.status = "F"
            
                        
def battle (party, enemy, area):

    """Figure and Declare Amount of Players on Screen"""
    p = [];p2 = [];e = [];e2 = []
    if len(party) > 0: character0 = battle_object(party[0]);p.append([0, character0.speed]);p2.append(character0)
    if len(party) > 1: character1 = battle_object(party[1]);p.append([1, character1.speed]);p2.append(character1)
    if len(party) > 2: character2 = battle_object(party[2]);p.append([2, character2.speed]);p2.append(character2)
    if len(party) > 3: character3 = battle_object(party[3]);p.append([3, character3.speed]);p2.append(character3)    
    if len(enemy) > 0: enemy4 = battle_object(enemy[0]);e.append([4, enemy4.speed]);e2.append(enemy4)
    if len(enemy) > 1: enemy5 = battle_object(enemy[1]);e.append([5, enemy5.speed]);e2.append(enemy5)
    if len(enemy) > 2: enemy6 = battle_object(enemy[2]);e.append([6, enemy6.speed]);e2.append(enemy6)
    if len(enemy) > 3: enemy7 = battle_object(enemy[3]);e.append([7, enemy7.speed]);e2.append(enemy7)
    if len(enemy) > 4: enemy8 = battle_object(enemy[4]);e.append([8, enemy8.speed]);e2.append(enemy8)
    if len(enemy) > 5: enemy9 = battle_object(enemy[5]);e.append([9, enemy9.speed]);e2.append(enemy9)

    """Declare Individual Party and Status"""
    CharacterParty = DEC_party(p2, "P")
    EnemyParty = DEC_party(e2, "E")

    """Choose the Order of Turns, Based on Speed"""
    ra=5 #larger the ratio, the more severe of a difference between duplicate turns
    turns = return_turns(p, e, ra)

    print "You are against a Level %d %s!"%(enemy4.level, enemy4.name)

    """Main Loop"""
    battle_return = "0"
    while battle_return == "0":

        """Your Turns"""
        if turns[0] == 0:
            print"Player 1 Turn"
            a = raw_input("Who do you attack?")
            if a == "enemy4": a = enemy4
            """Make Sure No Dead Target Is Selected"""
            while a.curHP < 1:
                a = raw_input("Who do you attack?")
            if a == "enemy4": a = enemy4
            b = raw_input("Strike or Cast?")
            if b.lower() == "strike": character0.strike(a, character0.attacks[0])
            if b.lower() == "cast": character0.cast(a, character0.spells[0])
        if turns[0] == 1: print"Player 2 Turn" 
        if turns[0] == 2: print"Player 3 Turn"     
        if turns[0] == 3: print"Player 4 Turn"

        """AI Turns"""
        if turns[0] > 3:
            target = random.choice(p2)
            """Make Sure No Dead Target Is Selected"""
            while target.curHP < 1:
                target = random.choice(p2)
            """Select Computer Action"""
            if area.upper() == "AREA_2":
                if turns[0] == 4:
                    if enemy4.curMP > 4: enemy4.cast(target, random.choice(enemy4.spells))
                    else: enemy4.strike(target, random.choice(enemy4.attacks))
                if turns[0] == 5: enemy5.cast(target)
                if turns[0] == 6: enemy6.cast(target)
                if turns[0] == 7: enemy7.cast(target)
                if turns[0] == 8: enemy8.cast(target)
                if turns[0] == 9: enemy9.cast(target)
                                     
        """Check Status"""
        CharacterParty.Status()
        EnemyParty.Status()
        if CharacterParty.status == "F":
            battle_return = 'You Died'
        if EnemyParty.status == "F":
            battle_return = 'You Won'

        """If A Short of Turns is Found, Add More. Otherwise, Advance one Turn"""
        if len(turns) < 15: temp_turns = return_turns(p, e, ra) ; turns = turns + temp_turns
        else: turns = turns[1:]


    """Wrap Up Battle"""
    print battle_return
    if battle_return == 'You Won':
        gain = random.randrange(40, 60)*enemy4.level
        if len(party) > 0:
            if CharacterParty.member1 == "T":
                party[0][13] += gain
                print "%s gained %d experience to reach %d experienced."%(party[0][0], gain, party[0][13])
                Figure.f_exp(party[0][1]+1)
                print "%d left to Level %d"%(Figure.exp_f-party[0][13], party[0][1]+1)
        if len(party) > 1:
            if CharacterParty.member2 == "T":
                party[1][13] += gain
                print "%s gained %d experience to reach %d experienced."%(party[1][0], gain, party[1][13])
                Figure.f_exp(party[1][1]+1)
                print "%d left to Level %d"%(Figure.exp_f-party[1][13], party[1][1]+1)
        if len(party) > 2:
            if CharacterParty.member3 == "T":
                party[2][13] += gain
                print "%s gained %d experience to reach %d experienced."%(party[2][0], gain, party[2][13])
                Figure.f_exp(party[2][1]+1)
                print "%d left to Level %d"%(Figure.exp_f-party[2][13], party[2][1]+1)
        if len(party) > 3:
            if CharacterParty.member4 == "T":
                party[3][13] += gain
                print "%s gained %d experience to reach %d experienced."%(party[3][0], gain, party[3][13])
                Figure.f_exp(party[3][1]+1)
                print "%d left to Level %d"%(Figure.exp_f-party[3][13], party[3][1]+1)
        gain = random.randrange(1000, 2000)*enemy4.level
        money.give(gain)
        print "You now have %d much money after gaining %d from the victory!"%(money.amount, gain)
    elif battle_return == 'You Died':
        quit_game()
    return party
   
##########################################
name="Turk"
lvl = 5
Figure.f_hp(lvl+1)
maxhp = Figure.hp_f
curhp = Figure.hp_f
maxmp = 250
curmp = 250
stn = 15
magic = 4
defn = 10
magdefn = 10
spd = 6
luck = 10
acc = 5
eva = 6
Figure.f_exp(lvl)
exp = Figure.exp_f
weapon = "Diamond Sword"
armor = "Shining Armor"
spells = ["Ice"]
attacks = ["Kakumei Strike", "Slash"]
Turk = [name, lvl, maxhp, curhp, maxmp, curmp, stn, magic, defn, magdefn, spd, luck, acc, eva, exp, weapon, armor, spells, attacks]
party = [Turk]
area = "area_2"

e_lvl = (random.randrange(1, 4))
Figure.f_hp(e_lvl+1)
enemy = [random.choice(Area2Monsters.Monsters)]

party = battle(party, enemy, area)
##########################################

batle_screen_data.py
import random

"""MONSTERS"""

class Monsters(object):
    def check_rand(self, range1, range2):           
        if len(self.contents[range1:range2]) > 5:
            for c in range(range1,range2):
                if self.contents[c] == "|":
                    bar = c   
            return random.randrange(int(self.contents[range1+7:bar]), int(self.contents[bar+1:range2-1]))
        else:
            return self.contents[range1:range2]

    def check_array(self, range1, range2):
        colin = [];z = []
        for d in range(range1,range2):
            if self.contents[d] == ":":
                colin.append(d)
        for d in range(1,len(colin)):
            z.append(str(self.contents[colin[d-1]+1:colin[d]]))
        return z
        
    def __init__(self, Area):
        the_file=open("data/monsters_"+str(Area)+".dat",'r')
        the_contents = the_file.read()
        self.contents = the_contents
        dashes = []
        newline = []
        endline = []
        for a in range(len(the_contents)):
            if the_contents[a] == "/":
                dashes.append(a)
            if the_contents[a] == "<":
                newline.append(a)
            if the_contents[a] == ">":
                endline.append(a)
        x = [];b = 15
        for a in range(len(newline)):
            y = []
            y.append(str(the_contents[newline[a]+1:dashes[a*b]]))
            y.append(int(self.check_rand( dashes[a*b]+1, dashes[a*b+1] )))            
            y.append(int(self.check_rand( dashes[a*b+1]+1, dashes[a*b+2] )))
            y.append(int(self.check_rand( dashes[a*b+2]+1, dashes[a*b+3] )))
            y.append(int(self.check_rand( dashes[a*b+3]+1, dashes[a*b+4] )))
            y.append(int(self.check_rand( dashes[a*b+4]+1, dashes[a*b+5] )))
            y.append(int(self.check_rand( dashes[a*b+5]+1, dashes[a*b+6] )))
            y.append(int(self.check_rand( dashes[a*b+6]+1, dashes[a*b+7] )))
            y.append(int(self.check_rand( dashes[a*b+7]+1, dashes[a*b+8] )))
            y.append(int(self.check_rand( dashes[a*b+8]+1, dashes[a*b+9] )))
            y.append(int(self.check_rand( dashes[a*b+9]+1, dashes[a*b+10] )))
            y.append(int(self.check_rand( dashes[a*b+10]+1, dashes[a*b+11] )))
            y.append(self.check_array( dashes[a*b+11]+1, dashes[a*b+12] ))
            y.append(self.check_array( dashes[a*b+12]+1, dashes[a*b+13] ))
            y.append(str(self.check_rand( dashes[a*b+13]+1, endline[a] )))
            x.append(y)
        self.Monsters = x
        
"""RANDOM BATTLE SCREEN ALGORITHMS"""

class Figure(object):
    def f_exp(self, object_level):
        experience = 0
        for a in range(1, object_level+1):experience += (a/2*500 + a*10)
        self.exp_f = experience
    def f_hp(self, object_level):
        HP = random.randrange(150, 200)
        for a in range(1, object_level+1):HP += a**2
        self.hp_f = HP
    def HitMiss(self, situation, classes):
        self = classes[0];target = classes[1]
        if situation.lower() == "strike":
            chance = int(round((float(100)/(target.luck+target.evasion*2))))*((self.accuracy*2)+(self.luck/2))
            if random.randrange(0, 101) < chance:
                return "Hit"
            else:
                return "Miss"
        if situation.lower() == "cast":
            chance =  int(round((float(100)/(target.luck*2))*((self.accuracy*2)+(self.luck/2))))
            if random.randrange(0, 101) < chance:
                return "Hit"
            else:
                return "Miss"
    def f_damage(self, situation, classes, move):
        self = classes[0];target = classes[1]
        if situation.lower() == "strike":
            damage = ( ((self.strength/3 + PHYSICAL.phATK/2))/3*(self.strength*2+(random.randrange(0,self.luck))+random.randrange(0, self.luck)+PHYSICAL.phATK*2) - ((target.defense*2+(random.randrange(target.luck, target.luck*2+1)))/2) )
        elif situation.lower() == "cast":
            MAGIC.retreive(move)
            if target.element != "None":
                if MAGIC.advantage == target.element[0]:offset = 2            
                elif MAGIC.weakness == target.element[0]:offset = -2
                else:offset = 0
            else: offset = 0
            damage = ((self.magic/3+(MAGIC.spATK)+offset)*(self.magic*2+(random.randrange(0,self.luck))+random.randrange(0, self.luck)+MAGIC.spATK*2) - ((target.magdefense*2+(random.randrange(target.luck, target.luck*2+1)))/2) )
        return damage

"""TURNS"""

def return_turns(party, enemy, ratio):
    SpeedSet = []    
    Set = []    
    for a in range(len(party)):
        Set.append(10*party[a][1]+party[a][0])
        b= Set[a]
        SpeedSet.append(b)
    Set = []           
    for a in range(len(enemy)):
        Set.append(10*enemy[a][1]+enemy[a][0])
        b= Set[a]
        SpeedSet.append(b)

    SpeedSet.sort()
    SpeedSet.reverse()

    NewSet = []
    for a in range(len(SpeedSet)):
        NewSet.append( int((( float( int( str(max(SpeedSet)) [:len(str(max(SpeedSet)))-1] ) - int( str(SpeedSet[a]) [:len(str(SpeedSet[a]))-1] )) / (int(max(SpeedSet))/ratio)+1) *100)+1 ))

    for a in range(len(NewSet)):
        if NewSet[a]%2 == 0:
            NewSet[a]+=1

    Turns = []
    for b in range(10000):
        for a in range(len(NewSet)):
            if (b+1)%NewSet[a] == 0: Turns.append(int(str(SpeedSet[a])[len(str(SpeedSet[a]))-1]))

    return Turns

"""PHYSICAL ATTACKS"""

class Physical(object):
    def retreive(self, attack):
        for a in range(len(self.Attacks)):
            if attack == self.Attacks[a][0]:
                self.phATK = random.randrange(self.Attacks[a][1], self.Attacks[a][1]+self.Attacks[a][2])
    def translate_data(self):
        the_file=open("data/attacks.dat",'r')
        the_contents = the_file.read()
        dashes = []
        newline = []
        endline = []
        for a in range(len(the_contents)):
            if the_contents[a] == "/":
                dashes.append(a)
            if the_contents[a] == "<":
                newline.append(a)
            if the_contents[a] == ">":
                endline.append(a)
        x = []
        for a in range(len(newline)):
            y = []
            y.append(str(the_contents[newline[a]+1:dashes[a*2]]))
            y.append(int(the_contents[dashes[a*2]+1:dashes[a*2+1]]))
            y.append(int(the_contents[dashes[a*2+1]+1:endline[a]]))
            x.append(y)
        self.Attacks = x

"""MAGIC ATTACKS"""

class Magic(object):
    def retreive(self, spell):
        for a in range(len(self.Spells)):
            if spell == self.Spells[a][0]:
                self.spATK = random.randrange(self.Spells[a][3], self.Spells[a][3]+self.Spells[a][4])
                self.MPuse = self.Spells[a][5]
                self.advantage = self.Spells[a][1]
                self.weakness = self.Spells[a][2]
    def translate_data(self):
        the_file=open("data/spells.dat",'r')
        the_contents = the_file.read()
        dashes = []
        newline = []
        endline = []
        for a in range(len(the_contents)):
            if the_contents[a] == "/":
                dashes.append(a)
            if the_contents[a] == "<":
                newline.append(a)
            if the_contents[a] == ">":
                endline.append(a)
        x = []; b = 5
        for a in range(len(newline)):
            y = []
            y.append(str(the_contents[newline[a]+1:dashes[a*b]]))
            y.append(str(the_contents[dashes[a*b]+1:dashes[a*b+1]]))
            y.append(str(the_contents[dashes[a*b+1]+1:dashes[a*b+2]]))
            y.append(int(the_contents[dashes[a*b+2]+1:dashes[a*b+3]]))
            y.append(int(the_contents[dashes[a*b+3]+1:dashes[a*b+4]]))
            y.append(int(the_contents[dashes[a*b+4]+1:endline[a]]))
            x.append(y)
        self.Spells = x
        
"""MONEY"""

class money(object):
    def __init__(self, money):
        self.amount = money
    def give(self, amou):
        self.amount += amou
    def take(self, amou):
        self.amount -= amou



###################################

"""Declare Money"""
money = money(1000)

"""Declare Monsters"""
Area2Monsters = Monsters(2)

"""Declare Attacks"""
PHYSICAL = Physical()
PHYSICAL.translate_data()
MAGIC = Magic()
MAGIC.translate_data()

"""Declare Statistic Algorithms"""
Figure = Figure()

##################################

The monsters data file is for addressing all the possible combinations of monsters to their various areas, by managing it in a single simple text file. Which is later called randomly into battle when the def battle is called, depending on the area (only one is exemplified however).

The spells data file is for translating all the spells into their MP Use, Strength, Randomness, and element attributes. Then when someone casts a spell, it contacts the def retreive to retreive those attributes and formulate them into damage.

The attack data file is the same idea as the spells, just different arguments, and for a different purpose.

Programmed all by myself.

The trickiest part was probably accepting the random[x|x2] and turning it over into a random integer (from txt > python). And same with the : signifying an array of attacks. Some pretty loopy code up there (battle_screen_data > class Monsters).

This RPG is going to be awesome, from a programmer's standpoint, I now have so much control over what I want to happen with certain enemies and attacks and everything. This is turning out awesome.

Not bragging, just excited my short term with Python has gone somewhere.

Last edited by Sane; May 9th, 2005 at 10:10 PM.
Sane is offline   Reply With Quote
Old May 9th, 2005, 10:13 PM   #2
thechristelegacy
Expert Programmer
 
thechristelegacy's Avatar
 
Join Date: Jul 2004
Location: Somerset, Pa
Posts: 708
Rep Power: 5 thechristelegacy is on a distinguished road
Send a message via AIM to thechristelegacy Send a message via MSN to thechristelegacy
Def. very nice you've far surpassed my abilities with the language, bt then again I havn't picked it up ever since I started trying to teach myself c#. Seeing your code though puts me in the mood to start using Python again.
thechristelegacy is offline   Reply With Quote
Old May 10th, 2005, 5:56 AM   #3
Sane
Programming Guru
 
Sane's Avatar
 
Join Date: Apr 2005
Location: Waterloo, Ontario
Posts: 1,888
Rep Power: 5 Sane will become famous soon enough
Send a message via MSN to Sane
Thanks lol. You should.

Right now, I'm trying to convince my tech teacher to make Python our programming language next year. That would totally own. Just hand in my RPG for the final summative. XD
Sane is offline   Reply With Quote
Reply

Bookmarks

« Previous Thread in Forum | Next Thread in Forum »

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump




DaniWeb IT Discussion Community
All times are GMT -5. The time now is 5:26 AM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC