aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authormaximius <none@none>2009-09-26 02:09:26 -0700
committermaximius <none@none>2009-09-26 02:09:26 -0700
commitf8a6434fc0c2ea7cfd325830bac6a208e171f0ab (patch)
treecb5feaedb834a02cb328525971f59140edb28c3b /src/game
parent2853aa1cd1bb3026d697672aefb6eace902f90b1 (diff)
*Replace a ton of switches with RAND(), and overload RAND() to support up to 16 parameters.
*Add a safety check to prevent knocking players off of transports, just in case they die while on one. *Fix a couple incorrect spell defines. --HG-- branch : trunk
Diffstat (limited to 'src/game')
-rw-r--r--src/game/CreatureAIImpl.h223
-rw-r--r--src/game/CreatureEventAI.cpp9
-rw-r--r--src/game/Player.cpp2
3 files changed, 225 insertions, 9 deletions
diff --git a/src/game/CreatureAIImpl.h b/src/game/CreatureAIImpl.h
index 58c78522888..be11a35095b 100644
--- a/src/game/CreatureAIImpl.h
+++ b/src/game/CreatureAIImpl.h
@@ -90,6 +90,229 @@ const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, c
}
}
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7)
+{
+ switch(rand()%7)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8)
+{
+ switch(rand()%8)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9)
+{
+ switch(rand()%9)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9, const T& v10)
+{
+ switch(rand()%10)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ case 9: return v10;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9, const T& v10, const T& v11)
+{
+ switch(rand()%11)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ case 9: return v10;
+ case 10: return v11;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9, const T& v10, const T& v11, const T& v12)
+{
+ switch(rand()%12)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ case 9: return v10;
+ case 10: return v11;
+ case 11: return v12;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9, const T& v10, const T& v11, const T& v12, const T& v13)
+{
+ switch(rand()%13)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ case 9: return v10;
+ case 10: return v11;
+ case 11: return v12;
+ case 12: return v13;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14)
+{
+ switch(rand()%14)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ case 9: return v10;
+ case 10: return v11;
+ case 11: return v12;
+ case 12: return v13;
+ case 13: return v14;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15)
+{
+ switch(rand()%15)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ case 9: return v10;
+ case 10: return v11;
+ case 11: return v12;
+ case 12: return v13;
+ case 13: return v14;
+ case 14: return v15;
+ }
+}
+
+template<class T>
+inline
+const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
+ const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15, const T& v16)
+{
+ switch(rand()%16)
+ {
+ default:
+ case 0: return v1;
+ case 1: return v2;
+ case 2: return v3;
+ case 3: return v4;
+ case 4: return v5;
+ case 5: return v6;
+ case 6: return v7;
+ case 7: return v8;
+ case 8: return v9;
+ case 9: return v10;
+ case 10: return v11;
+ case 11: return v12;
+ case 12: return v13;
+ case 13: return v14;
+ case 14: return v15;
+ case 15: return v16;
+ }
+}
+
class EventMap : private std::map<uint32, uint32>
{
private:
diff --git a/src/game/CreatureEventAI.cpp b/src/game/CreatureEventAI.cpp
index bf606c6c488..cb6cc3e7869 100644
--- a/src/game/CreatureEventAI.cpp
+++ b/src/game/CreatureEventAI.cpp
@@ -354,14 +354,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
int32 temp = 0;
if (action.text.TextId2 && action.text.TextId3)
- {
- switch( rand()%3 )
- {
- case 0: temp = action.text.TextId1; break;
- case 1: temp = action.text.TextId2; break;
- case 2: temp = action.text.TextId3; break;
- }
- }
+ temp = RAND(action.text.TextId1,action.text.TextId2,action.text.TextId3);
else if (action.text.TextId2 && urand(0,1))
temp = action.text.TextId2;
else
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 5a342306174..ee4acd372d3 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -4461,7 +4461,7 @@ bool Player::FallGround(bool noDeath/* = false*/)
void Player::KillPlayer()
{
- if(IsFlying()) FallGround();
+ if(IsFlying() && !GetTransport()) FallGround();
SetMovement(MOVE_ROOT);