Question 1:
The solution to this is using a "for loop". That's a script that involves alot of entities, in one line of code. Like this:
Let's say you have added 50 books. You add a "for loop" that involves the numbers 1-50. The integer (shortened "i") is every number between 1 and 50.
Now we need to add a function.
AddEntityCollideCallback("Book_"+i, "ScriptArea", "YourFunction", true, 1);
Take a look at the AddEntityCollideCallback. Instead of using the name ("Book_1") we added ("Book"+i). And since the "for loop" made the "i" mean any number between 1 and 50, every book that is named ("Book_" and a number between 1 and 50 after the underscore) will call the function "YourFunction" when they collide with the "ScriptArea".
At the end, after adding opening and closing brackets, it should look like this:
for(int i=1;i<50;i++){
AddEntityCollideCallback("Book_"+i, "ScriptArea", "YourFunction", true, 1);
}
Question 2:
The solution to this is the un-check the "Active" check-box in your ladder area, in the editor. That makes it unable to use. After that, you simple need to activate it with this script:
SetEntityActive("LadderArea", true);
Put that in the script function when they use the rope on the hole.
Question 3:
You can use this script:
ChangePlayerStateToNormal();
It will make the player drop the item he is holding. Just copy the line and add it to your function.