Seat taken, how would you resolve this problem?
Seat taken, how would you resolve this problem?
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.
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.
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];
}
}
}