private void MAP_LISTBOX_SelectedIndexChanged(object sender, EventArgs e) { uint mapid = (uint)MAP_LISTBOX.SelectedIndex; if (mapid == U.NOT_FOUND) { return; } uint addr = MapSettingForm.GetEventAddrWhereMapID(mapid); if (!U.isSafetyOffset(addr)) { return; } List <U.AddrResult> list = EventCondForm.MakeUnitPointer(mapid); //未記帳の拡張した領域があれば追加する. EventUnitForm.AppendNoWriteNewData(list, mapid); U.ConvertListBox(list, ref this.EVENT_LISTBOX); if (this.EVENT_LISTBOX.Items.Count > 0) { this.EVENT_LISTBOX.SelectedIndex = 0; } else { MapPictureBox.LoadMap(mapid); } }
public static void CheckPrologeEventPointerErrors(uint mapid, List <ErrorSt> errors) { List <U.AddrResult> units = EventCondForm.MakeUnitPointer(mapid); for (int i = 0; i < units.Count; i++) { uint addr = units[i].addr; uint pageSize = Program.ROM.RomInfo.eventunit_data_size(); for (; Program.ROM.u8(addr) != 0x0; addr += pageSize) { if (!U.isSafetyOffset(addr + pageSize)) { break; } uint unitGrow = Program.ROM.u8(addr + 3); uint assign = U.ParseUnitGrowAssign(unitGrow); if (assign != 0) {//自軍でないなら関係ない. continue; } uint unit_id = Program.ROM.u8(addr); if (!UnitForm.isMainUnit(unit_id)) { continue; } if (!UnitForm.isLoadClass(unit_id)) { uint class_id = Program.ROM.u8(addr + 1); if (class_id == 0) {//未入力の場合は推測します. class_id = UnitForm.GetClassID(unit_id); } if (!ClassForm.isLoadClass(class_id)) { continue; } } //条件にマッチするロードユニットを発見 return; } } if (Program.ROM.RomInfo.version() == 7) { errors.Add(new FELint.ErrorSt(EventCondForm.CONDTYPE.PLAYER_UNIT, U.NOT_FOUND , R._("序章でUnitID:0x01 or 0x02 or 0x03のロードユニットを仲間にしていません。\r\n序章で、このロードユニットを仲間に入れないと多くのイベントがフリーズします。"))); } else { errors.Add(new FELint.ErrorSt(EventCondForm.CONDTYPE.PLAYER_UNIT, U.NOT_FOUND , R._("序章でUnitID:0x01のロードユニットを仲間にしていません。\r\n序章で、このロードユニットを仲間に入れないと多くのイベントがフリーズします。"))); } }
bool ConvertAddrToMapAndEvent(uint starti, uint endi, uint addr, out int out_mapindex, out int out_eventindex) { for (uint i = starti; i < endi; i++) { List <U.AddrResult> eventlist = EventCondForm.MakeUnitPointer(i); for (int n = 0; n < eventlist.Count; n++) { if (eventlist[n].addr == addr) {//FOUND! out_mapindex = (int)i; out_eventindex = n; return(true); } } } out_mapindex = -1; out_eventindex = -1; return(false); }