to Kodiak
Hi! I use your script to send messages:
Code:
sendChatMessageTo(-1, "blablabla", new object[] { }); //TEST
sendScreenMessageTo(-1, "blablabla", new object[] { }); //TEST
Code:
private void sendScreenMessageTo(int army, string msg, object[] parms)
{
List<Player> Players = new List<Player>();
//Singleplayer or Dedi Server
if (GamePlay.gpPlayer() != null)
{
if (GamePlay.gpPlayer().Army() == army || army == -1)
Players.Add(GamePlay.gpPlayer());
} // Multiplayer
if (GamePlay.gpRemotePlayers() != null || GamePlay.gpRemotePlayers().Length > 0)
{
foreach (Player p in GamePlay.gpRemotePlayers())
{
if (p.Army() == army || army == -1)
Players.Add(p);
}
}
if (Players != null && Players.Count > 0)
GamePlay.gpHUDLogCenter(Players.ToArray(), msg, parms);
}
private void sendChatMessageTo(int army, string msg, object[] parms)
{
List<Player> Players = new List<Player>();
//Singleplayer or Dedi Server
if (GamePlay.gpPlayer() != null)
{
if (GamePlay.gpPlayer().Army() == army || army == -1)
Players.Add(GamePlay.gpPlayer());
} // Multiplayer
if (GamePlay.gpRemotePlayers() != null || GamePlay.gpRemotePlayers().Length > 0)
{
foreach (Player p in GamePlay.gpRemotePlayers())
{
if (p.Army() == army || army == -1)
Players.Add(p);
}
}
if (Players != null && Players.Count > 0)
GamePlay.gpLogServer(Players.ToArray(), msg, parms);
}
Code:
[21:56:12] =================================================
[21:56:12] System.NullReferenceException: Object reference not set to an instance of an object.
[21:56:12]
[21:56:12] Server stack trace:
[21:56:12] at 6UZP66dp5dKAdD5LMYr.F9pJL9dGtcbAt8r8Umh.JwjWWYN9w9(xnKDxkk8wATA33F3hpA , G7xPRi2e9fpuLtHG23a )
[21:56:12] at 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.sp1UnA9jmwb(Player[] , String , Object[] , Double )
[21:56:12] at 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.yEy1eAe2YPQxskLBZIku(Object , Object , Object , Double )
[21:56:12] at 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.d87UnNOmgnm(Player[] , String , Object[] )
[21:56:12] at pqlnUTF7gnMAoU4L9MP.lm1GgkFoiOOBGu1gmwf.ZnhKPrKgxsgJUIGtmgOK(Object , Object , Object )
[21:56:12] at pqlnUTF7gnMAoU4L9MP.lm1GgkFoiOOBGu1gmwf.HUDLogCenter(Player[] , String , Object[] )
[21:56:12] at maddox.game.GameDef.gpHUDLogCenter(Player[] to, String msg, Object[] parms)
[21:56:12] at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
[21:56:12] at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
[21:56:12]
[21:56:12] Exception rethrown at [0]:
[21:56:12] at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
[21:56:12] at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
[21:56:12] at maddox.game.IGamePlay.gpHUDLogCenter(Player[] to, String msg, Object[] parms)
[21:56:12] at Mission.sendScreenMessageTo(Int32 army, String msg, Object[] parms)
[21:56:12] at Mission.OnActorDead(Int32 missionNumber, String shortName, AiActor actor, List`1 damages)
[21:56:12] at maddox.game.world.Strategy.OnActorDead(Int32 missionNumber, String shortName, AiActor actor, AiDamageInitiator initiator)
[21:56:12] at maddox.game.ABattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12] at maddox.game.world.Strategy.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12] at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
[21:56:12] at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
[21:56:12]
[21:56:12] Exception rethrown at [1]:
[21:56:12] at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
[21:56:12] at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
[21:56:12] at maddox.game.IBattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12] at maddox.game.GameDef.eventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12] at RoFTf9069W6jWRmA8PN.U2RoVL0OVdWjVQJ7319.eventGame(GameEventId , Object , Object , Int32 )
[21:56:12] at NTlYp6NdtgpnKt7wGgO.VvFELvNie2My3mOTesk.WPGBQuHHKI8(GameEventId , Object , Object , Int32 )
[21:56:12] =================================================
It occurs in the method OnActorDead()
Code:
public void messageTaskComplite(int numberDeadUnit, int taskPrice, int armyTask, string msg)
{
sendChatMessageTo(-1, getLocalizedMessage(msg) + "[ {0} ]", new object[] { numberDeadUnit });
sendScreenMessageTo(-1, getLocalizedMessage(msg), new object[] { });
if (armyTask == 1)
{
sendChatMessageTo(-1, getLocalizedMessage("getPointsRED") + "[ {0} ]", new object[] { taskPrice });
}
else if (armyTask == 2)
{
sendChatMessageTo(-1, getLocalizedMessage("getPointsBLUE") + "[ {0} ]", new object[] { taskPrice });
}
}
Code:
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
{
base.OnActorDead(missionNumber, shortName, actor, damages);
//sendChatMessageTo(-1, actor.ToString(), new object[] { }); //TEST
if (actor != null)
{
//AiGroundActor STATISTIC
if (actor is AiGroundActor)
{
sendChatMessageTo(-1, "***Plane KILL - AiAircraft:....." + shortName, new object[] { }); //TEST
AiGroundActor groundActor = actor as AiGroundActor;
if (groundActor != null)
{
//sendChatMessageTo(-1, groundActor.ToString(), new object[] { }); //TEST
//tasks AiGroundActor DEAD stat
switch (missionNumber)
{
case 1:
if (actor.Army() == 2)
{
if (groundActor.Type() == AiGroundActorType.Artillery)
{
numberDeadUnit01_1++;
if (numberDeadUnit01_1 == numberCompliteTask01_1)
{
messageTaskComplite(numberDeadUnit01_1, taskPrice01_1, 1, "successMission01_1");
redScore = redScore + taskPrice01_1;
taskStatusArray.SetValue(true, 0);
}
}
else
{
numberDeadUnit01_2++;
if (numberDeadUnit01_2 == numberCompliteTask01_2)
{
messageTaskComplite(numberDeadUnit01_2, taskPrice01_2, 1, "successMission01_2");
redScore = redScore + taskPrice01_2;
taskStatusArray.SetValue(true, 1);
}
}
}
break;
} //switch
//AiAircraft STATISTIC
if (actor is AiAircraft)
{
sendChatMessageTo(-1, "***Plane KILL - AiAircraft:....." + shortName, new object[] { }); //TEST
AiAircraft aircraft = (actor as AiAircraft);
if (aircraft != null)
{
// Main AiAircraft plane stat
if (aircraft.Army() == 1)
{
numberDeadRedPlanes++;
blueScore = blueScore + unitPlanePrice;
}
else if (aircraft.Army() == 2 && aircraft != null)
{
numberDeadBluePlanes++;
redScore = redScore + unitPlanePrice;
}
}
}
}//null
}
But i have problem on dedi server. On multiplayer and single all works fine. On dedi - HUD message don`t work...
What method do I need to use on the dedi server?
getLocalizedMessage("getPointsRED") turn off(always "en")
Last edited by podvoxx; 01-12-2012 at 09:42 AM.
|