def buy_plant(request): ''' Check user logged in Check playerId belongs to account Get max plant limit from island id Check player's plant count ''' if request.session.__contains__('account'): q = request.GET bPlayerId = int(q.__getitem__('playerId')) bIslandId = int(q.__getitem__('islandId')) bRegion = q.__getitem__('region') player = Player.get_by_id(bPlayerId) if player.email == request.session['account'].email: island = Island.get_by_id(bIslandId) if island != None: maxNumPlants = island.maxNumOfPlants plants = Plant.gql("WHERE playerId = :1 and islandId = :2",bPlayerId, bIslandId) if plants.count() < maxNumPlants: bPlant = Plant(playerId=bPlayerId,islandId=bIslandId,region=bRegion,cost=plant[bRegion][0],capacity=plant[bRegion][1],numOfWorkers = 0, workerCost=worker[bRegion][0],workerHealth = worker[bRegion][1],workerSkills=worker[bRegion][2],workerProductivity=worker[bRegion][3], currentCapacity = 0, productionLimit = 0) bPlant.put() player.money = player.money - plant[bRegion][0] player.money_spent = player.money_spent + plant[bRegion][0] player.put() return redirect("/app/main.html#/theworld")
def join_island(request): try: q = request.GET #jEmail = q.__getitem__('email') jEmail = request.session['account'].email jIslandId = int(q.__getitem__('islandId')) query = Player.gql("WHERE email = :1 and islandId = :2",jEmail,jIslandId) if query.count() > 0: return redirect("/play?islandId="+str(jIslandId)) #change to play game else: island = Island.get_by_id(jIslandId) if island != None and island.numOfPlayer < island.maxNumOfPlayers: player = Player(email = jEmail,money_spent=0.0,money=1000000.0,islandId=jIslandId,networth=1000000.0) player.put() island.numOfPlayer = island.numOfPlayer + 1 island.put() return redirect("/play?islandId="+str(island.key().id())) else: return HttpResponse("error","text") #dd = {} #return HttpResponse(simplejson.dumps(dd),mimetype="application/json") except KeyError: return redirect("/") except ValueError: return "/app/error.html?error=ValueError"
def create_island(request): try: q = request.GET #iCreatorEmail = q.__getitem__('creatorEmail') iCreatorEmail = request.session['account'].email iName = q.__getitem__('name') if iName == "": raise ValueError iMaxNumOfPlayers = int(q.__getitem__('maxNumOfPlayers')) iMaxNumOfPlants = int(q.__getitem__('maxNumOfPlants')) island = Island(name=iName,creatorEmail=iCreatorEmail,numOfPlayer=0,maxNumOfPlayers=iMaxNumOfPlayers,maxNumOfPlants=iMaxNumOfPlants) island.put() return redirect("/app/main.html#/theworld") except KeyError: return redirect("/") except ValueError: return redirect("/app/error.html?error=ValueError")
def get_all_island(request): #acc = request.session['account'] session = request.session try: if session['account']: q = Island.all() f = q.fetch(1000) islands = [] for i in f: d = i.__dict__['_entity'] d['islandId'] = i.key().id() islands.append(d) return HttpResponse(simplejson.dumps(islands),mimetype="application/json") except KeyError: pass dd = {} dd['error'] = "Error: cannot get session account" return HttpResponse(simplejson.dumps(dd),mimetype="application/json")
def load_player(request): session = request.session dd = {} #check necessary arguments if session.__contains__('islandId') == False: dd['error'] = "missing islandId" return HttpResponse(simplejson.dumps(dd),mimetype="application/json") if session.__contains__('account') == False: dd['error'] = "Error: Not logined." return HttpResponse(simplejson.dumps(dd),mimetype="application/json") email = session['account'].email islandId = session['islandId'] island = Island.get_by_id(islandId) player_q = Player.gql("WHERE email = :1 and islandId = :2",email,islandId) player = player_q.get() player_dict = player.__dict__['_entity'] player_dict['playerId'] = player.key().id() #get number of factories plantQuery = Plant.gql("WHERE playerId = :1 and islandId = :2",player.key().id(), islandId) player_dict['numPlants'] = plantQuery.count() player_dict['numWorkers'] = 0 plants = plantQuery.fetch(1000) plantIds = [] for p in plants: player_dict['numWorkers'] += p.numOfWorkers plantIds.append(p.key().id()) player_dict['numShoes'] = 0 shoeQuery = Shoe.gql("WHERE plantId in :1",plantIds) shoes = shoeQuery.fetch(1000) for shoe in shoes: player_dict['numShoes'] += shoe.qty player_dict['islandName'] = island.name jsonString = simplejson.dumps(player_dict) return HttpResponse(jsonString,mimetype="application/json")
def get_account_players(request): session = request.session try: if session['account']: acc = session['account'] q = Player.gql("WHERE email = :1",acc.email) f = q.fetch(1000) players = [] for i in f: islandId = i.islandId island = Island.get_by_id(islandId) dd = i.__dict__['_entity'] dd['playerId'] = i.key().id() dd['islandName'] = island.name players.append(dd) return HttpResponse(simplejson.dumps(players),mimetype="application/json") else: return HttpResponse("error","text") except KeyError: pass dd = {} dd['error'] = "Error: cannot get session account" return HttpResponse(simplejson.dumps(dd),mimetype="application/json")
def system_buy_shoes(request): ''' Check the logged in user ''' user = users.get_current_user() marketing = 1 dd = [] if user: islandQuery = Island.all() islandCount = islandQuery.count() islands = islandQuery.fetch(islandCount) for island in islands: islandId = island.key().id() playerQuery = Player.gql("WHERE islandId = :1",islandId) numPlayers = playerQuery.count() plantQuery = Plant.gql("WHERE islandId = :1",islandId) plantCount = plantQuery.count() plants = plantQuery.fetch(plantCount) for plant in plants: plantId = plant.key().id() plantRegion = plant.region shoeQuery = Shoe.gql("WHERE plantId = :1",plantId) shoeCount = shoeQuery.count() shoes = shoeQuery.fetch(shoeCount) for shoe in shoes: body = shoe.body sole = shoe.sole color = shoe.color qty = shoe.qty attractiveness = math.fabs((0.75*sole + body + 1.25 * color) / 3) saleRegion = "" #randomly select sale-to-region i = random.randint(1,4) if i == 1: saleRegion = "north" elif i == 2: saleRegion = "east" elif i == 3: saleRegion = "west" elif i == 4: saleRegion = "south" _shippingcost = shippingCost[plantRegion][saleRegion] price = shoe.price + _shippingcost salesVolume = int(math.ceil(numPlayers * math.pow((attractiveness*marketing/price),2))) if salesVolume > qty: salesVolume = qty shoe.qty = shoe.qty - salesVolume shoe.put() dd.append(shoe.key().id()) dd.append(salesVolume) n = {'count':len(dd)} totalShippingCost = salesVolume * _shippingcost totalRevenue = salesVolume * shoe.price player = Player.get_by_id(plant.playerId) player.money = player.money - totalShippingCost + totalRevenue player.money_spent = player.money_spent + totalShippingCost player.networth = player.money + player.money_spent player.put() plant.currentCapacity = plant.currentCapacity - salesVolume plant.put() demandTransaction = DemandTransaction(shoeId = shoe.key().id(),salePrice = shoe.price,shippingCost = _shippingcost,qty = salesVolume) demandTransaction.put() else: return redirect(users.create_login_url("/system_buy_shoes")) return HttpResponse(simplejson.dumps(n),mimetype="application/json")