Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Power Point Management Update #46

Open
SalieriC opened this issue Mar 12, 2022 · 2 comments
Open

Power Point Management Update #46

SalieriC opened this issue Mar 12, 2022 · 2 comments
Assignees
Labels
enhancement New feature or request

Comments

@SalieriC
Copy link
Owner

The PP Management macro was neglected for too long. BR2 comes with its own version (also developed by me) but doesn't come with some options the SWIM version has. Also some players may prefer to not open up a card to access it. On the other hand BR2 offers some things missing in the SWIM Version (arcane PP for example).
The Update was scheduled for 0.15.0 but that seems unrealistic and will be done at a later time instead.

@SalieriC SalieriC self-assigned this Mar 12, 2022
@SalieriC SalieriC added the doing This is currently in development but might take some time. label May 10, 2022
@SalieriC SalieriC added this to the 0.19.0 milestone May 10, 2022
@SalieriC SalieriC removed this from the 0.20.0 - PP Update milestone Nov 1, 2022
@SalieriC SalieriC added blocked Something is preventing this and removed doing This is currently in development but might take some time. labels Nov 1, 2022
@SalieriC
Copy link
Owner Author

SalieriC commented Nov 1, 2022

I will wait for SWADE v. 2.1.0 due to some related breaking changes that will occur there.

@SalieriC SalieriC added enhancement New feature or request and removed blocked Something is preventing this labels Dec 16, 2022
@Neurochimp
Copy link

Neurochimp commented Dec 16, 2022

I made a few fixes that seem to get this working with my Savage Pathfinder group. We hadn't noticed it stopped till last night. We had been on v9 till early November then a break [v10 update, a few new players] before resuming Runelords at the end of Nov. I just put general where it needs to be and as long as no one changes their header, we make do.

/* Power Point Management
- 

icon: icons/magic/symbols/elements-air-earth-fire-water.webp
*/

const version = 'v1.2';
const sm = game.modules.get('swademacros')?.api.sm;
const chatimage = "icons/magic/symbols/elements-air-earth-fire-water.webp";
const rule = '@Compendium[swade-core-rules.swade-rules.6SGCG8rZNklN3U6w]{Recharging}';
let coreRules = sm.isModuleOn("swade-core-rules");
let tokenD;

if (canvas.tokens.controlled[0]===undefined) {
  ui.notifications.error("Please, select a token."); // No Token is Selected
} else {
  tokenD = canvas.tokens.controlled[0];
  main();
}

function main() {
  let dialogText = `    

  <style type="text/css">
    .tg  {border-collapse:collapse;border-spacing:0;}
    .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
      overflow:hidden;padding:10px 5px;word-break:normal;}
    .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
      font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
    .tg .tg-c3ow{border-color:inherit;text-align:center;vertical-align:top}
    .tg .tg-xwyw{border-color:#000000;text-align:center;vertical-align:middle}
  </style>
  <table class="tg">
  <tbody>
    <tr>
      <td class="tg-xwyw">
        <p style=text-align: center;">Only use this input if you will use the <b>Manual Change</b>.</p>
      </td>
    </tr>
    <tr>
      <td class="tg-c3ow">
        <p>Power Points: <input id="powerpoints" type="number" min="-30" max="30" style="width: 80px; text-align: center;" value=0></input></p>
      </td>
    </tr>
  </tbody>
  </table>

  `;

  dialogButtons = {
    one: {
      label: "Natural Recover",
      callback: (html) => {
        naturalRecover(html);
      }
    },
    two: {
      label: "Benny Recover",
      callback: (html) => {
        bennyRecover(html);
      }
    },
    three: {
      label: "Manual Change",
      callback: (html) => {
        manualChange(html);
      }
    }    
  }

  // Main Dialogue    
  new Dialog({
    title: `Power Point Management - ${version}`,
    content: dialogText,
    buttons: dialogButtons,
    default: "one",
  }).render(true);

}

// MACRO FUNCTIONS

