Seat taken, how would you resolve this problem?

Post here your questions about the OpenSpace 1.x or notify bugs and suggestions.

Moderators: Lapo, Bax

Post Reply
nig3d
Posts: 164
Joined: 02 Jul 2008, 09:42

Seat taken, how would you resolve this problem?

Post by nig3d »

Hello,

how do you usually resolve the problem to avoid an avatar to sit on another avatar?
Do I need to use extensions?
How can I know from an extension with tile is already taken?
thanks.
nig3d
Posts: 164
Joined: 02 Jul 2008, 09:42

Post by nig3d »

no hints? I'm going to start to work on the extension :(
nig3d
Posts: 164
Joined: 02 Jul 2008, 09:42

Post by nig3d »

magari usare le room variables e' sufficiente?
Dorru
Posts: 45
Joined: 16 Dec 2008, 13:45

Post by Dorru »

I don't have OpenSpace (yet, thinking of buying soon), so don't really know if this work, but one solution could be that you somehow script so that you cant press on a tile where and avatar already is standing on?
nig3d
Posts: 164
Joined: 02 Jul 2008, 09:42

Post by nig3d »

unluckily not, because 2 people could decide to click on the sit at the same time, or a person could click on the sit right before another avatar decide to sit
nig3d
Posts: 164
Joined: 02 Jul 2008, 09:42

Post by nig3d »

done and working, thanks, extensions worked fine.
Dorru
Posts: 45
Joined: 16 Dec 2008, 13:45

Post by Dorru »

Might be in need of the solution when I get OpenSpace, so if you could post it here how you did and so on to fix it, that would be great :)
nig3d
Posts: 164
Joined: 02 Jul 2008, 09:42

Post by nig3d »

Code: Select all

var playerTile = new Object();
var tilesTakenByRoom = new Object;

function init()
{
	// Using trace will send data to the server console
	trace("SeatTake extension started")
}



function destroy()
{
}

function handleRequest(cmd, params, user, fromRoom)
{
	if (cmd == "sit")
	{
		var response = {}
		
		response._cmd = "sit"
		
		var x = params.x;
		var y = params.y;
		
		var userID = params.userID
		
		var tilesTaken = tilesTakenByRoom[fromRoom];
				
		//request tile
		if ((tilesTaken[x][y] == -1) ||
			(tilesTaken[x][y] == userID))
		{
			//you can take the tile
			playerTile[userID] = { x:params.x, y:params.y, room:fromRoom }
			tilesTaken[x][y] = userID;
			response.ok = true;
			trace("SeatTake extension "+userID+":you can sit")
			
			_server.sendResponse(response, -1, null, [user])
		}
		else
		{
			response.ok = false;
			trace("SeatTake extension "+userID+":you can't sit")
				
		
			_server.sendResponse(response, -1, null, [user])
		}
	}
	
	if (cmd == "leave")
	{
		var response = {};
		
		response._cmd = "leave";
		
		var userID = params.userID
			
		if (playerTile[userID] != undefined)
		{
			var tilesTaken = tilesTakenByRoom[playerTile[userID].room];
			
			var x = playerTile[userID].x;
			var y = playerTile[userID].y;
		
			tilesTaken[x][y] = -1;
			delete playerTile[userID];
			
			trace("SeatTake extension "+userID+":left");
		}
		else
			trace("SeatTake extension "+userID+":already left");
			
		_server.sendResponse(response, -1, null, [user]);
	}
}


function handleInternalEvent(evt)
{
	evtName = evt.name;
	
	if (evtName == "userExit" || evtName == "userLost") 
	{
		var user = evt["user"]
		var userID = user.getUserId();
		if (playerTile[userID] != undefined)
		{
			var tilesTaken = tilesTakenByRoom[playerTile[userID].room];
			
			var x = playerTile[userID].x;
			var y = playerTile[userID].y;
		
			tilesTaken[x][y] = -1;
			
			delete playerTile[userID];
			
			trace("SeatTake extension "+userID+":left");
		}
		else
			trace("SeatTake extension "+userID+":already left");
	}
	
	trace(evtName);
	
	if (evtName == "newRoom")
	{
		var newRoom = evt.room
		var rId = evt["room"].getId()
		
		if (newRoom.isGame())
		{
			trace("initialize room: " + newRoom.getName());
			
			tilesTakenByRoom[rId] = new Array(100);
			
			for (var x = 0; x < 100; x++)
			{
				tilesTakenByRoom[rId][x] = new Array(100);
				for (var y = 0; y < 100; y++)
					tilesTakenByRoom[rId][x][y] = -1;
			}
		}
	}
	
	if (evtName == "roomLost")
	{
		var rId = evt.roomId
		
		if (tilesTakenByRoom[rId] != undefined)
		{
			trace("delete room: " + rId);
			
			delete tilesTakenByRoom[rId];
		}
	}
}


nig3d
Posts: 164
Joined: 02 Jul 2008, 09:42

Post by nig3d »

by the way, do I need to delete the arrays?
Post Reply