本文整理汇总了C++中chrif_save函数的典型用法代码示例。如果您正苦于以下问题:C++ chrif_save函数的具体用法?C++ chrif_save怎么用?C++ chrif_save使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了chrif_save函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: storage_storage_quit
/*==========================================
* When quitting the game.
*------------------------------------------*/
void storage_storage_quit(struct map_session_data* sd, int flag)
{
nullpo_retv(sd);
if (save_settings&4)
chrif_save(sd, flag); //Invokes the storage saving as well.
sd->state.storage_flag = 0;
}
示例2: storage_storageclose
/**
* Make player close his storage
* @author : [massdriller] / modified by [Valaris]
* @param sd : player
*/
void storage_storageclose(struct map_session_data *sd)
{
nullpo_retv(sd);
clif_storageclose(sd);
if (save_settings&4)
chrif_save(sd, 0); //Invokes the storage saving as well
sd->state.storage_flag = 0;
}
示例3: quest_change
int quest_change(TBL_PC * sd, int qid1, int qid2)
{
int i, j;
if( quest_check(sd, qid2, HAVEQUEST) >= 0 )
{
ShowError("quest_change: Character %d already has quest %d.\n", sd->status.char_id, qid2);
return -1;
}
if( quest_check(sd, qid1, HAVEQUEST) < 0 )
{
ShowError("quest_change: Character %d doesn't have quest %d.\n", sd->status.char_id, qid1);
return -1;
}
if( (j = quest_search_db(qid2)) < 0 )
{
ShowError("quest_change: quest %d not found in DB.\n",qid2);
return -1;
}
ARR_FIND(0, sd->avail_quests, i, sd->quest_log[i].quest_id == qid1);
if(i == sd->avail_quests)
{
ShowError("quest_change: Character %d has completed quests %d.\n", sd->status.char_id, qid1);
return -1;
}
memset(&sd->quest_log[i], 0, sizeof(struct quest));
sd->quest_log[i].quest_id = quest_db[j].id;
if( quest_db[j].time )
sd->quest_log[i].time = (unsigned int)(time(NULL) + quest_db[j].time);
sd->quest_log[i].state = Q_ACTIVE;
sd->quest_index[i] = j;
sd->save_quest = true;
clif_quest_delete(sd, qid1);
clif_quest_add(sd, &sd->quest_log[i], sd->quest_index[i]);
if( save_settings&64 )
chrif_save(sd,0);
return 0;
}
示例4: gstorage_storageclose
/**
* Close storage for player then save it
* @param sd : player
*/
void gstorage_storageclose(struct map_session_data *sd)
{
struct guild_storage *stor;
nullpo_retv(sd);
nullpo_retv(stor = gstorage_get_storage(sd->status.guild_id));
clif_storageclose(sd);
if (stor->opened) {
if (save_settings&4)
chrif_save(sd, 0); //This one also saves the storage [Skotlex]
else
gstorage_storagesave(sd->status.account_id, sd->status.guild_id, 0);
stor->opened = 0;
}
sd->state.storage_flag = 0;
}
示例5: quest_add
int quest_add(TBL_PC * sd, int quest_id)
{
int i, j;
if( sd->num_quests >= MAX_QUEST_DB )
{
ShowError("quest_add: Character %d has got all the quests.(max quests: %d)\n", sd->status.char_id, MAX_QUEST_DB);
return 1;
}
if( quest_check(sd, quest_id, HAVEQUEST) >= 0 )
{
ShowError("quest_add: Character %d already has quest %d.\n", sd->status.char_id, quest_id);
return -1;
}
if( (j = quest_search_db(quest_id)) < 0 )
{
ShowError("quest_add: quest %d not found in DB.\n", quest_id);
return -1;
}
i = sd->avail_quests;
memmove(&sd->quest_log[i+1], &sd->quest_log[i], sizeof(struct quest)*(sd->num_quests-sd->avail_quests));
memmove(sd->quest_index+i+1, sd->quest_index+i, sizeof(int)*(sd->num_quests-sd->avail_quests));
memset(&sd->quest_log[i], 0, sizeof(struct quest));
sd->quest_log[i].quest_id = quest_db[j].id;
if( quest_db[j].time )
sd->quest_log[i].time = (unsigned int)(time(NULL) + quest_db[j].time);
sd->quest_log[i].state = Q_ACTIVE;
sd->quest_index[i] = j;
sd->num_quests++;
sd->avail_quests++;
sd->save_quest = true;
clif_quest_add(sd, &sd->quest_log[i], sd->quest_index[i]);
if( save_settings&64 )
chrif_save(sd,0);
return 0;
}
示例6: storage_storage_quit
/*==========================================
* When quitting the game.
*------------------------------------------
*/
int storage_storage_quit(struct map_session_data *sd, int flag)
{
struct storage *stor;
nullpo_retr(0, sd);
nullpo_retr(0, stor=account2storage2(sd->status.account_id));
if (stor->storage_status)
{
if (save_settings&4)
chrif_save(sd, flag); //Invokes the storage saving as well.
else
storage_storage_save(sd->status.account_id, flag);
}
stor->storage_status = 0;
sd->state.storage_flag = 0;
return 0;
}
示例7: storage_guild_storageclose
/**
* Close storage for player then save it
* @param sd : player
*/
void storage_guild_storageclose(struct map_session_data* sd)
{
struct s_storage *stor;
nullpo_retv(sd);
nullpo_retv(stor = guild2storage2(sd->status.guild_id));
clif_storageclose(sd);
if (stor->status) {
if (save_settings&CHARSAVE_STORAGE)
chrif_save(sd, 0); //This one also saves the storage. [Skotlex]
else
storage_guild_storagesave(sd->status.account_id, sd->status.guild_id,0);
stor->status = false;
}
sd->state.storage_flag = 0;
}
示例8: pet_birth_process
/**
* Begin hatching a pet.
* @param sd : player requesting
* @param pet : pet requesting
*/
int pet_birth_process(struct map_session_data *sd, struct s_pet *pet)
{
nullpo_retr(1, sd);
Assert((sd->status.pet_id == 0 || sd->pd == 0) || sd->pd->master == sd);
if(sd->status.pet_id && pet->incubate == 1) {
sd->status.pet_id = 0;
return 1;
}
pet->incubate = 0;
pet->account_id = sd->status.account_id;
pet->char_id = sd->status.char_id;
sd->status.pet_id = pet->pet_id;
if(pet_data_init(sd, pet)) {
sd->status.pet_id = 0;
return 1;
}
intif_save_petdata(sd->status.account_id,pet);
if (save_settings&8)
chrif_save(sd,0); //is it REALLY Needed to save the char for hatching a pet? [Skotlex]
if(sd->bl.prev != NULL) {
if(map_addblock(&sd->pd->bl))
return 1;
clif_spawn(&sd->pd->bl);
clif_send_petdata(sd,sd->pd, 0,0);
clif_send_petdata(sd,sd->pd, 5,battle_config.pet_hair_style);
clif_pet_equip_area(sd->pd);
clif_send_petstatus(sd);
}
Assert((sd->status.pet_id == 0 || sd->pd == 0) || sd->pd->master == sd);
return 0;
}
示例9: quest_add
/**
* Adds a quest to the player's list.
* New quest will be added as Q_ACTIVE.
* @param sd : Player's data
* @param quest_id : ID of the quest to add.
* @return 0 in case of success, nonzero otherwise
*/
int quest_add(TBL_PC *sd, int quest_id)
{
int n;
struct quest_db *qi = quest_db(quest_id);
if( qi == &quest_dummy ) {
ShowError("quest_add: quest %d not found in DB.\n", quest_id);
return -1;
}
if( quest_check(sd, quest_id, HAVEQUEST) >= 0 ) {
ShowError("quest_add: Character %d already has quest %d.\n", sd->status.char_id, quest_id);
return -1;
}
n = sd->avail_quests; //Insertion point
sd->num_quests++;
sd->avail_quests++;
RECREATE(sd->quest_log, struct quest, sd->num_quests);
//The character has some completed quests, make room before them so that they will stay at the end of the array
if( sd->avail_quests != sd->num_quests )
memmove(&sd->quest_log[n + 1], &sd->quest_log[n], sizeof(struct quest) * (sd->num_quests-sd->avail_quests));
memset(&sd->quest_log[n], 0, sizeof(struct quest));
sd->quest_log[n].quest_id = qi->id;
if( qi->time )
sd->quest_log[n].time = (unsigned int)(time(NULL) + qi->time);
sd->quest_log[n].state = Q_ACTIVE;
sd->save_quest = true;
clif_quest_add(sd, &sd->quest_log[n]);
clif_quest_update_objective(sd, &sd->quest_log[n]);
if( save_settings&CHARSAVE_QUEST )
chrif_save(sd,0);
return 0;
}
示例10: chrif_changedsex
/*==========================================
* 性別変化終了 (modified by Yor)
*------------------------------------------
*/
static
void chrif_changedsex(Session *, const Packet_Fixed<0x2b0d>& fixed)
{
dumb_ptr<map_session_data> sd;
AccountId acc = fixed.account_id;
SEX sex = fixed.sex;
if (battle_config.etc_log)
PRINTF("chrif_changedsex %d.\n"_fmt, acc);
sd = map_id2sd(account_to_block(acc));
if (acc)
{
if (sd != nullptr && sd->status.sex != sex)
{
if (sd->status.sex == SEX::MALE)
sd->sex = sd->status.sex = SEX::FEMALE;
else if (sd->status.sex == SEX::FEMALE)
sd->sex = sd->status.sex = SEX::MALE;
// to avoid any problem with equipment and invalid sex, equipment is unequiped.
for (IOff0 i : IOff0::iter())
{
if (sd->status.inventory[i].nameid
&& bool(sd->status.inventory[i].equip))
pc_unequipitem(sd, i, CalcStatus::NOW);
}
// save character
chrif_save(sd);
sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
// do same modify in login-server for the account, but no in char-server (it ask again login_id1 to login, and don't remember it)
clif_displaymessage(sd->sess,
"Your sex has been changed (need disconexion by the server)..."_s);
clif_setwaitclose(sd->sess); // forced to disconnect for the change
}
}
else
{
if (sd != nullptr)
{
PRINTF("chrif_changedsex failed.\n"_fmt);
}
}
}
示例11: pet_birth_process
int pet_birth_process(struct map_session_data *sd, struct s_pet *pet)
{
char pet_output[1024]; // Declaracion de char para Invocacion Pet's [Tab]
nullpo_retr(1, sd);
Assert((sd->status.pet_id == 0 || sd->pd == 0) || sd->pd->msd == sd);
if(sd->status.pet_id && pet->incuvate == 1) {
sd->status.pet_id = 0;
return 1;
}
pet->incuvate = 0;
pet->account_id = sd->status.account_id;
pet->char_id = sd->status.char_id;
sd->status.pet_id = pet->pet_id;
if(pet_data_init(sd, pet)) {
sd->status.pet_id = 0;
return 1;
}
intif_save_petdata(sd->status.account_id,pet);
if (save_settings&8)
chrif_save(sd,0); //is it REALLY Needed to save the char for hatching a pet? [Skotlex]
if(sd->bl.prev != NULL) {
map_addblock(&sd->pd->bl);
clif_spawn(&sd->pd->bl);
clif_send_petdata(sd,sd->pd, 0,0);
clif_send_petdata(sd,sd->pd, 5,battle_config.pet_hair_style);
clif_pet_equip_area(sd->pd);
clif_send_petstatus(sd);
}
Assert((sd->status.pet_id == 0 || sd->pd == 0) || sd->pd->msd == sd);
clif_misceffect(&sd->pd->bl, 0); // Efecto 1 de nacimiento [Tab]
clif_misceffect(&sd->pd->bl, 344); // Efecto 2 de nacimiento [Tab]
sprintf(pet_output,"Get Out %s... NOW!",pet->name); // Cuidado aca con el nombre del pet
clif_displaymessage(sd->fd, pet_output); // Frase nacimiento [Tab]
return 0;
}
示例12: storage_guild_storageclose
//Close storage for sd and save it
int storage_guild_storageclose(struct map_session_data* sd)
{
struct guild_storage *stor;
nullpo_ret(sd);
nullpo_ret(stor=guild2storage2(sd->status.guild_id));
clif_storageclose(sd);
if (stor->storage_status)
{
if (save_settings&4)
chrif_save(sd, 0); //This one also saves the storage. [Skotlex]
else
storage_guild_storagesave(sd->status.account_id, sd->status.guild_id,0);
stor->storage_status=0;
}
sd->state.storage_flag = 0;
return 0;
}
示例13: storage_storageclose
/*==========================================
* カプラ倉庫を閉じて保存
*------------------------------------------
*/
void storage_storageclose(struct map_session_data *sd)
{
struct storage *stor;
nullpo_retv(sd);
nullpo_retv(stor = (struct storage *)numdb_search(storage_db,sd->status.account_id));
if(stor->dirty) {
storage_sortitem(stor->store_item, MAX_STORAGE, &stor->sortkey, battle_config.personal_storage_sort);
intif_send_storage(stor);
if(battle_config.save_player_when_storage_closed) {
chrif_save(sd,0);
}
stor->dirty = 0;
}
stor->storage_status = 0;
sd->state.storage_flag = 0;
clif_storageclose(sd);
return;
}
示例14: auth_db_cleanup_sub
/**
* This can still happen (client times out while waiting for char to confirm auth data)
* @see DBApply
*/
int auth_db_cleanup_sub(DBKey key, DBData *data, va_list ap) {
struct auth_node *node = DB->data2ptr(data);
const char* states[] = { "Login", "Logout", "Map change" };
if(DIFF_TICK(gettick(),node->node_created)>60000) {
switch (node->state) {
case ST_LOGOUT:
//Re-save attempt (->sd should never be null here).
node->node_created = gettick(); //Refresh tick (avoid char-server load if connection is really bad)
chrif_save(node->sd, 1);
break;
default:
//Clear data. any connected players should have timed out by now.
ShowInfo("auth_db: Node (state %s) timed out for %d:%d\n", states[node->state], node->account_id, node->char_id);
chrif_char_offline_nsd(node->account_id, node->char_id);
chrif_auth_delete(node->account_id, node->char_id, node->state);
break;
}
return 1;
}
return 0;
}
示例15: chrif_changedsex
/*==========================================
* 性別変化終了 (modified by Yor)
*------------------------------------------
*/
static
void chrif_changedsex(Session *, const Packet_Fixed<0x2b0d>& fixed)
{
dumb_ptr<map_session_data> sd;
AccountId acc = fixed.account_id;
SEX sex = fixed.sex;
if (battle_config.etc_log)
PRINTF("chrif_changedsex %d.\n"_fmt, acc);
sd = map_id2sd(account_to_block(acc));
if (acc)
{
if (sd != nullptr && sd->status.sex != sex)
{
sd->sex = sd->status.sex = sex;
// to avoid any problem with equipment and invalid sex, equipment is unequiped.
for (IOff0 i : IOff0::iter())
{
if (sd->status.inventory[i].nameid
&& bool(sd->status.inventory[i].equip))
pc_unequipitem(sd, i, CalcStatus::LATER);
}
pc_calcstatus(sd, 0);
// save character
chrif_save(sd);
sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
// do same modify in login-server for the account, but no in char-server (it ask again login_id1 to login, and don't remember it)
clif_fixpcpos(sd); // use clif_set0078_main_1d8 to send new sex to the client
}
}
else
{
if (sd != nullptr)
{
PRINTF("chrif_changedsex failed.\n"_fmt);
}
}
}