G*S: Variables del juego
5 noviembre, 2010
Como vengo diciendo desde hace rato ya, cuando GameTalk inicia sesión en GameSocial, recibe de este último todas las variables que deberá analizar. En esta entrega explicaré como GameServer indicia los Formatos de Entrada a GameTallk.
¿Qué son estos Formatos de Entrada? Indicia la forma en que GameTalk debe interpretar cada nueva línea de log que haga el servidor del juego. Por cada evento del juego, el servidor agrega una nueva línea a su log, o muestra una nueva en la pantalla. Estos textos son los que GameTalk debe analizar.
Tras haber inciado sesión e identificado el juego, GameServer lee un archivo de configuración llamado operators.cfg, el cual está almacenado en el servidor de la red. Cargada ya, se le envía las variable a GameTalk sobre como debe leer las entradas de consola del juego.
El modelo del archivo es el siguiente.
# operators.cfg # # por nicolunacba 2010 # # Operators file determines which sentences # will be parsed, and what function it has # on the player status. # # $K: Killer name # $V: Victim name # # FORMAT: # # String Effect # # Effect list: # KILL_1 $K $V: Player $K kills $V with main attack # KILL_2 $K $V: Player $K kills $V with second attack # KILL_3 $K $V: Player $K kills $V with third attack # KILL_4 $K $V: Player $K kills $V with fourth attack # KILL_5 $K $V: Player $K kills $V with fifth attack # KILL_6 $K $V: Player $K kills $V with sixth attack# KILL_5 $K $V: Player $K kills $V with fifth attack # KILL_7 $K $V: Player $K kills $V with eigth attack # KILL_8 $K $V: Player $K kills $V with ninth attack # KILL_9 $K $V: Player $K kills $V with tenth attack# (i.e. Tremulous watch awards.list)
# TEAM_KILL $K $V: Player $V kills teammate $V
# DEATH_MAP $V: Player $V is killed by world
# DEATH_SELF $V: Player $V kills itself
# DEATH_STRUCT $V: Player $V is killed by structure
Ejemplo de Tremulous:"$V was bitten by $K" KILL_1 $K $V"$V was squished" DEATH_MAP $VEstas configuraciones se envían de forma sencilla:
gsSay { ... operators { # Strings y vars son el orden que # pueden tener los strings y las # variables $V y $K KILL_1 = STRINGS_Y_VARSKILL_2 = STRINGS_Y_VARS KILL_3 = STRINGS_Y_VARS KILL_4 = STRINGS_Y_VARSKILL_5 = STRINGS_Y_VARS KILL_6 = STRINGS_Y_VARSKILL_7 = STRINGS_Y_VARS
KILL_8 = STRINGS_Y_VARS KILL_9 = STRINGS_Y_VARSTEAM_KILL = STRINGS_Y_VARS
DEATH_MAP = STRINGS_Y_VARS
DEATH_SELF = STRINGS_Y_VARS
DEATH_STRUCT = STRINGS_Y_VARS
}...
}
Y como siempre que ya saben como agregarlos de manera más sencilla, haciendogsSay :: operators :: OPERADOR = STRINGo también
gsSay::operators {OPERADOR = STRING}Para terminar con la lista de variables, se envía por último los datos de otro archivo llamado awards.list que contiene la lista de medallas y los métodos para obtenerlas.
Nota: Este archivo puede sufrir cambios futuros, se encuentra en forma de BETA tanto los operadores como su semántica.
El archivo tiene una forma parecida a esta.
# awards.list # Awards and Prizes for game - Logros y medallas del juego # # por nicolunacba 2010 # # Format: # # NUMBER_ID NAME CONDITION_TYPE CONDITION_EXPL CONDITION_QUANT TIMER # # Note: -1 = FALSE # CONDITION QUANT: Quantify a number. This has to be an INTEGER # TIMER: INTEGER S|M|H (Seconds|Minutes|Hours) # # Examples: # # 14 Asesino peligroso NUMBER_KILL -1 75 -1 # 35 Venganza instantanea KILL_PLAYER LAST_KILLER 1 60 s # 99 Traidor TEAM_KILL -1 10 -1 # 88 Psicopata TEAM_KILL LAST_KILLER 1 60 s # 55 El mundo te odia DEATH MAP 20 -1 # 44 Mega Constructor BUILD STRUCT 50 -1 # 22 Camper misterioso NUMBER_KILL ATTACK_3 20 -1 # # CONDITION_TYPE List: # # NUMBER_KILL: number of killings of a player # KILL_PLAYER: murder of a specific player # TEAM_KILL: kill a team mate # SUICIDE: number of suicides # BUILD: build a structure # # Expand! # # CONDITION_EXPL explanation of the condition: # LAST_KILLER: Name of the last killer # MAP: Effect by map # STRUCT: Effect by struct # ATTACK_1: Primary attack (i.e. in Tremulous: bite and human weapon, except Mass Driver) # ATTACK_2: Secondary attack (i.e. in Tremulous: granger attack or blaster) # ATTACK_3: Tertiary attack (i.e. in Tremulous: Pounce or Mass Driver) # ATTACK_4: Quaternary attack (i.e. in Tremulous: Tyrant rush) # ATTACK_5: Fifth order attack (i.e. in Tremulous: Dragoon Snipe) # ATTACK_6: Sixth order attack (i.e. in Tremulous: Granger Snipe) # # And Expand too! #
Filed in GameSocial
Etiquetas: awards, entrada, formato de entrada, input, operators
G*S: Inicio de sesión
5 noviembre, 2010
Hola a todos quienes estén siguiendo este proyecto. Este es un post breve, donde mi intención es dejar por escrito el protocolo de inicio de sesión con GameSocial.
Como se ha dicho, al momento de ejecutarse GameTalk, buscará comunicarse con GameSocial. Le enviará entonces un documento en formato .gsc (Game Social Comunication) donde enviará los datos del servidor del juego. El archivo llevará el nombre de login.gsc .
gtSay::login { userID = ID_DEL_USUARIO userPASS = PASSWORD_EN_MD5 gameID = ID_DEL_JUEGO }
o simplemente enviar:
gtSay::login::userID = ID_DEL_USUARIO gtSay::login::userPASS = PASSWORD_EN_MD5 gtSay::login::gameID = ID_DEL_JUEGO
De ser correcto los datos, GameSocial responderá con un OK y una llave única temporal, para que todos los métodos POST sean verificados con la clave.
gsSay::login { success postKey = KEY_MD5 }
Seguido de esto, se le envía las variables junto a las opciones del Notifier. De eso nos ocuparemos en una próxima entrega.
Primeras proyecciones de Game*Social
4 noviembre, 2010
Si van a la sección proyectos de mi blog, verán que figura un proyecto llamado Game*Social, una red social dedicada a jugadores.
Pero ¿qué es exactamente Game*Social? Explicaré eso ahora mismo.
Game*Social es una red social similar a la de PlayStation Network o Xbox Live. Se basa en el juego que los usuarios vayan desempeñado en los servidores preparados para esto.
Un sitio web principal será la red social propiamente dicha, con cuentas de usuarios, perfiles, muros, álbumes, etc., pero no es esto lo que nos centraremos en esta ocasión ya que estos son solo implementaciones de una red social común.
El objetivo principal es que los usuarios, sea cual sea el servidor donde jueguen, lleven sus estadísticas y ganen trofeos o medallas por hazañas realizadas. Niveles y puntos de experiencias serán dados con los criterios definidos en cada juego o servidor.
En la entrada de hoy, explicaré el funcionamiento de uno de los programas principales: GameTalk.
Notas:
A partir de ahora Game*Social se nombrará simplemente GameSocial (sin el *) debido a que hablamos de piezas de software.
Dado que soy administrador de Tremulous Argentina, comunidad de jugadores de Tremulous, y mi objetivo es que este sea el primer servidor en utilizarlo, todos los ejemplos estarán orientados a este juego en el modo que se ha hecho en nuestro servidor.
En donde está instalado el servidor del juego, se instalará otro programa llamado GameTalk, el cual funcionará en paralelo. Este lee las salidas de la consola del servidor y trabaja en conjunto con Game*Social para enviar las estadísticas del juego.
GameTalk iniciará sesión en GameSocial, enviando en primer instancia la ID del juego que se analizará. GameSocial responderá con las variables que deberá llevar a cuenta, los formatos de entrada a parsear y las salidas que deberá tener. Terminado esto, GameTalk leerá la lista de jugadores conectados y verificará con GameSocial los que pertenezcan a la red. GameSocial responde con las ID correspondientes al GameTalk para así controlar el juego de estos.
Nota: El protocolo es cerrado, por lo que se centrará solamente en las operaciones propias entre el juego y el servidor, no entre partes de la red en sí.
Veamos los métodos de esta operación. La respuesta de Game*Social tiene esta forma:
gsSay {...}
A su vez, las salidas de GameTalk son:
gtSay {...}
GameTalk maneja un administrador títere dentro del juego para enviar las notificaciones de las maneras especificadas por GameSocial sobre los logros realizados por los jugadores. Se le envía un script de la siguiente forma:
gtNotify {name = NOMBRE_DEL_NOTIFICADORsay = COMANDO_PARA_HABLARstatus = UBICACION_DEL_NOTIFICADOR # ubicacion dentro del juegocolors = { (color, string_del_color) } # usado para darle color a las notificaciones}
o simplemente
gtNotify::name = NOMBRE_DEL_NOTIFICADOR gtNotify::say = COMANDO_PARA_HABLAR $SAY # donde $SAY es el texto a decir gtNotify::status = UBICACION_DEL_NOTIFICADOR gtNotify::colors = { (color, string_del_color) } #usado para darle color a las notificaciones
si se define todas las macros en el mismo script y agilizar la escritura o lectura.
Ejemplo en Tremulous Argentina:
gtNotify::name = “Game*Social-Notifier” gtNotify::say = “\!cp “$SAY gtNotify::status = “!specme ; !invisible” gtNotify::colors = { (red, “^1”), (green, “^2”), (yellow, “^3”), (blue, “^4”), (cyan, “^5”), (purple, “^6”), (white, “^7”), (brown, “^8”), (black, “^9”) }
En próximas entregas hablaré mas del funcionamiento del GameTalk y otro programa importante que corre en conjunto con GameTalk y el servidor del juego, llamado PlayerUpdater. Este recibirá los logros de los jugadores y enviará a GameSocial los nuevos premios otorgados.
Filed in GameSocial
Etiquetas: game social, gamesocial, gametalk, PlayerUpdater