📄 character.c
字号:
character->datalen = hex_to_str(data_in_hex, character->data, 33); decode_character_data(character); return 0;}extern int character_create(t_account * account, t_clienttag clienttag, char const * realmname, char const * name, t_character_class class, t_character_expansion expansion){ t_character * ch; if (!account) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL account"); return -1; } if (!clienttag) { eventlog(eventlog_level_error,__FUNCTION__,"got bad clienttag"); return -1; } if (!realmname) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL realmname"); return -1; } if (!name) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL name"); return -1; } ch = xmalloc(sizeof(t_character)); ch->name = xstrdup(name); ch->realmname = xstrdup(realmname); ch->guildname = xstrdup(""); /* FIXME: how does this work on Battle.net? */ if (account_check_closed_character(account, clienttag, realmname, name)) { eventlog(eventlog_level_error,__FUNCTION__,"a character with the name \"%s\" does already exist in realm \"%s\"",name,realmname); xfree((void *)ch->realmname); /* avoid warning */ xfree((void *)ch->name); /* avoid warning */ xfree(ch); return -1; } load_initial_data (ch, class, expansion); account_add_closed_character(account, clienttag, ch); return 0;}extern char const * character_get_name(t_character const * ch){ if (!ch) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL character"); return NULL; } return ch->name;}extern char const * character_get_realmname(t_character const * ch){ if (!ch) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL character"); return NULL; } return ch->realmname;}extern t_character_class character_get_class(t_character const * ch){ if (!ch) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL character"); return character_class_none; } return bncharacter_class_to_character_class(ch->class);}extern char const * character_get_playerinfo(t_character const * ch){ t_d2char_info d2char_info; static char playerinfo[sizeof(t_d2char_info)+4]; if (!ch) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL character"); return NULL; } /* ff 0f 68 00 ..h.0x0040: 01 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 ................0x0050: d8 94 f6 08 b1 65 77 02 65 76 69 6c 67 72 75 73 .....ew.evilgrus0x0060: 73 6c 65 72 00 56 44 32 44 42 65 74 61 57 65 73 sler.VD2DBetaWes0x0070: 74 2c 74 61 72 61 6e 2c 83 80 ff ff ff ff ff 2f t,taran,......./0x0080: ff ff ff ff ff ff ff ff ff ff 03 ff ff ff ff ff ................0x0090: ff ff ff ff ff ff ff ff ff ff ff 07 80 80 80 80 ................0x00a0: ff ff ff 00*/ bn_byte_set(&d2char_info.unknownb1,ch->unknownb1); bn_byte_set(&d2char_info.unknownb2,ch->unknownb2); bn_byte_set(&d2char_info.helmgfx,ch->helmgfx); bn_byte_set(&d2char_info.bodygfx,ch->bodygfx); bn_byte_set(&d2char_info.leggfx,ch->leggfx); bn_byte_set(&d2char_info.lhandweapon,ch->lhandweapon); bn_byte_set(&d2char_info.lhandgfx,ch->lhandgfx); bn_byte_set(&d2char_info.rhandweapon,ch->rhandweapon); bn_byte_set(&d2char_info.rhandgfx,ch->rhandgfx); bn_byte_set(&d2char_info.unknownb3,ch->unknownb3); bn_byte_set(&d2char_info.unknownb4,ch->unknownb4); bn_byte_set(&d2char_info.unknownb5,ch->unknownb5); bn_byte_set(&d2char_info.unknownb6,ch->unknownb6); bn_byte_set(&d2char_info.unknownb7,ch->unknownb7); bn_byte_set(&d2char_info.unknownb8,ch->unknownb8); bn_byte_set(&d2char_info.unknownb9,ch->unknownb9); bn_byte_set(&d2char_info.unknownb10,ch->unknownb10); bn_byte_set(&d2char_info.unknownb11,ch->unknownb11); bn_byte_set(&d2char_info.class,ch->class); bn_int_set(&d2char_info.unknown1,ch->unknown1); bn_int_set(&d2char_info.unknown2,ch->unknown2); bn_int_set(&d2char_info.unknown3,ch->unknown3); bn_int_set(&d2char_info.unknown4,ch->unknown4); bn_byte_set(&d2char_info.level,ch->level); bn_byte_set(&d2char_info.status,ch->status); bn_byte_set(&d2char_info.title,ch->title); bn_byte_set(&d2char_info.unknownb13,ch->unknownb13); bn_byte_set(&d2char_info.emblembgc,ch->emblembgc); bn_byte_set(&d2char_info.emblemfgc,ch->emblemfgc); bn_byte_set(&d2char_info.emblemnum,ch->emblemnum); bn_byte_set(&d2char_info.unknownb14,ch->unknownb14); memcpy(playerinfo,&d2char_info,sizeof(d2char_info)); strcpy(&playerinfo[sizeof(d2char_info)],ch->guildname); return playerinfo;}extern char const * character_get_guildname(t_character const * ch){ if (!ch) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL character"); return NULL; } return ch->guildname;}extern int character_verify_charlist(t_character const * ch, char const * charlist){ char * temp; char const * tok1; char const * tok2; if (!ch) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL character"); return -1; } if (!charlist) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL character"); return -1; } temp = xstrdup(charlist); tok1 = (char const *)strtok(temp,","); /* strtok modifies the string it is passed */ tok2 = strtok(NULL,","); while (tok1) { if (!tok2) { eventlog(eventlog_level_error,__FUNCTION__,"bad character list \"%s\"",temp); break; } if (strcasecmp(tok1,ch->realmname)==0 && strcasecmp(tok2,ch->name)==0) { xfree(temp); return 0; } tok1 = strtok(NULL,","); tok2 = strtok(NULL,","); } xfree(temp); return -1;}extern int characterlist_create(char const * dirname){ characterlist_head = list_create(); return 0;}extern int characterlist_destroy(void){ t_elem * curr; t_character * ch; if (characterlist_head) { LIST_TRAVERSE(characterlist_head,curr) { ch = elem_get_data(curr); if (!ch) /* should not happen */ { eventlog(eventlog_level_error,__FUNCTION__,"characterlist contains NULL item"); continue; } if (list_remove_elem(characterlist_head,&curr)<0) eventlog(eventlog_level_error,__FUNCTION__,"could not remove item from list"); xfree(ch); } if (list_destroy(characterlist_head)<0) return -1; characterlist_head = NULL; } return 0;}extern t_character * characterlist_find_character(char const * realmname, char const * charname){ t_elem * curr; t_character * ch; if (!realmname) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL realmname"); return NULL; } if (!charname) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL charname"); return NULL; } LIST_TRAVERSE(characterlist_head,curr) { ch = elem_get_data(curr); if (strcasecmp(ch->name,charname)==0 && strcasecmp(ch->realmname,realmname)==0) return ch; } return NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -