def CmdGiveMonster(mob, args):
    if not len(args):
        return

    mspawn = ' '.join(args)
    lowerSpawn = mspawn.lower()

    for monsterSpawn in mob.player.monsterSpawns:
        if monsterSpawn.spawn.lower() == lowerSpawn:
            mob.player.sendGameText(
                RPG_MSG_GAME_DENIED,
                "You already have the %s monster template.\\n" %
                monsterSpawn.spawn)
            return

    from spawn import Spawn
    try:
        con = Spawn._connection.getConnection()
        spawn = Spawn.get(
            con.execute(
                "SELECT id FROM spawn WHERE lower(name)=\"%s\" LIMIT 1;" %
                lowerSpawn).fetchone()[0])
        mspawn = spawn.name
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,
                                "No such spawn %s.\\n" % mspawn)
        return

    from player import PlayerMonsterSpawn
    PlayerMonsterSpawn(player=mob.player, spawn=mspawn)
    mob.player.sendGameText(
        RPG_MSG_GAME_GAINED,
        "You now have the %s monster template.\\n" % mspawn)
def CmdGrantMonster(mob, args):
    if len(args) < 2:
        return

    pname = args[0]
    lowerPName = pname.lower()
    args = args[1:]

    mspawn = ' '.join(args)
    lowerSpawn = mspawn.lower()

    from player import Player
    try:
        con = Player._connection.getConnection()
        player = Player.get(
            con.execute(
                "SELECT id FROM player WHERE lower(public_name) = \"%s\" LIMIT 1;"
                % lowerPName).fetchone()[0])
        pname = player.publicName
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,
                                "No player by public name %s.\\n" % pname)
        return

    if not player.party or not len(player.party.members):
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,
                                "Player isn't logged in %s.\\n" % pname)
        return

    for monsterSpawn in player.monsterSpawns:
        if monsterSpawn.spawn.lower() == lowerSpawn:
            mob.player.sendGameText(
                RPG_MSG_GAME_DENIED,
                "%s already has the %s monster template.\\n" %
                (pname, monsterSpawn.spawn))
            return

    from spawn import Spawn
    try:
        con = Spawn._connection.getConnection()
        spawn = Spawn.get(
            con.execute(
                "SELECT id FROM spawn WHERE lower(name) = \"%s\" LIMIT 1;" %
                lowerSpawn).fetchone()[0])
        mspawn = spawn.name
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,
                                "No such spawn %s.\\n" % mspawn)
        return

    from player import PlayerMonsterSpawn
    PlayerMonsterSpawn(player=player, spawn=mspawn)
    mob.player.sendGameText(
        RPG_MSG_GAME_GAINED,
        "You have granted %s the %s monster template.\\n" % (pname, mspawn))
    if player.zone:
        player.sendGameText(
            RPG_MSG_GAME_GAINED,
            "You now have the %s monster template.\\n" % mspawn)
def CmdSpawn(mob, args):
    try:
        # Check if there were coords supplied.
        if args[-1].endswith(']'):
            # Extract the coords argument.
            # It should look like this: [x.x y.y z.z].
            x = float(args[-3][1:])
            y = float(args[-2])
            z = float(args[-1][:-1])
            spawnName = ' '.join(args[:-3])

        # Otherwise take the immortals position.
        else:
            mypos = mob.simObject.position
            x = mypos[0]
            y = mypos[1]
            z = mypos[2]
            spawnName = ' '.join(args)

    except:
        mob.player.sendGameText(
            RPG_MSG_GAME_DENIED,
            "Invalid arguments to immortal spawn command. Syntax is '/imm spawn <spawn name> [x-coord y-coord z-coord]' where the coords with their '[]' brackets are optional.\\n"
        )
        return

    # Get the spawn.
    try:
        con = Spawn._connection.getConnection()
        spawn = Spawn.get(
            con.execute(
                "SELECT id FROM spawn WHERE lower(name)=lower(\"%s\") LIMIT 1;"
                % spawnName).fetchone()[0])
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED, \
            "Failure spawning %s, this spawn doesn't exist.\\n"%spawnName)
        return

    # Put the transform together.
    rot = mob.simObject.rotation
    transform = (x, y, z, rot[0], rot[1], rot[2], rot[3])

    # Spawn the desired mob.
    mob.zone.spawnMob(spawn, transform, -1)

    # Give feedback about the successful spawning.
    mob.player.sendGameText(RPG_MSG_GAME_GAINED, \
        "%s spawned at [%0.2f %0.2f %0.2f].\\n"%(spawnName,x,y,z))
