void send_char_details(int actor_node, const char *char_name){ /** public function - see header */ int socket=clients.client[actor_node].socket; //get the id for the char int char_id=get_db_char_id(char_name); //check that the char id is valid if(char_id==0){ send_text(socket, CHAT_SERVER, "%c%s", c_red3+127, "character does not exist"); return; } //if the char id is valid then load the char data from the database get_db_char_data(char_id); send_text(socket, CHAT_SERVER, "%cCharacter :%s", c_green3+127, character.char_name); int race_id=character_types.character_type[character.char_type].race_id; send_text(socket, CHAT_SERVER, "%cRace :%s", c_green3+127, races.race[race_id].race_name); int gender_id=character_types.character_type[character.char_type].gender_id; send_text(socket, CHAT_SERVER, "%cGender :%s", c_green3+127, genders.gender[gender_id].gender_name); char time_stamp_str[9]=""; char date_stamp_str[11]=""; get_time_stamp_str(character.char_created, time_stamp_str); get_date_stamp_str(character.char_created, date_stamp_str); send_text(socket, CHAT_SERVER, "%cDate Created :%s %s", c_green3+127, date_stamp_str, time_stamp_str); send_text(socket, CHAT_SERVER, "%cCharacter Age:%i", c_green3+127, char_age(actor_node)); if(character.guild_id==0){ send_text(socket, CHAT_SERVER, "%cGuild :guildless player", c_green3+127); send_text(socket, CHAT_SERVER, "%cRank :n/a", c_green3+127); send_text(socket, CHAT_SERVER, "%cJoined :n/a", c_green3+127); } else { int guild_id=character.guild_id; send_text(socket, CHAT_SERVER, "%cGuild :%s", c_green3+127, guilds.guild[guild_id].guild_name); send_text(socket, CHAT_SERVER, "%cGuild tag :%s", c_green3+127, guilds.guild[guild_id].guild_tag ); send_text(socket, CHAT_SERVER, "%cRank :%i", c_green3+127, character.guild_rank); get_time_stamp_str(character.joined_guild, time_stamp_str); get_date_stamp_str(character.joined_guild, date_stamp_str); send_text(socket, CHAT_SERVER, "%cJoined :%s %s", c_green3+127, date_stamp_str, time_stamp_str); } }
void check_new_character(int connection, unsigned char *packet){ int packet_length=packet[1] + (packet[2] * 256) + 2; //create a union so we can convert the packet array into easily accessible individual data elements union { unsigned char buf[packet_length]; struct { unsigned char protocol; unsigned char lsb; unsigned char msb; char name_and_password[packet_length-10]; unsigned char skin; unsigned char hair; unsigned char shirt; unsigned char pants; unsigned char boots; unsigned char type; unsigned char head; }output; }convert; //copy the packet into the union memcpy(convert.buf, packet, packet_length); //extract the character name from the union char char_name[80]=""; get_str_island(convert.output.name_and_password, char_name, 1); //check if the character name already exists if(get_db_char_data(char_name)==FOUND){ //if the char name exists, abort character creation and send warning to client char text_out[1024]=""; sprintf(text_out, "%cSorry, but that character name already exists", c_red1+127); send_raw_text(connection, CHAT_SERVER, text_out); send_create_char_not_ok(connection); log_event(EVENT_SESSION, "Attempt to create new char with existing char name [%s]", char_name); return; } else { //if char name does not exist, tell idle buffer to create a new character with that name db_push_buffer("", connection, IDLE_BUFFER_PROCESS_ADD_NEWCHAR, packet); } }