Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub unsafe extern fn resarea_jump(script: *mut bw::AiScript) {
- // resarea_jump(townId, operator, resarea, resourceType, quantity, block)
- #[derive(Copy, Clone)]
- enum Resource {
- Ore,
- Gas,
- }
- let old_pos = (*script).pos - 1;
- let game = Game::get();
- let mut read = ScriptData::new(script);
- let town_id = read.read_u8();
- let modifier = read.read_modifier();
- let script_resarea = read.read_u8();
- let res = read.read_u8();
- let amount = read.read_u32();
- let dest = read.read_jump_pos();
- if feature_disabled("resarea_jump") {
- return;
- }
- let ai = bw::player_ai((*script).player);
- let mut globals = Globals::get("resarea_jump hook");
- let town = town_from_id(script, &mut globals, town_id);
- let resarea = &bw::resource_areas;
- if let Some(town) = town {
- let resarea_id = ((*town.0).resource_area);
- //bw_print!("Script town pointer: {:p}, current script town: {:p}",town.0,(*script).town);
- //bw_print!("Resareas: script {}, town resarea {}, town {}",script_resarea,resarea_id,town_id);
- if (/*town_id != 255 &&*/ script_resarea != 255 && script_resarea != resarea_id) {
- //bw_print!("Bad resarea match");
- return;
- }
- let resources_to_check: &[_] = match res {
- // Matching trigger conditions
- 0 => &[Resource::Ore],
- 1 => &[Resource::Gas],
- 2 => &[Resource::Ore, Resource::Gas],
- x => {
- bw_print!("Unsupported resource type in resarea_jump: {:x}", x);
- return;
- }
- };
- let read = match modifier.ty {
- ModifierType::Read(read) => {
- let jump = resources_to_check.iter().any(|&res| {
- let resvalue = match res {
- Resource::Ore => resarea.areas[resarea_id as usize].total_mineral_count,
- Resource::Gas => resarea.areas[resarea_id as usize].total_gas_count,
- };
- //bw_print!("Compare: resarea {}, script res {}, resarea res {}",resarea_id,amount,resvalue);
- //bw_print!("Read resvalue: {}",resvalue);
- read.compare(resvalue, amount)
- });
- let read_req = read.action.get_read_req();
- if jump == read_req {
- read.action.do_action(script, dest, old_pos);
- }
- }
- ModifierType::Write(w) => {
- bw_print!("Used writing modifier {:?} in resarea_jump", w);
- return;
- }
- };
- }
- else {
- //bw_print!("resarea_jump: town is not detected");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement