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)); }
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 */ }
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; } }
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; } }
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; } }
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; }
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; } } }