From 1e9af56a67ae3765291361d9bf01e9009cfb4dcc Mon Sep 17 00:00:00 2001 From: "lapayo94@gmail.com" Date: Wed, 28 Dec 2011 02:10:05 +0000 Subject: - Implemented Drops from Burning animals - added right monster health and attack strength - refactored the Pawn/Monster/Player class a little bit - changed some namings to fit the style git-svn-id: http://mc-server.googlecode.com/svn/trunk@140 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cMonster.cpp | 75 +++++------------------------------------------------ 1 file changed, 7 insertions(+), 68 deletions(-) (limited to 'source/cMonster.cpp') diff --git a/source/cMonster.cpp b/source/cMonster.cpp index 2f7567b15..cee068b08 100644 --- a/source/cMonster.cpp +++ b/source/cMonster.cpp @@ -56,25 +56,12 @@ cMonster::cMonster() , m_AttackInterval(0) , m_AttackRate(3) , idle_interval(0) - , m_bBurnable(true) - , m_EMMetaState(NORMAL) - , m_FireDamageInterval(0) - , m_BurnPeriod(0) { LOG("cMonster::cMonster()"); - LOG("In state: %s",GetState()); - m_Health = 10; + LOG("In state: %s", GetState()); - MTRand r1; - int RandVal = r1.randInt() % 4; - if( RandVal == 0 ) - m_MobType = 90; // Pig - else if( RandVal == 1 ) - m_MobType = 91; // Sheep - else if( RandVal == 2 ) - m_MobType = 92; // Cow - else - m_MobType = 93; // Hen + m_bBurnable = true; + m_MetaData = NORMAL; } cMonster::~cMonster() @@ -131,6 +118,8 @@ bool cMonster::ReachedDestination() void cMonster::Tick(float a_Dt) { + cPawn::Tick(a_Dt); + if( m_Health <= 0 ) { m_DestroyTimer += a_Dt/1000; @@ -196,12 +185,6 @@ void cMonster::Tick(float a_Dt) SetPitch( Pitch ); } - CheckMetaDataBurn(); //Check to see if Enemy should burn based on block they are on - - if(m_EMMetaState == BURNING) { - InStateBurning(a_Dt); - } - if(m_EMState == IDLE) { //If enemy passive we ignore checks for player visibility InStateIdle(a_Dt); } @@ -448,37 +431,6 @@ void cMonster::InStateIdle(float a_Dt) { } } -//What to do if On fire -void cMonster::InStateBurning(float a_Dt) { - m_FireDamageInterval += a_Dt; - char block = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z ); - char bblock = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y +1, (int)m_Pos->z ); - if(m_FireDamageInterval > 1) { - - m_FireDamageInterval -= 1; - TakeDamage(1, this); - - m_BurnPeriod++; - if(block == E_BLOCK_LAVA || block == E_BLOCK_STATIONARY_LAVA || block == E_BLOCK_FIRE - || bblock == E_BLOCK_LAVA || bblock == E_BLOCK_STATIONARY_LAVA || bblock == E_BLOCK_FIRE) { - m_BurnPeriod = 0; - TakeDamage(6, this); - }else{ - TakeDamage(1, this); - } - - if(m_BurnPeriod > 8) { - cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ ); - m_EMMetaState = NORMAL; - cPacket_Metadata md(NORMAL, GetUniqueID()); - InChunk->Broadcast(md); - m_BurnPeriod = 0; - - } - } - -} - //What to do if in Chasing State //This state should always be defined in each child class void cMonster::InStateChasing(float a_Dt) { @@ -508,20 +460,7 @@ void cMonster::Attack(float a_Dt) { ((cPawn *)m_Target)->TakeDamage((int)m_AttackDamage,this); } } -//----Change Entity MetaData -void cMonster::CheckMetaDataBurn() { - char block = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z ); - char bblock = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z ); - if(m_bBurnable && m_EMMetaState != BURNING && (block == E_BLOCK_LAVA || block == E_BLOCK_STATIONARY_LAVA || block == E_BLOCK_FIRE - || bblock == E_BLOCK_LAVA || bblock == E_BLOCK_STATIONARY_LAVA || bblock == E_BLOCK_FIRE)) { - cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ ); - if(!InChunk) - return; - m_EMMetaState = BURNING; - cPacket_Metadata md(BURNING,GetUniqueID()); - InChunk->Broadcast(md); - } -} + //----Debug @@ -601,5 +540,5 @@ void cMonster::DropItem(ENUM_ITEM_ID a_Item, unsigned int a_Count) void cMonster::RandomDropItem(ENUM_ITEM_ID a_Item, unsigned int a_Min, unsigned int a_Max) { MTRand r1; - return cMonster::DropItem(a_Item, r1.randInt() % (a_Max + 1) + a_Min); + return cMonster::DropItem(a_Item, r1.randInt() % (a_Max + 1 - a_Min) + a_Min); } \ No newline at end of file -- cgit v1.2.3