def CmdGrantMonster(mob,args):
    if len(args) < 2:
        return
    
    pname = args[0]
    lowerPName = pname.lower()
    args = args[1:]
    
    mspawn = ' '.join(args)
    lowerSpawn = mspawn.lower()
    
    from player import Player
    try:
        con = Player._connection.getConnection()
        player = Player.get(con.execute("SELECT id FROM player WHERE lower(public_name) = \"%s\" LIMIT 1;"%lowerPName).fetchone()[0])
        pname = player.publicName
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,"No player by public name %s.\\n"%pname)
        return

    if not player.party or not len(player.party.members):
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,"Player isn't logged in %s.\\n"%pname)
        return

    for monsterSpawn in player.monsterSpawns:
        if monsterSpawn.spawn.lower() == lowerSpawn:
            mob.player.sendGameText(RPG_MSG_GAME_DENIED,"%s already has the %s monster template.\\n"%(pname,monsterSpawn.spawn))
            return
    
    from spawn import Spawn
    try:
        con = Spawn._connection.getConnection()
        spawn = Spawn.get(con.execute("SELECT id FROM spawn WHERE lower(name) = \"%s\" LIMIT 1;"%lowerSpawn).fetchone()[0])
        mspawn = spawn.name
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,"No such spawn %s.\\n"%mspawn)
        return
    
    from player import PlayerMonsterSpawn
    PlayerMonsterSpawn(player=player,spawn=mspawn)
    mob.player.sendGameText(RPG_MSG_GAME_GAINED,"You have granted %s the %s monster template.\\n"%(pname,mspawn))
    if player.zone:
        player.sendGameText(RPG_MSG_GAME_GAINED,"You now have the %s monster template.\\n"%mspawn)
def CmdSpawn(mob, args):
    try:
        # Check if there were coords supplied.
        if args[-1].endswith(']'):
            # Extract the coords argument.
            # It should look like this: [x.x y.y z.z].
            x = float(args[-3][1:])
            y = float(args[-2])
            z = float(args[-1][:-1])
            spawnName = ' '.join(args[:-3])
        
        # Otherwise take the immortals position.
        else:
            mypos = mob.simObject.position
            x = mypos[0]
            y = mypos[1]
            z = mypos[2]
            spawnName = ' '.join(args)
    
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,"Invalid arguments to immortal spawn command. Syntax is '/imm spawn <spawn name> [x-coord y-coord z-coord]' where the coords with their '[]' brackets are optional.\\n")
        return
    
    # Get the spawn.
    try:
        con = Spawn._connection.getConnection()
        spawn = Spawn.get(con.execute("SELECT id FROM spawn WHERE lower(name)=lower(\"%s\") LIMIT 1;"%spawnName).fetchone()[0])
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED, \
            "Failure spawning %s, this spawn doesn't exist.\\n"%spawnName)
        return
    
    # Put the transform together.
    rot = mob.simObject.rotation
    transform = (x,y,z,rot[0],rot[1],rot[2],rot[3])
    
    # Spawn the desired mob.
    mob.zone.spawnMob(spawn,transform,-1)
    
    # Give feedback about the successful spawning.
    mob.player.sendGameText(RPG_MSG_GAME_GAINED, \
        "%s spawned at [%0.2f %0.2f %0.2f].\\n"%(spawnName,x,y,z))
def CmdGiveMonster(mob,args):
    if not len(args):
        return
    
    mspawn = ' '.join(args)
    lowerSpawn = mspawn.lower()
    
    for monsterSpawn in mob.player.monsterSpawns:
        if monsterSpawn.spawn.lower() == lowerSpawn:
            mob.player.sendGameText(RPG_MSG_GAME_DENIED,"You already have the %s monster template.\\n"%monsterSpawn.spawn)
            return
    
    from spawn import Spawn
    try:
        con = Spawn._connection.getConnection()
        spawn = Spawn.get(con.execute("SELECT id FROM spawn WHERE lower(name)=\"%s\" LIMIT 1;"%lowerSpawn).fetchone()[0])
        mspawn = spawn.name
    except:
        mob.player.sendGameText(RPG_MSG_GAME_DENIED,"No such spawn %s.\\n"%mspawn)
        return
    
    from player import PlayerMonsterSpawn
    PlayerMonsterSpawn(player=mob.player,spawn=mspawn)
    mob.player.sendGameText(RPG_MSG_GAME_GAINED,"You now have the %s monster template.\\n"%mspawn)