// パーティマップ更新要求 int mapif_parse_PartyChangeMap(int fd,int party_id,int account_id,char *map,int online,int lv) { struct party *p; int i; p=numdb_search(party_db,party_id); if(p==NULL){ return 0; } for(i=0;i<MAX_PARTY;i++){ if(p->member[i].account_id==account_id){ int flag=0; memcpy(p->member[i].map,map,16); p->member[i].online=online; p->member[i].lv=lv; mapif_party_membermoved(p,i); if( p->exp>0 && !party_check_exp_share(p) ){ p->exp=0; flag=1; } if(flag) mapif_party_optionchanged(fd,p,0,0); break; } } if(online==0) // 誰かがログアウトするごとにセーブ inter_party_save(); return 0; }
// セーブ int inter_save() { inter_storage_save(); inter_party_save(); inter_guild_save(); inter_pet_save(); return 0; }
// パーティ脱退要求 int mapif_parse_PartyLeave(int fd,int party_id,int account_id) { struct party *p=NULL; p=numdb_search(party_db,party_id); if(p!=NULL){ int i; for(i=0;i<MAX_PARTY;i++){ if(p->member[i].account_id==account_id){ mapif_party_leaved(party_id,account_id,p->member[i].name); memset(&p->member[i],0,sizeof(struct party_member)); if( party_check_empty(p)==0 ) mapif_party_info(-1,p);// まだ人がいるのでデータ送信 else inter_party_save(); // 解散したのでセーブ return 0; } } } return 0; }
// セーブ void inter_save(void) { inter_party_save(); inter_storage_save(); inter_accreg_save(); }