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; }
static int merc_hom_hungry(int tid, unsigned int tick, int id, intptr_t data) { struct map_session_data *sd; struct homun_data *hd; char mes[255]; bool talk = true; sd=map_id2sd(id); if(!sd) return 1; if(!sd->status.hom_id || !(hd=sd->hd)) return 1; if(hd->hungry_timer != tid){ ShowError("merc_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); snprintf(mes, sizeof mes,msg_txt(905),hd->homunculus.name); } else if(hd->homunculus.hunger == 25) { clif_emotion(&hd->bl, E_HMM); snprintf(mes, sizeof mes,msg_txt(906),hd->homunculus.name); } else if(hd->homunculus.hunger == 75) { clif_emotion(&hd->bl, E_OK); snprintf(mes, sizeof mes,msg_txt(907),hd->homunculus.name); } else talk = false; if( talk ) clif_message(&hd->bl, mes); if(hd->homunculus.hunger < 0) { hd->homunculus.hunger = 0; // Delete the homunculus if intimacy <= 100 if ( !merc_hom_decrease_intimacy(hd, 100) ) return merc_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,merc_hom_hungry,sd->bl.id,0); //simple Fix albator return 0; }
int merc_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); if ( hd->homunculus.hunger >= 91 ) { merc_hom_decrease_intimacy(hd, 50); emotion = 16; } else if ( hd->homunculus.hunger >= 76 ) { merc_hom_decrease_intimacy(hd, 5); emotion = 19; } else if ( hd->homunculus.hunger >= 26 ) { merc_hom_increase_intimacy(hd, 75); emotion = 2; } else if ( hd->homunculus.hunger >= 11 ) { merc_hom_increase_intimacy(hd, 100); emotion = 2; } else { merc_hom_increase_intimacy(hd, 50); emotion = 2; } 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 merc_hom_delete(sd->hd, 23); //omg return 0; }
int merc_menu(struct map_session_data *sd,int menunum) { nullpo_ret(sd); if (sd->hd == NULL) return 1; switch(menunum) { case 0: break; case 1: merc_hom_food(sd, sd->hd); break; case 2: merc_hom_delete(sd->hd, -1); break; default: ShowError("merc_menu : unknown menu choice : %d\n", menunum) ; break; } return 0; }
static int merc_hom_hungry(int tid,unsigned int tick,int id,int 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("merc_hom_hungry_timer %d != %d\n",hd->hungry_timer,tid); return 0; } hd->hungry_timer = -1; hd->homunculus.hunger-- ; if(hd->homunculus.hunger <= 10) { clif_emotion(&hd->bl, 6) ; //an } else if(hd->homunculus.hunger == 25) { clif_emotion(&hd->bl, 20) ; //hmm } else if(hd->homunculus.hunger == 75) { clif_emotion(&hd->bl, 33) ; //ok } if(hd->homunculus.hunger < 0) { hd->homunculus.hunger = 0; // Delete the homunculus if intimacy <= 100 if ( !merc_hom_decrease_intimacy(hd, 100) ) return merc_hom_delete(hd, 23); //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,merc_hom_hungry,sd->bl.id,0); //simple Fix albator return 0; }