PDA

View Full Version : ZoneManager error



Lee Davies
05-12-2009, 07:41 AM
I'm trying to convert the PixelTank game to OO AS3, and I'm hitting a slight snag with the Chat interface.

Everything will compile, and run - but when I press the "Login" button (after specifying a username), I get this error:


TypeError: Error #1009: Cannot access a property or method of a null object reference.
at src::Chat/onJoinRoomEvent()
at com.electrotank.electroserver4.utils::Observable/dispatchEvent()
at com.electrotank.electroserver4.transaction::JoinRo omEventTransaction/execute()
at com.electrotank.electroserver4::ElectroServer/::processMessage()
at com.electrotank.electroserver4::ElectroServer/::processStringData()
at com.electrotank.electroserver4::ElectroServer/onStringData()
at com.electrotank.electroserver4.utils::Observable/notifyListeners()
at com.electrotank.electroserver4.connection::Connect ion/onPreData()
at com.electrotank.electroserver4.connection::Connect ion/::dataHandler()

Here's my code. It's taken from the "AdvancedChat" tutorial, though it's been somewhat rearranged as I've been playing about with it.

I've traced out messages on each line within the "onJoinRoomEvent" method and messages stop getting traced immediately before the reference to the "zoneManager". I then tried tracing out the "zoneManager.getZonebyId(e.getZoneId)" line, but it returned a "null" value; whereas if I trace out "e.getZoneId" by itself it returns '6'.

I've spent the better part of two hours on this and it's driving me nuts! Any help, please?

[code]package src {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import fl.controls.listClasses.CellRenderer;
import fl.controls.listClasses.ListData;
import flash.utils.getQualifiedClassName;

import com.electrotank.electroserver4.ElectroServer;
import com.electrotank.electroserver4.message.request.*;
import com.electrotank.electroserver4.message.event.*;
import com.electrotank.electroserver4.message.response.*;
import com.electrotank.electroserver4.message.MessageType ;
import com.electrotank.electroserver4.entities.RoomVariab le;
import com.electrotank.electroserver4.user.User;
import com.electrotank.electroserver4.zone.ZoneManager;
import com.electrotank.electroserver4.zone.Zone;
import com.electrotank.electroserver4.room.Room;

public class Chat extends MovieClip {
// Constructor
var _es:ElectroServer;
var _mainClass:RTankS;

private var es:ElectroServer;
private var serverInfo:Object;
private var myRoom:Room;
private var myZone:Zone;
private var zoneManager:ZoneManager;
private var isConnected:Boolean;
private var isConnectionRequestSent:Boolean;
private var isLoginRequestSent:Boolean;
private var zoneId:Number;

public function Chat(docuClass:RTankS, server:ElectroServer):void {
_es = server;
_mainClass = docuClass; // I like this. "docuClass". It's funny.

this.x = 50;
this.y = 50;

addEventListeners();
createRoom("Game Room");
}

public function createRoom(roomName:String):void {
trace("in to createRoom()");
var crr:CreateRoomRequest = new CreateRoomRequest();
crr.setRoomName(roomName);
crr.setZoneName("Lobby");

_es.send(crr);
}

public function serverNum(e:GetUserCountResponse):void {
trace("###### In to serverNum");
trace("Number of users connected: " + e.getCount());
c_chatBox.appendText("\n" + "There are " + e.getCount() + " user(s) connected to the server.");
}

private function addEventListeners():void {
addEventListener(MouseEvent.CLICK, onButtonClick);
_es.addEventListener(MessageType.GetUserCountRespo nse, "serverNum", this);

_es.addEventListener(MessageType.PublicMessageEven t, "onPublicMessageEvent", this);
_es.addEventListener(MessageType.UserListUpdateEve nt, "onUserListUpdateEvent", this);
_es.addEventListener(MessageType.JoinRoomEvent, "onJoinRoomEvent", this);
_es.addEventListener(MessageType.ZoneUpdateEvent, "onZoneUpdateEvent", this);
_es.addEventListener(MessageType.PrivateMessageEve

Lee Davies
05-12-2009, 03:43 PM
Scratch that - it turns out I didn't declare the zoneManager variable, do'h!

And I wonder why programming at 4am is a bad thing.

tcarr
05-12-2009, 05:18 PM
Glad to hear you figured it out! Java spoils me - the compiler would not only catch that type of error but would tell me the line number.