add another html tag after li element in wp_nav_menu

I have a nav menu in footer. I just want to display it side by a <p> tag, I mean something like this

<ul> <li> <p>copyright C 2021</p> </li> <li> contact </li> <li> blog </li> </ul> 

this is my menu function

if ( function_exists( 'register_nav_menus' ) ) {     register_nav_menus(         array(           'top_nav_menu' => 'My Footer Menu'         )     ); 

and I’m calling it in footer

<?php if ( has_nav_menu( 'top_nav_menu' ) ) { ?>             <?php wp_nav_menu( array(                 'menu' => 'Footer Navigation Menu',                  'theme_location' => 'top_nav_menu',                  'menu_class' => 'footer-links'                 ));              ?>             <?php } else {?>             <ul class="sf-menu">                 <?php wp_list_pages( array('title_li' => '','sort_column' => 'menu_order')); ?>             </ul>             <?php } ?> 

How can I insert an extra <li> element just before its first <li> and add a <p> tag between that later added <li> element?

Can a Werewolf actually hurt another Werewolf?

This came up today in Curse of Strahd. One of the werewolves wanted to aid the party in taking out some of her fellows.

It occurred to me that a Werewolf in hybrid form does piercing (bite) and slashing (claws) damage which werewolves are immune to.

Are werewolves actually immune to other werewolves assuming said werewolf does not have access to a silvered weapon?

What happens when an aboleth enslaves another aboleth who’s enslaved a werewolf?

I was doing a monster battle with some of my friends and there were two aboleths, aboleth #1 and aboleth #2. Aboleth 1 had a werewolf under control using their enslave power, and then aboleth 2 took control of aboleth 1. Can aboleth 2 now control the werewolf under aboleth 1’s control?

Another not working 2D collision system

As many before me, I’m trying to make a 2D platformer. The current problem is the collision system. I tried to be smart and use sweeping and line segments to implement this, which ended up somewhat working, but not quite.

Here’s what I’m trying to do:

  1. The player is made of four vertices
  2. The map is made of axis-aligned line segments creating polygons
  3. Calculate the next frame’s position of all four points
  4. Create four line segments from the before/after positions, one for each vert
  5. Intersect these segments with the map
  6. Move the player to the collision point on the axis perpendicular to the wall only

Here’s what happens:

  1. Some walls work just fine
  2. Some walls have collision from the "wrong" side
  3. Some walls have no collision
  4. Some walls stop having collisions when sliding on them
  5. Some walls can’t be moved away from

Here’s the relevant excerpts of my code. Subject to be refactored, I wanted to get this working first.

// Player public class Player extends Sprite {      private PlayScreen scr;      public Vector2 vel;     public Vector2 lastMove;      public Vector2[] verts = new Vector2[2];           public Player(PlayScreen s, float x, float y) {         this.scr = s;         this.setPosition(x, y);         this.setSize(8, 16);         vel = new Vector2(0, 0);         lastMove = new Vector2(0, 0);                  Rectangle r = this.getBoundingRectangle();         float x1 = r.x;         float x2 = r.x + r.width;         float y1 = r.y;          float y2 = r.y + r.height;                  verts[0] = new Vector2(x1,y1);         verts[1] = new Vector2(x2,y2);     }      public void update(float delta) {         float xpos = this.getX();         float ypos = this.getY();          float dx = vel.x * delta;         float dy = vel.y * delta;          this.setPosition(xpos + dx, ypos + dy);         this.lastMove.set(dx, dy);     }      public Vector2 getTR() {         return new Vector2(this.getVertices()[Batch.X3],this.getVertices()[Batch.Y3]);     }      public Vector2 getBR() {         return new Vector2(this.getVertices()[Batch.X4],this.getVertices()[Batch.Y4]);     }          public Vector2 getTL() {         return new Vector2(this.getVertices()[Batch.X2],this.getVertices()[Batch.Y2]);     }          public Vector2 getBL() {         return new Vector2(this.getVertices()[Batch.X1],this.getVertices()[Batch.Y1]);     }      } 
// PlayScreen public class PlayScreen implements Screen {      private OrthogonalTiledMapRenderer renderer;     private Player player;     private Collision collision;      public PlayScreen(MovementGame mg) {                  // omitted cam/viewport setup         // omitted map loading         this.renderer = new OrthogonalTiledMapRenderer(map, 1);         cam.position.set(viewport.getWorldWidth() / 2, viewport.getWorldHeight() / 2, 0);          player = new Player(this, -50, -50);         collision = new Collision();          for (PolygonMapObject obj : {             collision.addObj(obj);         }     }      @Override     public void render(float delta) {;          player.vel.x = 0;         player.vel.y = 0;          // omitted input handling. sets player.vel to +-100 x/y on arrow key press          player.update(delta);          // omitted debug player drawing         // omitted debug player drawing for next position          collision.doCollision(player, cam);         cam.position.lerp(new Vector3(player.getX(), player.getY(), 0),1f);          cam.update();         renderer.setView(cam);          // omitted debug map drawing     } }  
public class Collision {      public ArrayList<Vector2[]> lines;      public Collision() {         lines = new ArrayList<>();     }      // convert polygon verts to lines and add to list     public void addObj(PolygonMapObject obj) {         float[] a = obj.getPolygon().getTransformedVertices();         ArrayList<Vector2> verts = new ArrayList<>();         for (int i = 0; i < obj.getPolygon().getVertices().length; i += 2) {             verts.add(new Vector2(a[i + 0], a[i + 1]));         }          for (int i = 0; i < verts.size() - 1; i++) {             lines.add(new Vector2[] { verts.get(i), verts.get(i + 1) });         }         lines.add(new Vector2[] { verts.get(0), verts.get(verts.size() - 1) });     }      // detect and resolve collision. camera is for debug drawing     public void doCollision(Player p, Camera cam) {         Vector2 col;         float dx = 0;         float dy = 0;         // try to intersect with every line         for (Vector2[] line : lines) {             dx = dy = 0;             // create the movement line for each vert of the player              // try to intersect it with the currect line             // there HAS to be a better way...             if ((col = getLineIntersection(p.getBL(), p.getBL().sub(p.lastMove), line[0], line[1])) != null) {                 dx = p.getBL().x - col.x;                 dy = p.getBL().y - col.y;             }             if ((col = getLineIntersection(p.getTL(), p.getTL().sub(p.lastMove), line[0], line[1])) != null) {                 dx = p.getTL().x - col.x;                 dy = p.getTL().y - col.y;             }             if ((col = getLineIntersection(p.getBR(), p.getBR().sub(p.lastMove), line[0], line[1])) != null) {                 dx = p.getBR().x - col.x;                 dy = p.getBR().y - col.y;             }             if ((col = getLineIntersection(p.getTR(), p.getTR().sub(p.lastMove), line[0], line[1])) != null) {                 dx = p.getTR().x - col.x;                 dy = p.getTR().y - col.y;             }             // something collided. resolve             if (col != null) {                                  if (line[0].y == line[1].y) {                 // line is horizontal. push player up/down only                     p.vel.x = 0;                     dx = 0;                 } else {                 // line is vertical. push player left/right only                     p.vel.y=0;                     dy = 0;                 }                  // omitted debug drawing                 // finally, update the player pos                 p.setPosition(p.getX() - dx, p.getY() - dy);             }         }     }      private Vector2 getLineIntersection(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3) {         Vector2 res = new Vector2();         if (Intersector.intersectSegments(p0, p1, p2, p3, res)) {             return res;         } else {             return null;         }     } } 

Any ideas or tips on how this could be turned into something working? Or should I give up on this and do grid AABB-collision instead?

Finally, here’s a rare screenshot of the code doing what it should. Blue is the player’s position before the movement, red the intended position, yellow the resolved position and white the distance the player moved too far. screenshot

Same colors, but issue #5. The collision gets resolved onto the wall instead of away.

Thank you in advance for your help! Please excuse the form of this question, this is making me lose my mind…

How to keep people from talking over one another

It’s been getting to the point that I now have 8 characters, happy and playing together. The problem is, due to lots of yelling we get approx. 1/4 of the stuff we’re supposed to get done per session done. What are some good ways to regulate them to stop yelling and talking over one another besides establishing out of combat initiave or a squirt bottle?

We are playing virtually and in person- discord is much easier to mute/unmute, so just help physically please

Can one class’ feature help another class qualify for a feature?

It’s best to just give an example for this:

Let’s say I have levels in a rogue archetype that gives up Evasion, but I take a two level dip into monk to get Evasion. Would I qualify for the Improved Evasion advanced talent upon reaching rogue level 10? (yes, I know RAW Improved Evasion has no Evasion prerequisite but I doubt most GMs would let you get away with taking it without Evasion)

Or if I had levels in an alchemist archetype that gave up Mutagen, but took a dip in Mutagenic Mauler or Mutation Warrior, could I take alchemist discoveries that affect mutagens, as an alchemist, and apply them to the dip class’ Mutagen?

NDSolve How do I insert another boundry condition

So I’m new to programming and I am trying to solve a very simple differential equation (i can do this by hand but the thing is i can’t program it), the equation is a'[t] == - 0.0118, with the boundary conditions a[0]==3 and I want to know a[180]=?, how do I insert this (a[180]=?) into the code, this is my short code.

Sol = NDSolve[{a'[t] == -0.0118 , a[0] == 3 }, a, {t, 0, 180}] Plot[Sol, {t, 0, 180}]  

It doesn’t show anything in the plot

Thanks a lot, any type of help will be appreciated

Is it possible to have many people using aid another use craft to earn a lot per week?

One of my players is trying to find loopholes to make lots of money without having to work. His latest idea is as follows:

  • Get a ton of low-to-mid-level NPCs willing (or “willing”) to waste a lot of their time.
  • Ensure that all of them have ranks in Craft (books) (any other craft skill will work as well), whether by training them or using a headband of vast intelligence. The player in question is absurdly good at crafting items, so supplying these guys with a crate full of headbands isn’t a massive roadblock.
  • Have one of them “practice [his] trade and make a decent living, earning half [his] check result in gold pieces per week of dedicated work.”.
  • Have the rest of them (say, 100 others) use aid another to give him a +2 on his check each. Assume that they’re guaranteed to succeed, by combining ranks and possibly skill focus.
  • The main crafter gets about +200 on his craft check, which he probably gets around a 15 on.
  • The main crafter makes about 108 gp.

The amount of gold you can make on this is directly proportional to how many NPCs you get ahold of:

  • 100 NPCs: ~108 gp
  • 150 NPCs: ~158 gp
  • 200 NPCs: ~208 gp

With 100 guys working away, he can make ~5,635 gp/year without doing anything. He can probably convince them not to need any money, whether by dominating them or being very charismatic or some other means of convincing them to spend their lives making money for him.

I can’t really think of a reason why he shouldn’t be able to do this, given that all he’s really done is invent massive sweatshops, but I would like to ensure that there’s nothing disallowing it.