////////////////////////////////////////////////////////////////////////////// // // File : chess_register.skrit // Author(s): mcarp // ////////////////////////////////////////////////////////////////////////////// Property Bool _server_only$ = true; Property string color$ doc = "color string of this side Black or black"; Owner = GoSkritComponent; Goid player$; string registrar_screen_name$; string screen_name$; //player's screen name Startup State STARTUP$ { Trigger OnGoHandleMessage$ ( WE_ENTERED_WORLD ) { // Switch states SetState ( Wait$ ); //return; } } State Wait$ { Event OnGoHandleMessage$ ( eWorldEvent e$, WorldMessage msg$ ) { if ( e$ == WE_REQ_USE ) { player$ = foo.GetplayerBlack(); if ( !player$.IsValid ) { player$ = msg$.GetSendFrom(); player$.Go.Common.GetScreenName( screen_name$ ); report.screenf("%s is now playing %s", screen_name$, color$ ); StringTool.AssignF ( registrar_screen_name$, "%s is registered as %s", screen_name$, color$ ); Owner.Go.Common.SSetScreenName( registrar_screen_name$ ); //report.screenf("%s",temp_registrar_screen_name$); foo.SetPlayerBlack(player$); SetState ( is_regged$ ); return; } } } } //StringTool.AssignF ( result$, "stuff here and c symbols such as %s, %d, etc", var1$, var2$ ); State is_regged$ { Event OnEnterState$ { } Event OnGoHandleMessage$ ( eWorldEvent e$, WorldMessage msg$ ) { if ( e$ == WE_REQ_USE ) { player$ = foo.GetPlayerBlack(); if ( player$.Isvalid ) //if player hasnt left the game { if ( player$ == msg$.GetSendFrom() ) // if registered player clicked, then unregister { report.screenf("%s has unregistered as %s", screen_name$, color$); player$ = NULL; screen_name$ = "No one"; StringTool.AssignF ( registrar_screen_name$, "Register as %s", color$ ); Owner.Go.Common.SSetScreenName( registrar_screen_name$ ); foo.SetPlayerBlack( player$ ); SetState ( Wait$ ); return; } else //else report to clicker who is registered { report.screenf("%s is already registered as %s", screen_name$, color$ ); return; } } else //player is null, probably left game, register the new player { report.screenf("%s has left the game", screen_name$); player$ = msg$.GetSendFrom; player$.Go.Common.GetScreenName( screen_name$ ); report.screenf("%s is now playing %s", screen_name$, color$ ); foo.SetPlayerBlack( player$ ); StringTool.AssignF ( registrar_screen_name$, "%s is registered as %s", screen_name$, color$ ); Owner.Go.Common.SSetScreenName( registrar_screen_name$ ); return; } } } }