/*
Recharging p151
A character recovers 5 Power Points per hour spent resting, meditating, etc.
*/
async function naturalRecover(html) {  
  let message = '';
  
  await changePowerPoints(tokenD, 5);
  message += `<p><b style="color:red;">${tokenD.name}</b> recovered 5 Power Points after 1 hour. The current power points are: <b>${tokenD.actor.data.data.powerPoints.general.value}</b> </p>`;

  sm.styledChatMessageSimple('Recharging', message, chatimage);
}

/*
REGAIN POWER POINTS: A character with an Arcane Background can spend a Benny to regain 5 Power Points (Power Points and their use are explained on page 147.)
*/
async function bennyRecover(html) {
  let message;
  
  if (coreRules) {
    message = `<div class="swade-core"><h2><img style="vertical-align:middle" src=${chatimage} width="28" height="28"> ${rule}</h2></div>`;
  } else {
    message = `<h2><img style="vertical-align:middle" src=${chatimage} width="28" height="28"> Recharging</h2>`;
  }

  if ( sm.checkBennies(tokenD)>0 ) {
    sm.spendBenny(tokenD);
    await changePowerPoints(tokenD, 5);
    message += `<p><b style="color:red;">${tokenD.name}</b> recovered 5 Power Points after spent a benny. The current power points are: <b>${tokenD.actor.data.data.powerPoints.general.value}</b>.</p>`;
  } else {
    message += `<p><b style="color:red;">${tokenD.name}</b> don't have bennies to spend. The current power points are: <b>${tokenD.actor.data.data.powerPoints.general.value}</b>.</p>`;
  }

  ChatMessage.create({ content: message });
}

async function manualChange(html) {
  let message;
  const powerpoints = parseInt( html.find("#powerpoints")[0].value );    
  
  if (coreRules) {
    message = `<div class="swade-core"><h2><img style="vertical-align:middle" src=${chatimage} width="28" height="28"> ${rule}</h2></div>`;
  } else {
    message = `<h2><img style="vertical-align:middle" src=${chatimage} width="28" height="28"> Recharging</h2>`;
  }

  await changePowerPoints(tokenD, powerpoints);
  
  message += `<p><b style="color:red;">${tokenD.name}</b> manually added ${powerpoints} Power Points. The current power points are: <b>${tokenD.actor.data.data.powerPoints.general.value}</b>.</p>`;
  
  ChatMessage.create({ content: message });
}

async function changePowerPoints(tokenD, val) {
  const power = tokenD.actor.data.data.powerPoints.general;  
  let maximumPP = power.max;
  let currentPP = power.value;
  
  const newValue = Math.clamped( currentPP + val, 0, maximumPP);
  await tokenD.actor.update({ "data.powerPoints.general.value": newValue });    
}


// Replace if with: Math.min(Math.max(currentPP+val, 0), maximumPP); in place of the if/else block
/*
const tokenD = canvas.tokens.controlled[0];

async function changePowerPoints(tokenD, val) {
  const powerName = "Miracles (Sun)"

  const miraclePower = tokenD.actor.data.data.powerPoints.general[name];

  const maximumPP    = miraclePower.max;
  const currentPP    = miraclePower.value;

  console.log("Max PP = " + maximumPP.toString());
  console.log("Current PP = " + currentPP.toString());  

  const newValue = Math.clamped( currentPP + val, 0, maximumPP);
  console.log('New value should be ' + (currentPP+val).toString());
  await tokenD.actor.update({[`data.powerPoints.general.${powerName}.value`]:newValue});  
  //old
  
  if ( (currentPP+val)> maximumPP ) {
    await tokenD.actor.update({ "data.powerPoints.general.value": maximumPP });    
  } else if ( (currentPP+val)<0 ) {
    await tokenD.actor.update({ "data.powerPoints.general.value": 0 });    
  } else {
    await tokenD.actor.update({ "data.powerPoints.general.value": (currentPP+val) });    
  }    
}

changePowerPoints(tokenD, 3);
*/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants