本文整理汇总了C++中pc_delitem函数的典型用法代码示例。如果您正苦于以下问题:C++ pc_delitem函数的具体用法?C++ pc_delitem怎么用?C++ pc_delitem使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pc_delitem函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: chrif_divorceack
/*==========================================
* Divorce players
* only used if 'partner_id' is offline
*------------------------------------------*/
int chrif_divorceack(int char_id, int partner_id)
{
struct map_session_data* sd;
int i;
if( !char_id || !partner_id )
return 0;
if( (sd = map_charid2sd(char_id)) != NULL && sd->status.partner_id == partner_id )
{
sd->status.partner_id = 0;
for(i = 0; i < MAX_INVENTORY; i++)
if (sd->status.inventory[i].nameid == WEDDING_RING_M || sd->status.inventory[i].nameid == WEDDING_RING_F)
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
}
if( (sd = map_charid2sd(partner_id)) != NULL && sd->status.partner_id == char_id )
{
sd->status.partner_id = 0;
for(i = 0; i < MAX_INVENTORY; i++)
if (sd->status.inventory[i].nameid == WEDDING_RING_M || sd->status.inventory[i].nameid == WEDDING_RING_F)
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
}
return 0;
}
示例2: mail_removeitem
int mail_removeitem(struct map_session_data *sd, short flag, int idx, int amount)
{
int i;
nullpo_ret(sd);
idx -= 2;
if( idx < 0 || idx >= MAX_INVENTORY )
return false;
if( amount <= 0 || amount > sd->inventory.u.items_inventory[idx].amount )
return false;
ARR_FIND(0, MAIL_MAX_ITEM, i, sd->mail.item[i].index == idx && sd->mail.item[i].nameid > 0);
if( i == MAIL_MAX_ITEM ){
return false;
}
if( flag ){
if( battle_config.mail_attachment_price > 0 ){
if( pc_payzeny( sd, battle_config.mail_attachment_price, LOG_TYPE_MAIL, NULL ) ){
return false;
}
}
#if PACKETVER < 20150513
// With client update packet
pc_delitem(sd, idx, amount, 1, 0, LOG_TYPE_MAIL);
#else
// RODEX refreshes the client inventory from the ACK packet
pc_delitem(sd, idx, amount, 0, 0, LOG_TYPE_MAIL);
#endif
}else{
for( ; i < MAIL_MAX_ITEM-1; i++ ){
if (sd->mail.item[i + 1].nameid == 0)
break;
sd->mail.item[i].index = sd->mail.item[i+1].index;
sd->mail.item[i].nameid = sd->mail.item[i+1].nameid;
sd->mail.item[i].amount = sd->mail.item[i+1].amount;
}
for( ; i < MAIL_MAX_ITEM; i++ ){
sd->mail.item[i].index = 0;
sd->mail.item[i].nameid = 0;
sd->mail.item[i].amount = 0;
}
#if PACKETVER < 20150513
clif_additem(sd, idx, amount, 0);
#else
clif_mail_removeitem(sd, true, idx + 2, amount);
#endif
}
return 1;
}
示例3: bg_member_removeskulls
int bg_member_removeskulls(struct map_session_data *sd)
{
int n;
nullpo_ret(sd);
if( (n = pc_search_inventory(sd,BLUE_SKULL)) >= 0 )
pc_delitem(sd,n,sd->status.inventory[n].amount,0,2,LOG_TYPE_CONSUME);
if( (n = pc_search_inventory(sd,RED_SKULL)) >= 0 )
pc_delitem(sd,n,sd->status.inventory[n].amount,0,2,LOG_TYPE_CONSUME);
if( (n = pc_search_inventory(sd,GREEN_SKULL)) >= 0 )
pc_delitem(sd,n,sd->status.inventory[n].amount,0,2,LOG_TYPE_CONSUME);
return 1;
}
示例4: pet_food
static int pet_food(struct map_session_data *sd, struct pet_data *pd)
{
int i, food_id;
food_id = pd->petDB->FoodID;
i = pc_search_inventory(sd, food_id);
if( i == INDEX_NOT_FOUND ) {
clif_pet_food(sd, food_id, 0);
return 1;
}
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_CONSUME);
if( pd->pet.hungry > 90 )
pet_set_intimate(pd, pd->pet.intimate - pd->petDB->r_full);
else {
int add_intimate = 0;
if( battle_config.pet_friendly_rate != 100 )
add_intimate = (pd->petDB->r_hungry * battle_config.pet_friendly_rate) / 100;
else
add_intimate = pd->petDB->r_hungry;
if( pd->pet.hungry > 75 ) {
add_intimate = add_intimate>>1;
if( add_intimate <= 0 )
add_intimate = 1;
}
pet_set_intimate(pd, pd->pet.intimate + add_intimate);
}
示例5: storage_storageadd
/**
* Add an item to the storage from the inventory.
* @param sd : player
* @param stor : Storage data
* @param index : inventory index to take the item from
* @param amount : number of item to take
* @return 0:fail, 1:success
*/
void storage_storageadd(struct map_session_data* sd, struct s_storage *stor, int index, int amount)
{
enum e_storage_add result;
nullpo_retv(sd);
result = storage_canAddItem(stor, index, sd->inventory.u.items_inventory, amount, MAX_INVENTORY);
if (result == STORAGE_ADD_INVALID)
return;
else if (result == STORAGE_ADD_OK) {
switch( storage_additem(sd, stor, &sd->inventory.u.items_inventory[index], amount) ){
case 0:
pc_delitem(sd,index,amount,0,4,LOG_TYPE_STORAGE);
return;
case 1:
break;
case 2:
result = STORAGE_ADD_NOROOM;
break;
}
}
clif_storageitemremoved(sd,index,0);
clif_dropitem(sd,index,0);
}
示例6: storage_storageadd
/*==========================================
* Add an item to the storage from the inventory.
*------------------------------------------
*/
int storage_storageadd(struct map_session_data *sd,int index,int amount)
{
struct storage *stor;
nullpo_retr(0, sd);
nullpo_retr(0, stor=account2storage2(sd->status.account_id));
if((stor->storage_amount > MAX_STORAGE) || !stor->storage_status)
return 0; // storage full / storage closed
if(index<0 || index>=MAX_INVENTORY)
return 0;
if(sd->status.inventory[index].nameid <= 0)
return 0; //No item on that spot
if(amount < 1 || amount > sd->status.inventory[index].amount)
return 0;
// log_tostorage(sd, index, 0);
if(storage_additem(sd,stor,&sd->status.inventory[index],amount)==0)
// remove item from inventory
pc_delitem(sd,index,amount,0);
return 1;
}
示例7: party_member_withdraw
/// Invoked (from char-server) when a party member leaves the party.
int party_member_withdraw(int party_id, int account_id, int char_id)
{
struct map_session_data* sd = map_id2sd(account_id);
struct party_data* p = party_search(party_id);
if( p ) {
int i;
ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == account_id && p->party.member[i].char_id == char_id );
if( i < MAX_PARTY ) {
clif_party_withdraw(p,sd,account_id,p->party.member[i].name,0x0);
memset(&p->party.member[i], 0, sizeof(p->party.member[0]));
memset(&p->data[i], 0, sizeof(p->data[0]));
p->party.count--;
party_check_state(p);
}
}
if( sd && sd->status.party_id == party_id && sd->status.char_id == char_id ) {
int idxlist[MAX_INVENTORY]; //or malloc to reduce consumtion
int j,i;
j = pc_bound_chk(sd,3,idxlist);
for(i=0;i<j;i++)
pc_delitem(sd,idxlist[i],sd->status.inventory[idxlist[i]].amount,0,1,LOG_TYPE_OTHER);
sd->status.party_id = 0;
clif_charnameupdate(sd); //Update name display [Skotlex]
//TODO: hp bars should be cleared too
if( p->instance_id )
instance_check_kick(sd);
}
return 0;
}
示例8: pet_food
static int pet_food(struct map_session_data *sd, struct pet_data *pd)
{
int i,k;
k=pd->petDB->FoodID;
i=pc_search_inventory(sd,k);
if(i < 0) {
clif_pet_food(sd,k,0);
return 1;
}
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME);
if( pd->pet.hungry > 90 )
pet_set_intimate(pd, pd->pet.intimate - pd->petDB->r_full);
else
{
if( battle_config.pet_friendly_rate != 100 )
k = (pd->petDB->r_hungry * battle_config.pet_friendly_rate)/100;
else
k = pd->petDB->r_hungry;
if( pd->pet.hungry > 75 )
{
k = k >> 1;
if( k <= 0 )
k = 1;
}
pet_set_intimate(pd, pd->pet.intimate + k);
}
示例9: storage_guild_storageadd
/*==========================================
* Attempt to add an item in guild storage from inventory, then refresh it
* @index : inventory idx
* return
* 0 : fail
* 1 : succes
*------------------------------------------*/
int storage_guild_storageadd(struct map_session_data* sd, int index, int amount)
{
struct guild_storage *stor;
nullpo_ret(sd);
nullpo_ret(stor=guild2storage2(sd->status.guild_id));
if( !stor->storage_status || stor->storage_amount > MAX_GUILD_STORAGE )
return 0;
if( index<0 || index>=MAX_INVENTORY )
return 0;
if( sd->status.inventory[index].nameid <= 0 )
return 0;
if( amount < 1 || amount > sd->status.inventory[index].amount )
return 0;
if( stor->lock ) {
storage_guild_storageclose(sd);
return 0;
}
if(guild_storage_additem(sd,stor,&sd->status.inventory[index],amount)==0)
pc_delitem(sd,index,amount,0,4,LOG_TYPE_GSTORAGE);
return 1;
}
示例10: gstorage_storageadd
/**
* Attempt to add an item in guild storage from inventory, then refresh it
* @param sd : player
* @param amount : number of item to delete
*/
void gstorage_storageadd(struct map_session_data *sd, int index, int amount)
{
struct guild_storage *stor;
nullpo_retv(sd);
nullpo_retv(stor = gstorage_get_storage(sd->status.guild_id));
if (!stor->opened || stor->opened != sd->status.char_id || stor->storage_amount > MAX_GUILD_STORAGE)
return;
if (index < 0 || index >= MAX_INVENTORY)
return;
if (!(sd->status.inventory[index].nameid))
return;
if (amount < 1 || amount > sd->status.inventory[index].amount)
return;
if (stor->locked) {
gstorage_storageclose(sd);
return;
}
if (gstorage_additem(sd, stor, &sd->status.inventory[index], amount))
pc_delitem(sd, index, amount, 0, 4, LOG_TYPE_GSTORAGE);
else {
clif_storageitemremoved(sd, index, 0);
clif_dropitem(sd, index, 0);
}
}
示例11: storage_storageadd
/**
* Add an item to the storage from the inventory.
* @param sd : player
* @param index : inventory index to take the item from
* @param amount : number of item to take
* @return 0:fail, 1:success
*/
int storage_storageadd(struct map_session_data* sd, int index, int amount)
{
nullpo_ret(sd);
if( sd->status.storage.storage_amount > sd->storage_size )
return 0; // storage full
if( index < 0 || index >= MAX_INVENTORY )
return 0;
if( sd->status.inventory[index].nameid <= 0 )
return 0; // No item on that spot
if( amount < 1 || amount > sd->status.inventory[index].amount )
return 0;
if( storage_additem(sd,&sd->status.inventory[index],amount) == 0 )
pc_delitem(sd,index,amount,0,4,LOG_TYPE_STORAGE);
else {
clif_dropitem(sd,index,0);
return 0;
}
return 1;
}
示例12: storage_guild_storageadd
/**
* Attempt to add an item in guild storage from inventory, then refresh it
* @param sd : player
* @param amount : number of item to delete
*/
void storage_guild_storageadd(struct map_session_data* sd, int index, int amount)
{
struct s_storage *stor;
nullpo_retv(sd);
nullpo_retv(stor = guild2storage2(sd->status.guild_id));
if( !stor->status || stor->amount > MAX_GUILD_STORAGE )
return;
if( index < 0 || index >= MAX_INVENTORY )
return;
if( sd->inventory.u.items_inventory[index].nameid == 0 )
return;
if( amount < 1 || amount > sd->inventory.u.items_inventory[index].amount )
return;
if( stor->lock ) {
storage_guild_storageclose(sd);
return;
}
if(storage_guild_additem(sd,stor,&sd->inventory.u.items_inventory[index],amount))
pc_delitem(sd,index,amount,0,4,LOG_TYPE_GSTORAGE);
else {
clif_storageitemremoved(sd,index,0);
clif_dropitem(sd,index,0);
}
}
示例13: hom_food
/**
* Feed homunculus
* @param sd
* @param hd
*/
int hom_food(struct map_session_data *sd, struct homun_data *hd)
{
int i, foodID, emotion;
nullpo_retr(1,sd);
nullpo_retr(1,hd);
if (hd->homunculus.vaporize)
return 1;
foodID = hd->homunculusDB->foodID;
i = pc_search_inventory(sd,foodID);
if (i < 0) {
clif_hom_food(sd,foodID,0);
return 1;
}
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME);
if ( hd->homunculus.hunger >= 91 ) {
hom_decrease_intimacy(hd, 50);
emotion = ET_KEK;
} else if ( hd->homunculus.hunger >= 76 ) {
hom_decrease_intimacy(hd, 5);
emotion = ET_PROFUSELY_SWEAT;
} else if ( hd->homunculus.hunger >= 26 ) {
hom_increase_intimacy(hd, 75);
emotion = ET_DELIGHT;
} else if ( hd->homunculus.hunger >= 11 ) {
hom_increase_intimacy(hd, 100);
emotion = ET_DELIGHT;
} else {
hom_increase_intimacy(hd, 50);
emotion = ET_DELIGHT;
}
hd->homunculus.hunger += 10; //dunno increase value for each food
if(hd->homunculus.hunger > 100)
hd->homunculus.hunger = 100;
log_feeding(sd, LOG_FEED_HOMUNCULUS, foodID);
clif_emotion(&hd->bl,emotion);
clif_send_homdata(sd,SP_HUNGRY,hd->homunculus.hunger);
clif_send_homdata(sd,SP_INTIMATE,hd->homunculus.intimacy / 100);
clif_hom_food(sd,foodID,1);
// Too much food :/
if(hd->homunculus.intimacy == 0)
return hom_delete(sd->hd, ET_HUK);
return 0;
}
示例14: pet_recv_petdata
/**
* Finalize hatching process and load pet to client.
* @param account_id : account ID of owner
* @param p : pet requesting
* @param flag : 1:stop loading of pet
* @return 0:success, 1:failure
*/
int pet_recv_petdata(int account_id,struct s_pet *p,int flag)
{
struct map_session_data *sd;
sd = map_id2sd(account_id);
if(sd == NULL)
return 1;
if(flag == 1) {
sd->status.pet_id = 0;
return 1;
}
if(p->incubate == 1) {
int i;
//Delete egg from inventory. [Skotlex]
for (i = 0; i < MAX_INVENTORY; i++) {
if(sd->status.inventory[i].card[0] == CARD0_PET &&
p->pet_id == MakeDWord(sd->status.inventory[i].card[1], sd->status.inventory[i].card[2]))
break;
}
if(i >= MAX_INVENTORY) {
ShowError("pet_recv_petdata: Hatching pet (%d:%s) aborted, couldn't find egg in inventory for removal!\n",p->pet_id, p->name);
sd->status.pet_id = 0;
return 1;
}
if (!pet_birth_process(sd,p)) //Pet hatched. Delete egg.
pc_delitem(sd,i,1,0,0,LOG_TYPE_OTHER);
} else {
pet_data_init(sd,p);
if(sd->pd && 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);
}
}
return 0;
}
示例15: merc_hom_food
int merc_hom_food(struct map_session_data *sd, struct homun_data *hd)
{
int i, foodID, emotion;
char mes[255];
if(hd->homunculus.vaporize)
return 1 ;
foodID = hd->homunculusDB->foodID;
i = pc_search_inventory(sd,foodID);
if(i < 0) {
clif_hom_food(sd,foodID,0);
return 1;
}
pc_delitem(sd,i,1,0,0);
if ( hd->homunculus.hunger >= 91 ) {
merc_hom_decrease_intimacy(hd, 50);
emotion = E_WAH;
} else if ( hd->homunculus.hunger >= 76 ) {
merc_hom_decrease_intimacy(hd, 5);
emotion = E_SWT2;
} else if ( hd->homunculus.hunger >= 26 ) {
merc_hom_increase_intimacy(hd, 75);
emotion = E_HO;
} else if ( hd->homunculus.hunger >= 11 ) {
merc_hom_increase_intimacy(hd, 100);
emotion = E_HO;
} else {
merc_hom_increase_intimacy(hd, 50);
emotion = E_HO;
}
hd->homunculus.hunger += 10; //dunno increase value for each food
if(hd->homunculus.hunger > 100)
hd->homunculus.hunger = 100;
clif_emotion(&hd->bl,emotion);
snprintf(mes, sizeof mes,msg_txt(908),hd->homunculus.name);
clif_message(&hd->bl,mes);
clif_send_homdata(sd,SP_HUNGRY,hd->homunculus.hunger);
clif_send_homdata(sd,SP_INTIMATE,hd->homunculus.intimacy / 100);
clif_hom_food(sd,foodID,1);
// Too much food :/
if(hd->homunculus.intimacy == 0)
return merc_hom_delete(sd->hd, E_OMG);
return 0;
}