void AutoCollectByTargetSupport(uint uid, uint target_uid, uint init_value, uint add_value, Undo.UndoData undodata) { if (target_uid == 0) { return; } uint addr = UnitForm.GetSupportAddrWhereUnitID(target_uid); if (addr == U.NOT_FOUND) { return; } if (!U.isSafetyOffset(addr)) { return; } uint target_limit = addr + SUPPORT_LIMIT; for (; addr < target_limit; addr++) { uint target_uid2 = Program.ROM.u8(addr); if (uid != target_uid2) { continue; } Program.ROM.write_u8(addr + SUPPORT_LIMIT, init_value, undodata); Program.ROM.write_u8(addr + SUPPORT_LIMIT + SUPPORT_LIMIT, add_value, undodata); return; } }
static void MakeCheckError_SelfCheck(List <FELint.ErrorSt> errors , uint support_addr, uint id , uint uid, uint target_uid, uint init_value, uint add_value) { //このユニットの支援相手が、自分に対して支援をもっているか確認します. uint addr = UnitForm.GetSupportAddrWhereUnitID(target_uid); if (addr != U.NOT_FOUND) { uint target_limit = addr + SUPPORT_LIMIT; for (; addr < target_limit; addr++) { if (!U.isSafetyOffset(addr + SUPPORT_LIMIT + SUPPORT_LIMIT)) {//危険なアドレス break; } uint target_uid2 = Program.ROM.u8(addr); if (uid != target_uid2) { continue; } uint init_value2 = Program.ROM.u8(addr + SUPPORT_LIMIT); uint add_value2 = Program.ROM.u8(addr + SUPPORT_LIMIT + SUPPORT_LIMIT); if (init_value != init_value2 || add_value != add_value2) { errors.Add(new FELint.ErrorSt(FELint.Type.SUPPORT_UNIT, support_addr , R._("ユニット({0})->ユニット({1})へ支援と、その逆の、ユニット({1})->ユニット({0})へ支援の設定値が違います。\r\n初期値({2} vs {3})、進行度({4} vs {5})\r\n初期値と進行度は、同じ値にする必要があります。" , UnitForm.GetUnitNameWithID(uid), UnitForm.GetUnitNameWithID(target_uid), init_value, init_value2, add_value, add_value2 ) , id)); } return; } } errors.Add(new FELint.ErrorSt(FELint.Type.SUPPORT_UNIT, support_addr , R._("ユニット({0})->ユニット({1})への支援はありますが、逆に、ユニット({1})->ユニット({0})への支援がありません。" , UnitForm.GetUnitNameWithID(uid), UnitForm.GetUnitNameWithID(target_uid) ) , id)); }