- 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
This commit is contained in:
parent
ae3ac08b75
commit
1e9af56a67
@ -397,15 +397,6 @@
|
||||
<Filter Include="cChunkGenerator">
|
||||
<UniqueIdentifier>{0d6f822b-71eb-406f-b17a-d188c4924283}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="cFluidSimulator">
|
||||
<UniqueIdentifier>{6f92474b-e2a5-4685-abf1-053b09dbc4f1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="cFluidSimulator\cWaterSimulator">
|
||||
<UniqueIdentifier>{02fd457d-3735-4f4b-aaf2-f7701a7ee7bc}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="cFluidSimulator\cLavaSimulator">
|
||||
<UniqueIdentifier>{b0401fd9-4021-4ab7-bf61-c8de112b4196}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="cEntity\cPawn\cMonster\Personalities">
|
||||
<UniqueIdentifier>{b0f7c883-e2ca-4bba-89e3-c36656c3de39}</UniqueIdentifier>
|
||||
</Filter>
|
||||
@ -430,6 +421,24 @@
|
||||
<Filter Include="cWorldGenerator\cWorldGenerator_Test">
|
||||
<UniqueIdentifier>{c86f4c53-af06-4b42-97dd-ffb7035041ce}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Simulator">
|
||||
<UniqueIdentifier>{ad41fc50-2d3d-4f6f-addd-a8bcb15b8518}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Simulator\cSimulator">
|
||||
<UniqueIdentifier>{4b21067c-b137-4c25-91b4-addf7d67bd0a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Simulator\cSimulator\cFluidSimulator">
|
||||
<UniqueIdentifier>{6f92474b-e2a5-4685-abf1-053b09dbc4f1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Simulator\cSimulator\cFluidSimulator\cWaterSimulator">
|
||||
<UniqueIdentifier>{02fd457d-3735-4f4b-aaf2-f7701a7ee7bc}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Simulator\cSimulator\cFluidSimulator\cLavaSimulator">
|
||||
<UniqueIdentifier>{b0401fd9-4021-4ab7-bf61-c8de112b4196}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Simulator\cSimulator\SandSimulator">
|
||||
<UniqueIdentifier>{c5389fa9-20dd-4c52-ac16-2ef0a1115cf1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\source\cServer.cpp">
|
||||
@ -752,7 +761,7 @@
|
||||
<Filter>Packets\cPacket_EntityStatus</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cWaterSimulator.cpp">
|
||||
<Filter>cFluidSimulator\cWaterSimulator</Filter>
|
||||
<Filter>Simulator\cSimulator\cFluidSimulator\cWaterSimulator</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cSocket.cpp">
|
||||
<Filter>Threading\cSocket</Filter>
|
||||
@ -815,7 +824,7 @@
|
||||
<Filter>cPiston</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cLavaSimulator.cpp">
|
||||
<Filter>cFluidSimulator\cLavaSimulator</Filter>
|
||||
<Filter>Simulator\cSimulator\cFluidSimulator\cLavaSimulator</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\SquirrelBindings.cpp">
|
||||
<Filter>LuaBindings\SquirrelBindings</Filter>
|
||||
@ -836,7 +845,7 @@
|
||||
<Filter>cChunkGenerator</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cFluidSimulator.cpp">
|
||||
<Filter>cFluidSimulator</Filter>
|
||||
<Filter>Simulator\cSimulator\cFluidSimulator</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cAggressiveMonster.cpp">
|
||||
<Filter>cEntity\cPawn\cMonster\Personalities\Aggressive</Filter>
|
||||
@ -853,12 +862,18 @@
|
||||
<ClCompile Include="..\source\cWorldGenerator.cpp">
|
||||
<Filter>cWorldGenerator</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cSandSimulator.cpp" />
|
||||
<ClCompile Include="..\source\cSimulator.cpp" />
|
||||
<ClCompile Include="..\source\cSimulatorManager.cpp" />
|
||||
<ClCompile Include="..\source\cWorldGenerator_Test.cpp">
|
||||
<Filter>cWorldGenerator\cWorldGenerator_Test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cSimulatorManager.cpp">
|
||||
<Filter>Simulator</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cSimulator.cpp">
|
||||
<Filter>Simulator\cSimulator</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\source\cSandSimulator.cpp">
|
||||
<Filter>Simulator\cSimulator\SandSimulator</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\source\cServer.h">
|
||||
@ -1213,7 +1228,7 @@
|
||||
<Filter>Packets\cPacket_EntityStatus</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cWaterSimulator.h">
|
||||
<Filter>cFluidSimulator\cWaterSimulator</Filter>
|
||||
<Filter>Simulator\cSimulator\cFluidSimulator\cWaterSimulator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cSocket.h">
|
||||
<Filter>Threading\cSocket</Filter>
|
||||
@ -1279,7 +1294,7 @@
|
||||
<Filter>cPiston</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cLavaSimulator.h">
|
||||
<Filter>cFluidSimulator\cLavaSimulator</Filter>
|
||||
<Filter>Simulator\cSimulator\cFluidSimulator\cLavaSimulator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\SquirrelBindings.h">
|
||||
<Filter>LuaBindings\SquirrelBindings</Filter>
|
||||
@ -1300,7 +1315,7 @@
|
||||
<Filter>cChunkGenerator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cFluidSimulator.h">
|
||||
<Filter>cFluidSimulator</Filter>
|
||||
<Filter>Simulator\cSimulator\cFluidSimulator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cAggressiveMonster.h">
|
||||
<Filter>cEntity\cPawn\cMonster\Personalities\Aggressive</Filter>
|
||||
@ -1317,12 +1332,18 @@
|
||||
<ClInclude Include="..\source\cWorldGenerator.h">
|
||||
<Filter>cWorldGenerator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cSandSimulator.h" />
|
||||
<ClInclude Include="..\source\cSimulator.h" />
|
||||
<ClInclude Include="..\source\cSimulatorManager.h" />
|
||||
<ClInclude Include="..\source\cWorldGenerator_Test.h">
|
||||
<Filter>cWorldGenerator\cWorldGenerator_Test</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cSimulatorManager.h">
|
||||
<Filter>Simulator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cSimulator.h">
|
||||
<Filter>Simulator\cSimulator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\source\cSandSimulator.h">
|
||||
<Filter>Simulator\cSimulator\SandSimulator</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\source\AllToLua.pkg">
|
||||
|
100
monsters.ini
100
monsters.ini
@ -3,9 +3,109 @@ AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=1.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=10
|
||||
|
||||
[Chicken]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=1.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=4
|
||||
|
||||
[Cow]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=1.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=10
|
||||
|
||||
[Pig]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=1.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=10
|
||||
|
||||
[Sheep]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=1.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=8
|
||||
|
||||
[Squid]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=1.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=10
|
||||
|
||||
[Enderman]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=4.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=40
|
||||
|
||||
[Zombiepigman]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=5.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=20
|
||||
|
||||
[Cavespider]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=2.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=12
|
||||
|
||||
[Creeper]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=0.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=20
|
||||
|
||||
[Ghast]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=0.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=10
|
||||
|
||||
[Silverfish]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=1.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=8
|
||||
|
||||
[Skeleton]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=4.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=20
|
||||
|
||||
[Slime]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=10.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=32
|
||||
|
||||
[Spider]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=2.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=16
|
||||
|
||||
[Zombie]
|
||||
AttackRange=5.0
|
||||
AttackRate=1
|
||||
AttackDamage=4.0
|
||||
SightDistance=25.0
|
||||
MaxHealth=20
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 12/26/11 15:45:21.
|
||||
** Generated automatically by tolua++-1.0.92 on 12/28/11 01:31:37.
|
||||
*/
|
||||
|
||||
#ifndef __cplusplus
|
||||
@ -5036,38 +5036,6 @@ static int tolua_AllToLua_cPlayer_GetInventory00(lua_State* tolua_S)
|
||||
static int tolua_AllToLua_cPlayer_TeleportTo00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) ||
|
||||
!tolua_isusertype(tolua_S,2,"cEntity",0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,3,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
|
||||
cEntity* a_Entity = ((cEntity*) tolua_tousertype(tolua_S,2,0));
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'TeleportTo'", NULL);
|
||||
#endif
|
||||
{
|
||||
self->TeleportTo(a_Entity);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'TeleportTo'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: TeleportTo of class cPlayer */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_TeleportTo01
|
||||
static int tolua_AllToLua_cPlayer_TeleportTo01(lua_State* tolua_S)
|
||||
{
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) ||
|
||||
@ -5078,6 +5046,7 @@ static int tolua_AllToLua_cPlayer_TeleportTo01(lua_State* tolua_S)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
|
||||
const double a_PosX = ((const double) tolua_tonumber(tolua_S,2,0));
|
||||
@ -5094,8 +5063,11 @@ static int tolua_AllToLua_cPlayer_TeleportTo01(lua_State* tolua_S)
|
||||
}
|
||||
}
|
||||
return 3;
|
||||
tolua_lerror:
|
||||
return tolua_AllToLua_cPlayer_TeleportTo00(tolua_S);
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'TeleportTo'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
@ -5929,17 +5901,9 @@ public:
|
||||
} else {
|
||||
return ( void ) cPlayer:: Initialize(a_World);
|
||||
};
|
||||
};
|
||||
void TeleportTo( cEntity* a_Entity) {
|
||||
if (push_method("TeleportTo", tolua_AllToLua_cPlayer_TeleportTo00)) {
|
||||
tolua_pushusertype(lua_state, (void*)a_Entity, "cEntity");
|
||||
ToluaBase::dbcall(lua_state, 2, 0);
|
||||
} else {
|
||||
return ( void ) cPlayer:: TeleportTo(a_Entity);
|
||||
};
|
||||
};
|
||||
void TeleportTo( const double& a_PosX, const double& a_PosY, const double& a_PosZ) {
|
||||
if (push_method("TeleportTo", tolua_AllToLua_cPlayer_TeleportTo01)) {
|
||||
if (push_method("TeleportTo", tolua_AllToLua_cPlayer_TeleportTo00)) {
|
||||
tolua_pushnumber(lua_state, (lua_Number)a_PosX);
|
||||
tolua_pushnumber(lua_state, (lua_Number)a_PosY);
|
||||
tolua_pushnumber(lua_state, (lua_Number)a_PosZ);
|
||||
@ -6035,9 +5999,6 @@ public:
|
||||
|
||||
void cPlayer__Initialize( cWorld* a_World) {
|
||||
return ( void )cPlayer::Initialize(a_World);
|
||||
};
|
||||
void cPlayer__TeleportTo( cEntity* a_Entity) {
|
||||
return ( void )cPlayer::TeleportTo(a_Entity);
|
||||
};
|
||||
void cPlayer__TeleportTo( const double& a_PosX, const double& a_PosY, const double& a_PosZ) {
|
||||
return ( void )cPlayer::TeleportTo(a_PosX,a_PosY,a_PosZ);
|
||||
@ -6133,38 +6094,6 @@ static int tolua_AllToLua_Lua__cPlayer_cPlayer__Initialize00(lua_State* tolua_S)
|
||||
static int tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"Lua__cPlayer",0,&tolua_err) ||
|
||||
!tolua_isusertype(tolua_S,2,"cEntity",0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,3,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
Lua__cPlayer* self = (Lua__cPlayer*) tolua_tousertype(tolua_S,1,0);
|
||||
cEntity* a_Entity = ((cEntity*) tolua_tousertype(tolua_S,2,0));
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'cPlayer__TeleportTo'", NULL);
|
||||
#endif
|
||||
{
|
||||
self->cPlayer__TeleportTo(a_Entity);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'cPlayer__TeleportTo'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: cPlayer__TeleportTo of class Lua__cPlayer */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo01
|
||||
static int tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo01(lua_State* tolua_S)
|
||||
{
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"Lua__cPlayer",0,&tolua_err) ||
|
||||
@ -6175,6 +6104,7 @@ static int tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo01(lua_State* tolua_S)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
Lua__cPlayer* self = (Lua__cPlayer*) tolua_tousertype(tolua_S,1,0);
|
||||
const double a_PosX = ((const double) tolua_tonumber(tolua_S,2,0));
|
||||
@ -6191,8 +6121,11 @@ static int tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo01(lua_State* tolua_S)
|
||||
}
|
||||
}
|
||||
return 3;
|
||||
tolua_lerror:
|
||||
return tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo00(tolua_S);
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'cPlayer__TeleportTo'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
@ -15992,7 +15925,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"GetStance",tolua_AllToLua_cPlayer_GetStance00);
|
||||
tolua_function(tolua_S,"GetInventory",tolua_AllToLua_cPlayer_GetInventory00);
|
||||
tolua_function(tolua_S,"TeleportTo",tolua_AllToLua_cPlayer_TeleportTo00);
|
||||
tolua_function(tolua_S,"TeleportTo",tolua_AllToLua_cPlayer_TeleportTo01);
|
||||
tolua_function(tolua_S,"GetGameMode",tolua_AllToLua_cPlayer_GetGameMode00);
|
||||
tolua_function(tolua_S,"GetIP",tolua_AllToLua_cPlayer_GetIP00);
|
||||
tolua_function(tolua_S,"GetLastBlockActionTime",tolua_AllToLua_cPlayer_GetLastBlockActionTime00);
|
||||
@ -16024,7 +15956,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"tolua__set_instance",tolua_AllToLua_Lua__cPlayer_tolua__set_instance00);
|
||||
tolua_function(tolua_S,"cPlayer__Initialize",tolua_AllToLua_Lua__cPlayer_cPlayer__Initialize00);
|
||||
tolua_function(tolua_S,"cPlayer__TeleportTo",tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo00);
|
||||
tolua_function(tolua_S,"cPlayer__TeleportTo",tolua_AllToLua_Lua__cPlayer_cPlayer__TeleportTo01);
|
||||
tolua_function(tolua_S,"cPlayer__MoveTo",tolua_AllToLua_Lua__cPlayer_cPlayer__MoveTo00);
|
||||
tolua_endmodule(tolua_S);
|
||||
tolua_cclass(tolua_S,"cPluginManager","cPluginManager","",NULL);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 12/26/11 15:45:21.
|
||||
** Generated automatically by tolua++-1.0.92 on 12/28/11 01:31:37.
|
||||
*/
|
||||
|
||||
/* Exported function */
|
||||
|
@ -25,8 +25,12 @@ void cChicken::KilledBy( cEntity* a_Killer )
|
||||
cMonster::RandomDropItem(E_ITEM_FEATHER, 0, 2);
|
||||
|
||||
// Raw Chicken
|
||||
// TODO: (Check wheather it is burning to drop cooked Chicken)
|
||||
cMonster::DropItem(E_ITEM_RAW_CHICKEN, 1);
|
||||
if(GetMetaData() == BURNING)
|
||||
{
|
||||
cMonster::DropItem(E_ITEM_COOKED_CHICKEN, 1);
|
||||
}else{
|
||||
cMonster::DropItem(E_ITEM_RAW_CHICKEN, 1);
|
||||
}
|
||||
|
||||
cMonster::KilledBy( a_Killer );
|
||||
}
|
@ -23,10 +23,13 @@ void cCow::KilledBy( cEntity* a_Killer )
|
||||
//Drops 0-2 Lether
|
||||
cMonster::RandomDropItem(E_ITEM_LEATHER, 0, 2);
|
||||
|
||||
//Drops 1-3 Raw beefs
|
||||
cMonster::RandomDropItem(E_ITEM_LEATHER, 1, 3);
|
||||
if(GetMetaData() == BURNING)
|
||||
{
|
||||
cMonster::RandomDropItem(E_ITEM_STEAK, 1, 3);
|
||||
}else{
|
||||
cMonster::RandomDropItem(E_ITEM_RAW_BEEF, 1, 3);
|
||||
}
|
||||
|
||||
//TODO: Check wheather burning and drop 1-3 steak instead
|
||||
|
||||
cMonster::KilledBy( a_Killer );
|
||||
}
|
||||
|
@ -21,8 +21,8 @@ void cEnderman::Tick(float a_Dt)
|
||||
cMonster::Tick(a_Dt);
|
||||
|
||||
//TODO Same as stated in cSkeleton
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
|
||||
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) && GetMetaData() != BURNING) { //if daylight
|
||||
SetMetaData(BURNING); // BURN, BABY, BURN! >:D
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -224,7 +224,7 @@ Direction cFluidSimulator::GetFlowingDirection(int a_X, int a_Y, int a_Z, bool a
|
||||
*/
|
||||
|
||||
char LowestPoint = m_World->GetBlockMeta(a_X, a_Y, a_Z); //Current Block Meta so only lower points will be counted
|
||||
int X, Y, Z; //Lowest Pos will be stored here
|
||||
int X = 0, Y = 0, Z = 0; //Lowest Pos will be stored here
|
||||
|
||||
if(IsAllowedBlock(m_World->GetBlock(a_X, a_Y + 1, a_Z)) && a_Over) //check for upper block to flow because this also affects the flowing direction
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
@ -43,7 +43,6 @@ public:
|
||||
virtual void InStateIdle(float a_Dt);
|
||||
virtual void InStateChasing(float a_Dt);
|
||||
virtual void InStateEscaping(float a_Dt);
|
||||
virtual void InStateBurning(float a_Dt);
|
||||
|
||||
virtual void Attack(float a_Dt);
|
||||
int GetMobType() {return m_MobType;}
|
||||
@ -52,11 +51,9 @@ public:
|
||||
void SetAttackRange(float ar);
|
||||
void SetAttackDamage(float ad);
|
||||
void SetSightDistance(float sd);
|
||||
virtual void CheckMetaDataBurn();
|
||||
|
||||
enum MState{ATTACKING, IDLE, CHASING, ESCAPING} m_EMState;
|
||||
enum MPersonality{PASSIVE,AGGRESSIVE,COWARDLY} m_EMPersonality;
|
||||
enum MMetaState{NORMAL,BURNING,CROUCHED,RIDING} m_EMMetaState;
|
||||
|
||||
protected:
|
||||
|
||||
@ -67,7 +64,6 @@ protected:
|
||||
Vector3f* m_Destination;
|
||||
bool m_bMovingToDestination;
|
||||
bool m_bPassiveAggressive;
|
||||
bool m_bBurnable;
|
||||
|
||||
Vector3f* m_Speed;
|
||||
float m_DestinationTime;
|
||||
@ -84,8 +80,6 @@ protected:
|
||||
float m_AttackDamage;
|
||||
float m_AttackRange;
|
||||
float m_AttackInterval;
|
||||
float m_FireDamageInterval;
|
||||
float m_BurnPeriod;
|
||||
|
||||
void DropItem(ENUM_ITEM_ID a_Item, unsigned int a_Count);
|
||||
void RandomDropItem(ENUM_ITEM_ID a_Item, unsigned int a_Min, unsigned int a_Max);
|
||||
|
@ -17,6 +17,7 @@ struct cMonsterConfig::sAttributesStruct
|
||||
float m_AttackDamage;
|
||||
float m_AttackRange;
|
||||
float m_AttackRate;
|
||||
int m_MaxHealth;
|
||||
};
|
||||
|
||||
struct cMonsterConfig::sMonsterConfigState
|
||||
@ -68,6 +69,8 @@ void cMonsterConfig::Initialize() {
|
||||
printf("Got SightDistance: %3.3f \n",Attributes.m_SightDistance);
|
||||
Attributes.m_AttackRate = (float)MonstersIniFile.GetValueF(SplitList[i].c_str(),"AttackRate",0);
|
||||
printf("Got AttackRate: %3.3f \n",Attributes.m_AttackRate);
|
||||
Attributes.m_MaxHealth = MonstersIniFile.GetValueI(SplitList[i].c_str(),"MaxHealth",0);
|
||||
printf("Got MaxHealth: %d \n",Attributes.m_MaxHealth);
|
||||
m_pState->AttributesList.push_front(Attributes);
|
||||
}
|
||||
}
|
||||
@ -84,6 +87,7 @@ void cMonsterConfig::AssignAttributes(cMonster *m, const char* n)
|
||||
m->SetAttackRange(itr->m_AttackRange);
|
||||
m->SetSightDistance(itr->m_SightDistance);
|
||||
m->SetAttackRate((int)itr->m_AttackRate);
|
||||
m->SetMaxHealth((int)itr->m_AttackRate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
100
source/cPawn.cpp
100
source/cPawn.cpp
@ -6,9 +6,14 @@
|
||||
#include "cChunk.h"
|
||||
#include "cMCLogger.h"
|
||||
#include "cPluginManager.h"
|
||||
#include "Vector3d.h"
|
||||
#include "BlockID.h"
|
||||
|
||||
#include "Defines.h"
|
||||
|
||||
#include "packets/cPacket_TeleportEntity.h"
|
||||
#include "packets/cPacket_EntityStatus.h"
|
||||
#include "packets/cPacket_Metadata.h"
|
||||
|
||||
CLASS_DEFINITION( cPawn, cEntity )
|
||||
|
||||
@ -18,8 +23,11 @@ cPawn::cPawn()
|
||||
, m_LastPosY( 0.0 )
|
||||
, m_LastPosZ( 0.0 )
|
||||
, m_TimeLastTeleportPacket( 0.f )
|
||||
, m_bBurnable(true)
|
||||
, m_MetaData(NORMAL)
|
||||
, m_FireDamageInterval(0.f)
|
||||
{
|
||||
m_Health = 20;
|
||||
SetMaxHealth(20);
|
||||
}
|
||||
|
||||
cPawn::~cPawn()
|
||||
@ -83,14 +91,88 @@ void cPawn::TeleportTo( cEntity* a_Entity )
|
||||
void cPawn::TeleportTo( const double & a_PosX, const double & a_PosY, const double & a_PosZ )
|
||||
{
|
||||
SetPosition( a_PosX, a_PosY, a_PosZ );
|
||||
|
||||
cPacket_TeleportEntity TeleportEntity( this );
|
||||
if( IsA("cPlayer") )
|
||||
{
|
||||
cPlayer* Player = (cPlayer*)this;
|
||||
cRoot::Get()->GetServer()->Broadcast( TeleportEntity, Player->GetClientHandle() );
|
||||
}
|
||||
else
|
||||
{
|
||||
cRoot::Get()->GetServer()->Broadcast( TeleportEntity );
|
||||
|
||||
cRoot::Get()->GetServer()->Broadcast( TeleportEntity );
|
||||
|
||||
}
|
||||
|
||||
void cPawn::Tick(float a_Dt)
|
||||
{
|
||||
CheckMetaDataBurn(); //Check to see if pawn should burn based on block they are on
|
||||
|
||||
if(GetMetaData() == BURNING)
|
||||
InStateBurning(a_Dt);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void cPawn::SetMetaData(MetaData a_MetaData)
|
||||
{
|
||||
cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
|
||||
|
||||
if(InChunk)
|
||||
{ //Broadcast new status to clients in the chunk
|
||||
m_MetaData = a_MetaData;
|
||||
cPacket_Metadata md(a_MetaData, GetUniqueID());
|
||||
InChunk->Broadcast(md);
|
||||
}
|
||||
}
|
||||
|
||||
//----Change Entity MetaData
|
||||
void cPawn::CheckMetaDataBurn()
|
||||
{
|
||||
char Block = GetWorld()->GetBlock((int) m_Pos->x, (int) m_Pos->y, (int) m_Pos->z);
|
||||
|
||||
char BlockAbove = GetWorld()->GetBlock((int) m_Pos->x, (int) m_Pos->y + 1, (int) m_Pos->z);
|
||||
if(GetMetaData() == BURNING
|
||||
&& (IsBlockWater(Block)
|
||||
|| IsBlockWater(BlockAbove)))
|
||||
{
|
||||
SetMetaData(NORMAL);
|
||||
}else if(m_bBurnable && GetMetaData() != BURNING
|
||||
&& (IsBlockLava(Block) || Block == E_BLOCK_FIRE
|
||||
|| IsBlockLava(BlockAbove) || BlockAbove == E_BLOCK_FIRE)) {
|
||||
SetMetaData(BURNING);
|
||||
}
|
||||
}
|
||||
|
||||
//What to do if On fire
|
||||
void cPawn::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 BlockAbove = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y + 1, (int)m_Pos->z );
|
||||
if(m_FireDamageInterval > 800) {
|
||||
|
||||
m_FireDamageInterval = 0;
|
||||
TakeDamage(1, this);
|
||||
|
||||
m_BurnPeriod++;
|
||||
if(IsBlockLava(Block) || Block == E_BLOCK_FIRE
|
||||
|| IsBlockLava(BlockAbove) || BlockAbove == E_BLOCK_FIRE) {
|
||||
m_BurnPeriod = 0;
|
||||
TakeDamage(6, this);
|
||||
}else{
|
||||
TakeDamage(1, this);
|
||||
}
|
||||
|
||||
if(m_BurnPeriod > 7) {
|
||||
SetMetaData(NORMAL);
|
||||
m_BurnPeriod = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void cPawn::SetMaxHealth(short a_MaxHealth)
|
||||
{
|
||||
this->m_MaxHealth = a_MaxHealth;
|
||||
|
||||
//Reset health
|
||||
m_Health = a_MaxHealth;
|
||||
}
|
||||
|
||||
|
||||
|
@ -18,14 +18,37 @@ public:
|
||||
virtual void TeleportTo( cEntity* a_Entity ); //tolua_export
|
||||
virtual void TeleportTo( const double & a_PosX, const double & a_PosY, const double & a_PosZ ); //tolua_export
|
||||
|
||||
virtual void Tick(float a_Dt);
|
||||
|
||||
void Heal( int a_Health ); //tolua_export
|
||||
virtual void TakeDamage( int a_Damage, cEntity* a_Instigator ); //tolua_export
|
||||
virtual void KilledBy( cEntity* a_Killer ); //tolua_export
|
||||
int GetHealth() { return m_Health; } //tolua_export
|
||||
|
||||
enum MetaData {NORMAL, BURNING, CROUCHED, RIDING, SPRINTING, EATING, BLOCKING};
|
||||
|
||||
virtual inline void SetMetaData(MetaData a_MetaData);
|
||||
virtual inline MetaData cPawn::GetMetaData() { return m_MetaData; }
|
||||
|
||||
virtual inline void InStateBurning(float a_Dt);
|
||||
|
||||
virtual void CheckMetaDataBurn();
|
||||
|
||||
virtual inline void SetMaxHealth(short a_MaxHealth);
|
||||
virtual inline short GetMaxHealth() { return m_MaxHealth; }
|
||||
|
||||
protected:
|
||||
short m_Health;
|
||||
short m_MaxHealth;
|
||||
|
||||
bool m_bBurnable;
|
||||
|
||||
MetaData m_MetaData;
|
||||
|
||||
double m_LastPosX, m_LastPosY, m_LastPosZ;
|
||||
float m_TimeLastTeleportPacket;
|
||||
|
||||
float m_FireDamageInterval;
|
||||
float m_BurnPeriod;
|
||||
|
||||
}; //tolua_export
|
||||
|
@ -63,12 +63,10 @@ struct cPlayer::sPlayerState
|
||||
};
|
||||
|
||||
cPlayer::cPlayer(cClientHandle* a_Client, const char* a_PlayerName)
|
||||
: m_bBurnable(true)
|
||||
, m_GameMode( 0 )
|
||||
: m_GameMode( 0 )
|
||||
, m_IP("")
|
||||
, m_LastBlockActionTime( 0 )
|
||||
, m_LastBlockActionCnt( 0 )
|
||||
, e_EPMetaState(NORMAL)
|
||||
, m_bVisible( true )
|
||||
, m_LastGroundHeight( 0 )
|
||||
, m_bTouchGround( false )
|
||||
@ -77,12 +75,11 @@ cPlayer::cPlayer(cClientHandle* a_Client, const char* a_PlayerName)
|
||||
, m_CurrentWindow( 0 )
|
||||
, m_TimeLastPickupCheck( 0.f )
|
||||
, m_Color('-')
|
||||
, m_FireDamageInterval(0)
|
||||
, m_BurnPeriod(0)
|
||||
, m_ClientHandle( a_Client )
|
||||
, m_pState( new sPlayerState )
|
||||
{
|
||||
m_EntityType = E_PLAYER;
|
||||
SetMaxHealth(20);
|
||||
m_Inventory = new cInventory( this );
|
||||
cTimer t1;
|
||||
m_LastPlayerListTime = t1.GetNowTime();
|
||||
@ -154,14 +151,14 @@ void cPlayer::Tick(float a_Dt)
|
||||
cChunk* InChunk = GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
|
||||
if( !InChunk ) return;
|
||||
|
||||
cPawn::Tick(a_Dt);
|
||||
|
||||
if(m_bDirtyOrientation && !m_bDirtyPosition)
|
||||
{
|
||||
cPacket_EntityLook EntityLook( this );
|
||||
InChunk->Broadcast( EntityLook, m_ClientHandle );
|
||||
m_bDirtyOrientation = false;
|
||||
}
|
||||
|
||||
if(m_bDirtyPosition )
|
||||
} else if(m_bDirtyPosition )
|
||||
{
|
||||
cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_PLAYER_MOVE, 1, this );
|
||||
|
||||
@ -233,10 +230,6 @@ void cPlayer::Tick(float a_Dt)
|
||||
Chunk->UnlockEntities();
|
||||
}
|
||||
}
|
||||
CheckMetaDataBurn();
|
||||
if(e_EPMetaState == BURNING){
|
||||
InStateBurning(a_Dt);
|
||||
}
|
||||
|
||||
cTimer t1;
|
||||
// Send Player List (Once per m_LastPlayerListTime/1000 ms)
|
||||
@ -254,61 +247,6 @@ void cPlayer::Tick(float a_Dt)
|
||||
|
||||
}
|
||||
|
||||
void cPlayer::InStateBurning(float a_Dt) {
|
||||
m_FireDamageInterval += a_Dt;
|
||||
char block = GetWorld()->GetBlock( float2int(m_Pos->x), float2int(m_Pos->y), float2int(m_Pos->z) );
|
||||
char bblock = GetWorld()->GetBlock( float2int(m_Pos->x), float2int(m_Pos->y)+1, float2int(m_Pos->z) );
|
||||
if(m_FireDamageInterval > 800) {
|
||||
|
||||
m_FireDamageInterval = 0;
|
||||
|
||||
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 > 7) {
|
||||
|
||||
cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
|
||||
e_EPMetaState = NORMAL;
|
||||
cPacket_Metadata md(NORMAL, GetUniqueID());
|
||||
//md.m_UniqueID = GetUniqueID();
|
||||
InChunk->Broadcast(md);
|
||||
m_BurnPeriod = 0;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//----Change Entity MetaData
|
||||
void cPlayer::CheckMetaDataBurn() {
|
||||
char block = GetWorld()->GetBlock( float2int(m_Pos->x), float2int(m_Pos->y), float2int(m_Pos->z) );
|
||||
char bblock = GetWorld()->GetBlock( float2int(m_Pos->x), float2int(m_Pos->y)+1, float2int(m_Pos->z) );
|
||||
if(e_EPMetaState == BURNING && (block == E_BLOCK_WATER || block == E_BLOCK_STATIONARY_WATER
|
||||
|| bblock == E_BLOCK_WATER || bblock == E_BLOCK_STATIONARY_WATER)) {
|
||||
cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
|
||||
if(!InChunk)
|
||||
return;
|
||||
e_EPMetaState = NORMAL;
|
||||
cPacket_Metadata md(NORMAL,GetUniqueID());
|
||||
InChunk->Broadcast(md);
|
||||
}else if(m_bBurnable && e_EPMetaState != 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;
|
||||
printf("I should burn\n");
|
||||
e_EPMetaState = BURNING;
|
||||
cPacket_Metadata md(BURNING,GetUniqueID());
|
||||
InChunk->Broadcast(md);
|
||||
}
|
||||
}
|
||||
|
||||
void cPlayer::SetTouchGround( bool a_bTouchGround )
|
||||
{
|
||||
m_bTouchGround = a_bTouchGround;
|
||||
@ -345,9 +283,9 @@ void cPlayer::SetTouchGround( bool a_bTouchGround )
|
||||
|
||||
void cPlayer::Heal( int a_Health )
|
||||
{
|
||||
if( m_Health < 20 )
|
||||
if( m_Health < GetMaxHealth() )
|
||||
{
|
||||
m_Health = (short) MIN(a_Health + m_Health, 20);
|
||||
m_Health = (short) MIN(a_Health + m_Health, GetMaxHealth());
|
||||
|
||||
cPacket_UpdateHealth Health;
|
||||
Health.m_Health = m_Health;
|
||||
@ -396,17 +334,27 @@ void cPlayer::KilledBy( cEntity* a_Killer )
|
||||
|
||||
void cPlayer::Respawn()
|
||||
{
|
||||
m_Health = 20;
|
||||
m_Health = GetMaxHealth();
|
||||
|
||||
// Create Respawn player packet
|
||||
cPacket_Respawn Packet;
|
||||
//Set Gamemode for packet by looking at world's gamemode (Need to check players gamemode.)
|
||||
//Packet.m_CreativeMode = (char)GetWorld()->GetGameMode();
|
||||
Packet.m_CreativeMode = (char)m_GameMode; //Set GameMode packet based on Player's GameMode;
|
||||
|
||||
//TODO Less hardcoded
|
||||
Packet.m_World = 0;
|
||||
|
||||
Packet.m_MapSeed = GetWorld()->GetWorldSeed();
|
||||
|
||||
//Send Packet
|
||||
e_EPMetaState = NORMAL;
|
||||
m_ClientHandle->Send( Packet );
|
||||
|
||||
//Set non Burning
|
||||
SetMetaData(NORMAL);
|
||||
|
||||
TeleportTo( GetWorld()->GetSpawnX(), GetWorld()->GetSpawnY(), GetWorld()->GetSpawnZ() );
|
||||
|
||||
SetVisible( true );
|
||||
}
|
||||
|
||||
@ -496,17 +444,16 @@ void cPlayer::SendMessage( const char* a_Message )
|
||||
m_ClientHandle->Send( cPacket_Chat( a_Message ) );
|
||||
}
|
||||
|
||||
void cPlayer::TeleportTo( cEntity* a_Entity )
|
||||
{
|
||||
cPawn::TeleportTo( a_Entity );
|
||||
cPacket_PlayerPosition PlayerPosition( this );
|
||||
m_ClientHandle->Send( PlayerPosition );
|
||||
}
|
||||
|
||||
void cPlayer::TeleportTo( const double & a_PosX, const double & a_PosY, const double & a_PosZ )
|
||||
{
|
||||
cPawn::TeleportTo( a_PosX, a_PosY, a_PosZ );
|
||||
SetPosition( a_PosX, a_PosY, a_PosZ );
|
||||
|
||||
cPacket_TeleportEntity TeleportEntity( this );
|
||||
cRoot::Get()->GetServer()->Broadcast( TeleportEntity, GetClientHandle() );
|
||||
|
||||
|
||||
cPacket_PlayerPosition PlayerPosition( this );
|
||||
|
||||
m_ClientHandle->Send( PlayerPosition );
|
||||
}
|
||||
|
||||
|
@ -28,21 +28,21 @@ public:
|
||||
inline bool GetFlying() { return m_bTouchGround; } //tolua_export
|
||||
inline const double & GetStance() { return m_Stance; } //tolua_export
|
||||
cInventory & GetInventory() { return *m_Inventory; } //tolua_export
|
||||
virtual void TeleportTo( cEntity* a_Entity ); //tolua_export
|
||||
virtual void TeleportTo( const double & a_PosX, const double & a_PosY, const double & a_PosZ ); //tolua_export
|
||||
|
||||
int GetGameMode() { return m_GameMode; } //tolua_export
|
||||
std::string GetIP() { return m_IP; } //tolua_export
|
||||
float GetLastBlockActionTime() { return m_LastBlockActionTime; } //tolua_export
|
||||
int GetLastBlockActionCnt() { return m_LastBlockActionCnt; } //tolua_export
|
||||
void SetLastBlockActionCnt( int ); //tolua_export
|
||||
void SetLastBlockActionTime(); //tolua_export
|
||||
void SetGameMode( int a_GameMode ); //tolua_export
|
||||
virtual void TeleportTo( const double & a_PosX, const double & a_PosY, const double & a_PosZ ); //tolua_export
|
||||
|
||||
int GetGameMode() { return m_GameMode; } //tolua_export
|
||||
std::string GetIP() { return m_IP; } //tolua_export
|
||||
float GetLastBlockActionTime() { return m_LastBlockActionTime; } //tolua_export
|
||||
int GetLastBlockActionCnt() { return m_LastBlockActionCnt; } //tolua_export
|
||||
void SetLastBlockActionCnt( int ); //tolua_export
|
||||
void SetLastBlockActionTime(); //tolua_export
|
||||
void SetGameMode( int a_GameMode ); //tolua_export
|
||||
void LoginSetGameMode( int a_GameMode );
|
||||
void SetIP( std::string a_IP );
|
||||
|
||||
// Tries to move to a new position, with collision checks and stuff
|
||||
virtual void MoveTo( const Vector3d & a_NewPos ); //tolua_export
|
||||
virtual void MoveTo( const Vector3d & a_NewPos ); //tolua_export
|
||||
|
||||
cWindow* GetWindow() { return m_CurrentWindow; }
|
||||
void OpenWindow( cWindow* a_Window );
|
||||
@ -81,12 +81,7 @@ public:
|
||||
bool LoadFromDisk();
|
||||
|
||||
const char* GetLoadedWorldName();
|
||||
|
||||
//Burning logic
|
||||
bool m_bBurnable;
|
||||
enum PMetaState{NORMAL,BURNING,CROUCHED,RIDING} e_EPMetaState;
|
||||
virtual void CheckMetaDataBurn();
|
||||
virtual void InStateBurning(float a_Dt);
|
||||
|
||||
|
||||
protected:
|
||||
struct sPlayerState;
|
||||
@ -106,8 +101,6 @@ protected:
|
||||
|
||||
void ResolveGroups();
|
||||
char m_Color;
|
||||
float m_FireDamageInterval;
|
||||
float m_BurnPeriod;
|
||||
|
||||
float m_LastBlockActionTime;
|
||||
int m_LastBlockActionCnt;
|
||||
|
@ -22,8 +22,8 @@ void cSkeleton::Tick(float a_Dt)
|
||||
|
||||
//TODO Outsource
|
||||
//TODO should do lightcheck, not daylight -> mobs in the dark don´t burn
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
|
||||
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) && GetMetaData() != BURNING ) { //if daylight
|
||||
SetMetaData(BURNING); // BURN, BABY, BURN! >:D
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,16 +35,9 @@ void cSquid::Tick(float a_Dt)
|
||||
|
||||
|
||||
//TODO Not a real behavior, but cool :D
|
||||
if(!IsBlockWater(GetWorld()->GetBlock(Pos.x, Pos.y, Pos.z)))
|
||||
if(!IsBlockWater(GetWorld()->GetBlock((int) Pos.x, (int) Pos.y, (int) Pos.z)) && GetMetaData() != BURNING)
|
||||
{
|
||||
//Die slowly Muhahaha :D (To prevent all this squids on the land :D)
|
||||
m_NoWater += a_Dt;
|
||||
|
||||
if(m_NoWater > 1000.f)
|
||||
{
|
||||
m_NoWater -= 1000.f;
|
||||
TakeDamage(1, this);
|
||||
}
|
||||
SetMetaData(BURNING);
|
||||
}
|
||||
|
||||
}
|
@ -21,8 +21,8 @@ void cZombie::Tick(float a_Dt)
|
||||
cMonster::Tick(a_Dt);
|
||||
|
||||
//TODO Same as in cSkeleton :D
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
|
||||
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) && GetMetaData() != BURNING) { //if daylight
|
||||
SetMetaData(BURNING); // BURN, BABY, BURN! >:D
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,9 +20,9 @@ void cZombiepigman::Tick(float a_Dt)
|
||||
{
|
||||
cMonster::Tick(a_Dt);
|
||||
|
||||
//TODO Same as noticed in cSkeleton AND Do they really burn? :D In the neather there is no sun :D
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
|
||||
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
|
||||
//TODO Same as noticed in cSkeleton AND Do they really burn by sun?? :D In the neather is no sun :D
|
||||
if (GetWorld()->GetWorldTime() < (12000 + 1000) && GetMetaData() != BURNING ) { //if daylight
|
||||
SetMetaData(BURNING); // BURN, BABY, BURN! >:D
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include "cPacket_Metadata.h"
|
||||
|
||||
cPacket_Metadata::cPacket_Metadata(int s, int id)
|
||||
: EMetaState( (MetaState)s )
|
||||
: m_EMetaData( (cPawn::MetaData)s )
|
||||
, m_UniqueID( id )
|
||||
, m_Type( 0 )
|
||||
, m_MetaData( 0 )
|
||||
@ -11,12 +11,12 @@ cPacket_Metadata::cPacket_Metadata(int s, int id)
|
||||
}
|
||||
|
||||
cPacket_Metadata::cPacket_Metadata()
|
||||
: EMetaState(NORMAL)
|
||||
, m_UniqueID( 0 )
|
||||
: m_UniqueID( 0 )
|
||||
, m_Type( 0 )
|
||||
, m_MetaData( 0 )
|
||||
{
|
||||
m_PacketID = E_METADATA;
|
||||
m_EMetaData = cPawn::NORMAL;
|
||||
FormPacket();
|
||||
}
|
||||
|
||||
@ -30,21 +30,28 @@ void cPacket_Metadata::FormPacket() {
|
||||
m_MetaDataSize = 3;
|
||||
//m_UniqueID = GetUniqueID();
|
||||
m_MetaData[0] = 0x00;
|
||||
//m_MetaData[1] = 0x01; //Burning
|
||||
|
||||
m_MetaData[2] = 0x7f;
|
||||
switch(EMetaState) {
|
||||
case NORMAL:
|
||||
switch(m_EMetaData) {
|
||||
case cPawn::NORMAL:
|
||||
m_MetaData[1] = 0x00;
|
||||
break;
|
||||
case BURNING:
|
||||
case cPawn::BURNING:
|
||||
m_MetaData[1] = 0x01;
|
||||
break;
|
||||
case CROUCHED:
|
||||
case cPawn::CROUCHED:
|
||||
m_MetaData[1] = 0x02;
|
||||
break;
|
||||
case RIDING:
|
||||
case cPawn::RIDING:
|
||||
m_MetaData[1] = 0x04;
|
||||
break;
|
||||
case cPawn::SPRINTING:
|
||||
m_MetaData[1] = 0x08;
|
||||
break;
|
||||
case cPawn::EATING:
|
||||
case cPawn::BLOCKING:
|
||||
m_MetaData[1] = 0x10;
|
||||
break;
|
||||
default:
|
||||
m_MetaData[1] = 0x00;
|
||||
break;
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include "cPacket.h"
|
||||
#include "PacketID.h"
|
||||
#include "cPawn.h"
|
||||
|
||||
class cPacket_Metadata : public cPacket
|
||||
{
|
||||
@ -13,7 +14,7 @@ public:
|
||||
void FormPacket();
|
||||
virtual cPacket* Clone() const { return new cPacket_Metadata( *this ); }
|
||||
|
||||
enum MetaState{NORMAL,BURNING,CROUCHED,RIDING} EMetaState;
|
||||
cPawn::MetaData m_EMetaData;
|
||||
|
||||
static const unsigned int c_Size = 4 + 1;
|
||||
int m_UniqueID;
|
||||
|
Loading…
Reference in New Issue
Block a user