コード例 #1
0
ファイル: game.c プロジェクト: AlleyCat1976/Meridian59_103
void GameStartUser(session_node *s,user_node *u)
{
   parm_node p;
   val_type session_id_const;

   s->game->object_id = u->object_id;

   session_id_const.v.tag = TAG_SESSION;
   session_id_const.v.data = s->session_id;

   p.type = CONSTANT;
   p.value = session_id_const.int_val;
   p.name_id = SESSION_ID_PARM;
   SendTopLevelBlakodMessage(s->game->object_id,USER_ENTER_GAME_MSG,1,&p);

   // Log of characters, accounts, ips
   val_type name_val;
   resource_node *r;
   name_val.int_val = SendTopLevelBlakodMessage(s->game->object_id,USER_NAME_MSG,0,NULL);
   r = GetResourceByID(name_val.v.data);

   if (r && r->resource_val)
     MySQLRecordPlayerLogin(s->account->name,r->resource_val,s->conn.name);

   SetSessionTimer(s,ConfigInt(CREDIT_DRAIN_TIME));
}
コード例 #2
0
ファイル: game.c プロジェクト: AlleyCat1976/Meridian59_103
void GameSendEachUserChoice(user_node *u)
{
   val_type name_val,num_val;
   resource_node *r;
   
   AddIntToPacket(u->object_id);

   name_val.int_val = SendTopLevelBlakodMessage(u->object_id,USER_NAME_MSG,0,NULL);
   if (name_val.v.tag != TAG_RESOURCE)
   {
      eprintf("GameSendEachUserChoice object %i has non-resource name %i,%i\n",
	      u->object_id,name_val.v.tag,name_val.v.data);
      AddStringToPacket(0,"");
   }
   else
   {
      r = GetResourceByID(name_val.v.data);
      if (r == NULL)
      {
	 bprintf("GameSendEachUserChoice can't find resource %i as a resource/string\n",
		 name_val.v.data);
	    return;
      }
      AddStringToPacket(strlen(r->resource_val),r->resource_val);
   }

   num_val.int_val = SendTopLevelBlakodMessage(u->object_id,IS_FIRST_TIME_MSG,0,NULL);
   if (num_val.v.data != 0)
      AddByteToPacket(1);   /* char has been in game before */
   else
      AddByteToPacket(0);   /* char has NOT been in game before */
      
}
コード例 #3
0
void MySQLRecordPlayerLogin(session_node *s)
{
	MySQLCheckConnection();
	if (!connected | !enabled)
		return;

	//Log of characters, accounts, ips
	val_type name_val;
    resource_node *r;
	char buf[1000];
	
    name_val.int_val = SendTopLevelBlakodMessage(s->game->object_id,USER_NAME_MSG,0,NULL);
    r = GetResourceByID(name_val.v.data);
    //dprintf("Account %s (%d) logged in with character %s (%d) from ip %s",s->account->name,s->account->account_id,r->resource_val,s->game->object_id,s->conn.name);

	sprintf(buf,"INSERT INTO `player_logins` \
				SET player_logins_account_name = '%s', \
				player_logins_character_name = '%s', \
				player_logins_IP = '%s', \
				player_logins_time = NOW()",s->account->name,r->resource_val,s->conn.name);
	if(mysql_query(mysqlcon, buf))
	{
		dprintf("Unable to record StatPlayerLogin", mysql_error(mysqlcon));
		return;
	}
}
コード例 #4
0
void MySQLRecordPlayerAssessDamage(int res_who_damaged, int res_who_attacker, int aspell, int atype, int damage_applied, int damage_original, int res_weapon)
{
	MySQLCheckConnection();
	if (!connected | !enabled)
		return;

	char buf[1200];
	resource_node *r_who_damaged, *r_who_attacker, *r_weapon;


	r_who_damaged = GetResourceByID(res_who_damaged);
	r_who_attacker = GetResourceByID(res_who_attacker);
	r_weapon = GetResourceByID(res_weapon);

	sprintf(buf,"INSERT INTO `player_damaged` SET player_damaged_who = '%s', player_damaged_attacker = '%s', player_damaged_aspell = %d, player_damaged_atype = %d, player_damaged_applied = %d, player_damaged_original = %d, player_damaged_weapon = '%s', player_damaged_time = NOW()",
		r_who_damaged->resource_val, r_who_attacker->resource_val, aspell, atype, damage_applied, damage_original, r_weapon->resource_val);
	if(mysql_query(mysqlcon,buf))
	{
		dprintf("Unable to record StatPlayerAssessDamage", mysql_error(mysqlcon));
		return;
	}
}
コード例 #5
0
ファイル: term.c プロジェクト: GarOfMeridian/Meridian59_103
const char * GetDataName(val_type val)
{
   resource_node *r;
   class_node *c;
   static char s[10];
   val_type int_val;

   switch (val.v.tag)
   {
   case TAG_RESOURCE :
      r = GetResourceByID(val.v.data);
      if (r == NULL)
      {
         sprintf(s,"%i",val.v.data);
         return s;
      }
      if (r->resource_name == NULL)
      {
         sprintf(s,"%i",r->resource_id);
         return s;
      }
      return r->resource_name;

   case TAG_CLASS :
      c = GetClassByID(val.v.data);
      if (c == NULL)
      {
         eprintf("GetTagData error, can't find class id %i\n",val.v.data);
         sprintf(s,"%i",val.v.data);
         return s;
      }
      return c->class_name;

   case TAG_MESSAGE :
      // Message tag saving *is* supported, however is not advised as message ID
      // numbers can change and any resulting call could have undesired effects.
      eprintf("GetTagData error, message tag saving not supported %i\n",val.v.data);

      /* fall through */
   default :
      /* write as positive int so no problem reading in */
      int_val.v.tag = val.v.tag;
      int_val.v.data = val.v.data;
      sprintf(s,"%i",int_val.v.data);
      return s;
   }
}
コード例 #6
0
int LoadRoom(int resource_id)
{
   val_type ret_val;
   resource_node* r;
   room_rsc_node *rrsc;
   char s[MAX_PATH + FILENAME_MAX];

   /****************************************************************/

   r = GetResourceByID(resource_id);
   if (!r)
   {
      bprintf("LoadRoomData can't find resource %i\n",resource_id);
      return NIL;
   }

   ret_val.v.tag = TAG_ROOM_DATA;

   /****************************************************************/

   // CASE 1: Reuse already loaded ROO
   if (room_rscs)
   {
      rrsc = room_rscs[resource_id % INIT_ROOMTABLE_SIZE];
      while (rrsc)
      {
         if (rrsc->resource_id == resource_id)
         {
            ret_val.v.data = rrsc->roomdata_id;
            return ret_val.int_val;
         }
         rrsc = rrsc->next;
      }
   }

   /****************************************************************/

   // CASE 2: Load ROO
   room_node* newnode = (room_node*)AllocateMemory(MALLOC_ID_ROOM, sizeof(room_node));

   // combine path for roo and filename
   sprintf(s, "%s%s", ConfigStr(PATH_ROOMS), r->resource_val[0]);

   // try load it
   if (!BSPLoadRoom(s, &newnode->data))
   {
      FreeMemory(MALLOC_ID_ROOM, newnode, sizeof(room_node));
      bprintf("LoadRoomData couldn't open %s!!!\n",r->resource_val[0]);
      return NIL;
   }

   // Add this room_node to the rooms table.
   newnode->data.roomdata_id = idcounter++;
   newnode->data.resource_id = resource_id;
   newnode->next = rooms[newnode->data.roomdata_id % INIT_ROOMTABLE_SIZE];
   rooms[newnode->data.roomdata_id % INIT_ROOMTABLE_SIZE] = newnode;

   // Add room_rsc_node for this resource.
   rrsc = (room_rsc_node *)AllocateMemory(MALLOC_ID_ROOM, sizeof(room_rsc_node));

   rrsc->resource_id = resource_id;
   rrsc->roomdata_id = newnode->data.roomdata_id;
   rrsc->next = room_rscs[resource_id % INIT_ROOMTABLE_SIZE];
   room_rscs[resource_id % INIT_ROOMTABLE_SIZE] = rrsc;

   ret_val.v.data = newnode->data.roomdata_id;
   return ret_val.int_val;
}
コード例 #7
0
ファイル: commcli.c プロジェクト: jboullion/Meridian59
void AddBlakodToPacket(val_type obj_size,val_type obj_data)
{
   int num_bytes;
   char byte1;
   short byte2;
   int byte4;
   string_node *snod;
   resource_node *r;
   val_type temp_val;

   if (obj_size.v.tag != TAG_INT)
   {
      bprintf("AddBlakodToPacket looking for int, # of bytes, got %i,%i\n",
	      obj_size.v.tag,obj_size.v.data);
      return;
   }

   num_bytes = obj_size.v.data;

   if (obj_data.v.tag == TAG_NIL)
      bprintf("AddBlakodToPacket looking for value, got NIL\n");

/*   dprintf("Send %i bytes from %i,%i\n",obj_size.data,obj_data.v.tag,obj_data.v.data); */
   switch (obj_data.v.tag)
   {
   case TAG_STRING :
      snod = GetStringByID(obj_data.v.data);
      if (snod == NULL)
      {
			bprintf("AddBlakodToPacket can't find string id %i\n",obj_data.v.data);
			break;
      }
      AddStringToPacket(snod->len_data,snod->data);
      break;
      
   case TAG_TEMP_STRING :
      snod = GetTempString();
      AddStringToPacket(snod->len_data,snod->data);
      break;

   default :
      switch (num_bytes)
      {
      case 1 :
			byte1 = (char) obj_data.v.data;
			AddByteToPacket(byte1);
			break;
      case 2 : 
			byte2 = (short) obj_data.v.data;
			AddShortToPacket(byte2);
			break;
      case 4 : 
			byte4 = (int) obj_data.v.data;
			AddIntToPacket(byte4);
			break;
      case NUMBER_OBJECT :
			temp_val.int_val = obj_data.int_val;
			temp_val.v.tag = CLIENT_TAG_NUMBER;
			byte4 = temp_val.int_val;
			AddIntToPacket(byte4);
			break;
      case STRING_RESOURCE :
			if (obj_data.v.tag != TAG_RESOURCE)
			{
				bprintf("AddBlakodToPacket can't send %i,%i as a resource/string\n",
						  obj_data.v.tag,obj_data.v.data);
				return;
			}
			r = GetResourceByID(obj_data.v.data);
			if (r == NULL)
			{
				bprintf("AddBlakodToPacket can't find resource %i as a resource/string\n",
						  obj_data.v.data);
				return;
			}
			AddStringToPacket(strlen(r->resource_val[0]),r->resource_val[0]);
			break;
      default :
			bprintf("AddBlakodToPacket can't send %i bytes\n",num_bytes);
			break;
      }
   }
}