/* * Stack a codified message for the given monster race. You must supply * the description of some monster of this race. You can also supply * different monster descriptions for the same race. * Return true on success. */ public static bool add_monster_message(string mon_name, int m_idx, MON_MSG msg_code, bool delay) { int i; byte mon_flags = 0; Monster m_ptr = Cave.cave_monster(Cave.cave, m_idx); int r_idx = m_ptr.r_idx; if(redundant_monster_message(m_idx, msg_code)) return (false); /* Paranoia */ if(mon_name == null || mon_name.Length == 0) mon_name = "it"; /* Save the "hidden" mark, if present */ if(mon_name.Contains("(hidden)")) mon_flags |= 0x01; /* Save the "offscreen" mark, if present */ if(mon_name.Contains("(offscreen)")) mon_flags |= 0x02; /* Monster is invisible or out of LOS */ if((mon_name == "it") || mon_name == "something") mon_flags |= 0x04; /* Query if the message is already stored */ for(i = 0; i < size_mon_msg; i++) { /* We found the race and the message code */ if((mon_msg[i].mon_race == r_idx) && (mon_msg[i].mon_flags == mon_flags) && (mon_msg[i].msg_code == msg_code)) { /* Can we increment the counter? */ if(mon_msg[i].mon_count < byte.MaxValue) { /* Stack the message */ ++(mon_msg[i].mon_count); } /* Success */ return (true); } } /* The message isn't stored. Check free space */ if(size_mon_msg >= Misc.MAX_STORED_MON_MSG) return (false); /* Assign the message data to the free slot */ mon_msg[i] = new Monster_Race_Message(); mon_msg[i].mon_race = (short)r_idx; mon_msg[i].mon_flags = mon_flags; mon_msg[i].msg_code = msg_code; mon_msg[i].delay = delay; /* Just this monster so far */ mon_msg[i].mon_count = 1; /* One more entry */ ++size_mon_msg; Misc.p_ptr.notice |= Misc.PN_MON_MESSAGE; /* record which monster had this message stored */ if(size_mon_hist >= Misc.MAX_STORED_MON_CODES) return (true); mon_message_hist[size_mon_hist] = new Monster_Message_History(); mon_message_hist[size_mon_hist].monster_idx = m_idx; mon_message_hist[size_mon_hist].message_code = msg_code; size_mon_hist++; /* Success */ return (true); }
/* * Stack a codified message for the given monster race. You must supply * the description of some monster of this race. You can also supply * different monster descriptions for the same race. * Return true on success. */ public static bool add_monster_message(string mon_name, int m_idx, MON_MSG msg_code, bool delay) { int i; byte mon_flags = 0; Monster m_ptr = Cave.cave_monster(Cave.cave, m_idx); int r_idx = m_ptr.r_idx; if (redundant_monster_message(m_idx, msg_code)) { return(false); } /* Paranoia */ if (mon_name == null || mon_name.Length == 0) { mon_name = "it"; } /* Save the "hidden" mark, if present */ if (mon_name.Contains("(hidden)")) { mon_flags |= 0x01; } /* Save the "offscreen" mark, if present */ if (mon_name.Contains("(offscreen)")) { mon_flags |= 0x02; } /* Monster is invisible or out of LOS */ if ((mon_name == "it") || mon_name == "something") { mon_flags |= 0x04; } /* Query if the message is already stored */ for (i = 0; i < size_mon_msg; i++) { /* We found the race and the message code */ if ((mon_msg[i].mon_race == r_idx) && (mon_msg[i].mon_flags == mon_flags) && (mon_msg[i].msg_code == msg_code)) { /* Can we increment the counter? */ if (mon_msg[i].mon_count < byte.MaxValue) { /* Stack the message */ ++(mon_msg[i].mon_count); } /* Success */ return(true); } } /* The message isn't stored. Check free space */ if (size_mon_msg >= Misc.MAX_STORED_MON_MSG) { return(false); } /* Assign the message data to the free slot */ mon_msg[i] = new Monster_Race_Message(); mon_msg[i].mon_race = (short)r_idx; mon_msg[i].mon_flags = mon_flags; mon_msg[i].msg_code = msg_code; mon_msg[i].delay = delay; /* Just this monster so far */ mon_msg[i].mon_count = 1; /* One more entry */ ++size_mon_msg; Misc.p_ptr.notice |= Misc.PN_MON_MESSAGE; /* record which monster had this message stored */ if (size_mon_hist >= Misc.MAX_STORED_MON_CODES) { return(true); } mon_message_hist[size_mon_hist] = new Monster_Message_History(); mon_message_hist[size_mon_hist].monster_idx = m_idx; mon_message_hist[size_mon_hist].message_code = msg_code; size_mon_hist++; /* Success */ return(true); }