Advertisement
Pr0nogo

Untitled

Nov 18th, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. pub unsafe extern fn resarea_jump(script: *mut bw::AiScript) {
  2. // resarea_jump(townId, operator, resarea, resourceType, quantity, block)
  3. #[derive(Copy, Clone)]
  4. enum Resource {
  5. Ore,
  6. Gas,
  7. }
  8. let old_pos = (*script).pos - 1;
  9. let game = Game::get();
  10. let mut read = ScriptData::new(script);
  11. let town_id = read.read_u8();
  12. let modifier = read.read_modifier();
  13. let script_resarea = read.read_u8();
  14. let res = read.read_u8();
  15. let amount = read.read_u32();
  16. let dest = read.read_jump_pos();
  17. if feature_disabled("resarea_jump") {
  18. return;
  19. }
  20.  
  21. let ai = bw::player_ai((*script).player);
  22. let mut globals = Globals::get("resarea_jump hook");
  23. let town = town_from_id(script, &mut globals, town_id);
  24. let resarea = &bw::resource_areas;
  25. if let Some(town) = town {
  26. let resarea_id = ((*town.0).resource_area);
  27. //bw_print!("Script town pointer: {:p}, current script town: {:p}",town.0,(*script).town);
  28. //bw_print!("Resareas: script {}, town resarea {}, town {}",script_resarea,resarea_id,town_id);
  29. if (/*town_id != 255 &&*/ script_resarea != 255 && script_resarea != resarea_id) {
  30. //bw_print!("Bad resarea match");
  31. return;
  32. }
  33. let resources_to_check: &[_] = match res {
  34. // Matching trigger conditions
  35. 0 => &[Resource::Ore],
  36. 1 => &[Resource::Gas],
  37. 2 => &[Resource::Ore, Resource::Gas],
  38. x => {
  39. bw_print!("Unsupported resource type in resarea_jump: {:x}", x);
  40. return;
  41. }
  42. };
  43. let read = match modifier.ty {
  44. ModifierType::Read(read) => {
  45. let jump = resources_to_check.iter().any(|&res| {
  46. let resvalue = match res {
  47. Resource::Ore => resarea.areas[resarea_id as usize].total_mineral_count,
  48. Resource::Gas => resarea.areas[resarea_id as usize].total_gas_count,
  49. };
  50. //bw_print!("Compare: resarea {}, script res {}, resarea res {}",resarea_id,amount,resvalue);
  51. //bw_print!("Read resvalue: {}",resvalue);
  52. read.compare(resvalue, amount)
  53. });
  54. let read_req = read.action.get_read_req();
  55. if jump == read_req {
  56. read.action.do_action(script, dest, old_pos);
  57. }
  58. }
  59. ModifierType::Write(w) => {
  60. bw_print!("Used writing modifier {:?} in resarea_jump", w);
  61. return;
  62. }
  63. };
  64. }
  65. else {
  66. //bw_print!("resarea_jump: town is not detected");
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement