/** * 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; }
int hom_food(struct map_session_data *sd, struct homun_data *hd) { int i, foodID, emotion; 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 = E_WAH; } else if ( hd->homunculus.hunger >= 76 ) { hom_decrease_intimacy(hd, 5); emotion = E_SWT2; } else if ( hd->homunculus.hunger >= 26 ) { hom_increase_intimacy(hd, 75); emotion = E_HO; } else if ( hd->homunculus.hunger >= 11 ) { hom_increase_intimacy(hd, 100); emotion = E_HO; } else { 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); 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, E_OMG); return 0; }
/** * Perform requested action from selected homunculus menu * @param sd * @param type */ void hom_menu(struct map_session_data *sd, int type) { nullpo_retv(sd); if (sd->hd == NULL) return; switch(type) { case 0: break; case 1: hom_food(sd, sd->hd); break; case 2: hom_delete(sd->hd, -1); break; default: ShowError("hom_menu : unknown menu choice : %d\n", type); break; } }
int hom_menu(struct map_session_data *sd,int menunum) { nullpo_ret(sd); if (sd->hd == NULL) return 1; switch(menunum) { case 0: break; case 1: hom_food(sd, sd->hd); break; case 2: hom_delete(sd->hd, -1); break; default: ShowError("hom_menu : unknown menu choice : %d\n", menunum) ; break; } return 0; }
/** * Timer to reduce hunger level */ static int hom_hungry(int tid, unsigned int tick, int id, intptr_t data) { struct map_session_data *sd; struct homun_data *hd; sd = map_id2sd(id); if (!sd) return 1; if (!sd->status.hom_id || !(hd=sd->hd)) return 1; if (hd->hungry_timer != tid) { ShowError("hom_hungry_timer %d != %d\n",hd->hungry_timer,tid); return 0; } hd->hungry_timer = INVALID_TIMER; hd->homunculus.hunger--; if(hd->homunculus.hunger <= 10) { clif_emotion(&hd->bl, E_AN); } else if(hd->homunculus.hunger == 25) { clif_emotion(&hd->bl, E_HMM); } else if(hd->homunculus.hunger == 75) { clif_emotion(&hd->bl, E_OK); } if (hd->homunculus.hunger < 0) { hd->homunculus.hunger = 0; // Delete the homunculus if intimacy <= 100 if (!hom_decrease_intimacy(hd, 100)) return hom_delete(hd, E_OMG); clif_send_homdata(sd,SP_INTIMATE,hd->homunculus.intimacy / 100); } clif_send_homdata(sd,SP_HUNGRY,hd->homunculus.hunger); hd->hungry_timer = add_timer(tick+hd->homunculusDB->hungryDelay,hom_hungry,sd->bl.id,0); //simple Fix albator return 0; }