>>7302709(long story guy here)
like OP said, first you need to be aware of your problems, and do something different.
You seem to be aware of your problems: You are a fully open door to your heart, which leaves it open for the smashing.
You are a 9 or 10 on the "Selfless" scale. You put everyone's needs before your own, and do EVERYTHING possible to please a girl. This isn't good. It opens you for hurt. You're the kind of person who would drive 25 miles out of town to pick up an expensive sushi box for a girl if she asked.
Would you do that for your best male friend?
You need to do what you can to make people happy, while still remaining yourself.
Just ask yourself when you are doing something for a girl: "Is this something I'd normally do for anyone? Or am I only doing this to win her affection."
If you are opening your heart up too early, you are going to get hurt. Generally, I think that you shouldn't go out of your way for a girl (or anyone) until the relationship gets very serious. If she likes you for who you are, then the Chinese resturaunt around the block will have to suffice for sushi.
If she gets angry for this, then she isn't ready for a relationship with you (and you are not ready to open up to her!). Protect yourself. Don't get angry back, just ignore her. Tell her that you will do what you can, but aren't going to jump hoops for her just yet.
If she really cares about you, ignoring her like this will drive her mad, and want to be closer to you. It shows you have resolve, and can keep a cool head.
If she doesn't care about you, she won't fight for you. If so, forget about her! She isn't partner material (though don't throw away your friendship, remember to stay cool and reserved, don't tangle your emotions up just yet!)