diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 5d5d4db8..d466a98f 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -1744,9 +1744,7 @@ void requestSETTINGS(void) //cl_name.client_num=CLIENT_NUM; strcpy(cl_name.client_name , CLIENT_NAME); cl_name.team=TEAM; - //cl_name.cl_ops[1]=OP_TEAM_2; - //cl_name.cl_ops[2]=OP_TEAM_3; - //cl_name.cl_ops[3]=OP_TEAM_4; + cl_name.cl_edge=atoi(SECT_EDGE); @@ -2042,8 +2040,19 @@ void recieveSTATE(RPCParameters *rpcParameters) SOLDIERTYPE * pSoldier=MercPtrs[ new_state->usSoldierID ]; - if(pSoldier->bActive) + if(pSoldier->bActive) + { + if(new_state->usNewState==93) + { + pSoldier->EVENT_InternalSetSoldierPosition( new_state->sXPos, new_state->sYPos ,FALSE, FALSE, FALSE ); + pSoldier->ChangeSoldierStance( ANIM_CROUCH ); + pSoldier->EVENT_SetSoldierDirection( new_state->usNewDirection ); + + } + if(new_state->usNewState==95)ScreenMsg( FONT_YELLOW, MSG_CHAT, L"All Bandaged."); + pSoldier->EVENT_InitNewSoldierAnim( new_state->usNewState, new_state->usStartingAniCode, new_state->fForce ); + } //AddGameEvent( S_CHANGESTATE, 0, &SChangeState ); //someday ;) } @@ -2291,12 +2300,15 @@ void UpdateSoldierToNetwork ( SOLDIERTYPE *pSoldier ) SUpdateNetworkSoldier.usSoldierID=pSoldier->ubID; if(pSoldier->ubID < 20)SUpdateNetworkSoldier.usSoldierID=pSoldier->ubID+ubID_prefix; - + SUpdateNetworkSoldier.sAtGridNo=pSoldier->sGridNo; SUpdateNetworkSoldier.bBreath=pSoldier->bBreath; + SUpdateNetworkSoldier.ubDirection=pSoldier->ubDirection; + SUpdateNetworkSoldier.bLife=pSoldier->stats.bLife; SUpdateNetworkSoldier.bBleeding=pSoldier->bBleeding; - SUpdateNetworkSoldier.ubDirection=pSoldier->ubDirection; + + if((gTacticalStatus.ubTopMessageType == PLAYER_TURN_MESSAGE || gTacticalStatus.ubTopMessageType == PLAYER_INTERRUPT_MESSAGE || ((gTacticalStatus.ubTopMessageType == COMPUTER_INTERRUPT_MESSAGE || gTacticalStatus.ubTopMessageType == COMPUTER_TURN_MESSAGE )&& is_server)) && (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT))//update progress bar, not supporting coop yet... { @@ -2322,6 +2334,8 @@ void UpdateSoldierFromNetwork (RPCParameters *rpcParameters) pSoldier->stats.bLife=SUpdateNetworkSoldier->bLife; + + INT16 sCellX, sCellY; sCellX = CenterX( SUpdateNetworkSoldier->sAtGridNo ); sCellY = CenterY( SUpdateNetworkSoldier->sAtGridNo ); @@ -2395,10 +2409,14 @@ void overide_turn (void) if(is_server) { //manual overide command for server - const STR16 msg = MPClientMessage[30]; + //const STR16 msg = MPClientMessage[30]; + CHAR16 Cmsg[255]; + swprintf(Cmsg, L"Start turn for client number: #1-'%S', #2-'%S', #3-'%S', #4-'%S'",client_names[0],client_names[1],client_names[2],client_names[3]); + + SGPRect CenterRect = { 100, 100, SCREEN_WIDTH - 100, 300 }; - DoMessageBox( MSG_BOX_BASIC_STYLE, msg, guiCurrentScreen, MSG_BOX_FLAG_FOUR_NUMBERED_BUTTONS | MSG_BOX_FLAG_USE_CENTERING_RECT, turn_callback, &CenterRect ); + DoMessageBox( MSG_BOX_BASIC_STYLE, Cmsg, guiCurrentScreen, MSG_BOX_FLAG_FOUR_NUMBERED_BUTTONS | MSG_BOX_FLAG_USE_CENTERING_RECT, turn_callback, &CenterRect ); } else ScreenMsg( FONT_LTGREEN, MSG_INTERFACE, MPClientMessage[22] ); @@ -2563,6 +2581,36 @@ if(is_server) } } +void send_heal (SOLDIERTYPE *pSoldier ) +{ + heal data; + data.ubID=pSoldier->ubID; + data.bLife=pSoldier->stats.bLife; + data.bBleeding=pSoldier->bBleeding; + + + client->RPC("sendHEAL",(const char*)&data, (int)sizeof(heal)*8, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_SYSTEM_ADDRESS, true, 0, UNASSIGNED_NETWORK_ID,0); + +} + +void recieve_heal (RPCParameters *rpcParameters) +{ + heal* data = (heal*)rpcParameters->input; + + + UINT16 healed; + if((data->ubID >= ubID_prefix) && (data->ubID < (ubID_prefix+5))) + healed = (data->ubID - ubID_prefix); + else + healed = data->ubID; + + SOLDIERTYPE *pSoldier = MercPtrs[ healed ]; + pSoldier->bBleeding=data->bBleeding; + pSoldier->stats.bLife=data->bLife; + ScreenMsg( FONT_LTGREEN, MSG_INTERFACE, L"healing..." ); + +} + //*************************** //*** client connection***** //************************* @@ -2609,6 +2657,7 @@ void connect_client ( void ) REGISTER_STATIC_RPC(client, null_team); REGISTER_STATIC_RPC(client, gotoRT); REGISTER_STATIC_RPC(client, recieve_wipe); + REGISTER_STATIC_RPC(client, recieve_heal); //*** if (b) diff --git a/Multiplayer/fresh_header.h b/Multiplayer/fresh_header.h index 21b7b2e9..a6c081d9 100644 --- a/Multiplayer/fresh_header.h +++ b/Multiplayer/fresh_header.h @@ -16,6 +16,15 @@ typedef struct INT16 sGridNo; BOOLEAN fNoAnimations; }doors; + +typedef struct +{ +UINT16 ubID; +INT8 bLife; +INT8 bBleeding; +}heal; + + void send_door ( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fNoAnimations ); void send_changestate (EV_S_CHANGESTATE * SChangeState); @@ -62,3 +71,4 @@ BOOLEAN check_status (void); extern UINT8 NumEnemyInSector( ); extern INT8 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ); +void send_heal (SOLDIERTYPE *pSoldier ); \ No newline at end of file diff --git a/Multiplayer/server.cpp b/Multiplayer/server.cpp index 0539ba41..3f642753 100644 --- a/Multiplayer/server.cpp +++ b/Multiplayer/server.cpp @@ -196,6 +196,11 @@ void sendWIPE(RPCParameters *rpcParameters) server->RPC("recieve_wipe",(const char*)rpcParameters->input, (*rpcParameters).numberOfBitsOfData, HIGH_PRIORITY, RELIABLE, 0, rpcParameters->sender, true, 0, UNASSIGNED_NETWORK_ID,0); } +void sendHEAL(RPCParameters *rpcParameters) +{ + server->RPC("recieve_heal",(const char*)rpcParameters->input, (*rpcParameters).numberOfBitsOfData, HIGH_PRIORITY, RELIABLE, 0, rpcParameters->sender, true, 0, UNASSIGNED_NETWORK_ID,0); +} + void startCOMBAT(RPCParameters *rpcParameters) { if(!( gTacticalStatus.uiFlags & INCOMBAT )) @@ -554,6 +559,7 @@ if(gsPLAYER_BSIDE==2)//only enable ai during coop REGISTER_STATIC_RPC(server, sendREAL); REGISTER_STATIC_RPC(server, startCOMBAT); REGISTER_STATIC_RPC(server, sendWIPE); + REGISTER_STATIC_RPC(server, sendHEAL); // diff --git a/Multiplayer/test_space.cpp b/Multiplayer/test_space.cpp index eb1787ed..7e4ce03d 100644 --- a/Multiplayer/test_space.cpp +++ b/Multiplayer/test_space.cpp @@ -112,6 +112,8 @@ void test_func2 (void)//now bound to "0" //currently displays coordinates of the SOLDIERTYPE * pSoldier=MercPtrs[ 0 ]; + +pSoldier->ubServicePartner = NOBODY; //SOLDIERTYPE * pSoldier2=MercPtrs[ 127 ]; // ////pSoldier->AdjustNoAPToFinishMove( TRUE ); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 7ea4084e..2be81cce 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -2510,7 +2510,8 @@ BOOLEAN SOLDIERTYPE::ChangeSoldierState( UINT16 usNewState, UINT16 usStartingAni SChangeState.sXPos = this->sX; SChangeState.sYPos = this->sY; SChangeState.fForce = fForce; - SChangeState.uiUniqueId = this->uiUniqueSoldierIdValue; + SChangeState.usNewDirection = this->ubDirection; + //AddGameEvent( S_CHANGESTATE, 0, &SChangeState ); if(is_server && this->ubID < 120) @@ -6087,7 +6088,9 @@ void SOLDIERTYPE::SoldierGotoStationaryStance( void ) } else if ( this->ubServicePartner != NOBODY && this->stats.bLife >= OKLIFE && this->bBreath > 0 ) { - this->EVENT_InitNewSoldierAnim( GIVING_AID, 0 , FALSE ); + if(!is_networked)this->EVENT_InitNewSoldierAnim( GIVING_AID, 0 , FALSE ); + else this->ChangeSoldierState( GIVING_AID, 0, 0 ); + } else { @@ -10631,7 +10634,9 @@ void SOLDIERTYPE::EVENT_SoldierBeginFirstAid( INT16 sGridNo, UINT8 ubDirection ) //else { // CHANGE TO ANIMATION - this->EVENT_InitNewSoldierAnim( START_AID, 0 , FALSE ); + if(!is_networked)this->EVENT_InitNewSoldierAnim( START_AID, 0 , FALSE ); + else this->ChangeSoldierState( START_AID, 0, 0 ); + } // SET TARGET GRIDNO @@ -10873,6 +10878,7 @@ UINT32 SOLDIERTYPE::SoldierDressWound( SOLDIERTYPE *pVictim, INT16 sKitPts, INT1 // DEXTERITY GAIN (actual / 6): Helped someone by giving first aid StatChange(this, DEXTAMT, (UINT16)(uiActual / 6), FALSE); } + if(is_networked && pVictim->ubID > 19)send_heal(pVictim); return( uiMedcost ); } @@ -10908,7 +10914,8 @@ void SOLDIERTYPE::InternalReceivingSoldierCancelServices( BOOLEAN fPlayEndAnim ) // don't use end aid animation in autobandage if ( pTSoldier->stats.bLife >= OKLIFE && pTSoldier->bBreath > 0 && fPlayEndAnim ) { - pTSoldier->EVENT_InitNewSoldierAnim( END_AID, 0 , FALSE ); + if(!is_networked)pTSoldier->EVENT_InitNewSoldierAnim( END_AID, 0 , FALSE ); + else pTSoldier->ChangeSoldierState( END_AID, 0, 0 ); } } @@ -10953,7 +10960,8 @@ void SOLDIERTYPE::InternalGivingSoldierCancelServices( BOOLEAN fPlayEndAnim ) if ( this->stats.bLife >= OKLIFE && this->bBreath > 0 && fPlayEndAnim ) { // don't use end aid animation in autobandage - this->EVENT_InitNewSoldierAnim( END_AID, 0 , FALSE ); + if(!is_networked)this->EVENT_InitNewSoldierAnim( END_AID, 0 , FALSE ); + else this->ChangeSoldierState( END_AID, 0, 0 ); } } } diff --git a/Utils/Event Pump.h b/Utils/Event Pump.h index 3c43fd3f..b32ffc82 100644 --- a/Utils/Event Pump.h +++ b/Utils/Event Pump.h @@ -67,6 +67,7 @@ typedef struct INT16 sYPos; UINT16 usStartingAniCode; BOOLEAN fForce; + UINT8 usNewDirection;//hayden } EV_S_CHANGESTATE; @@ -257,6 +258,7 @@ typedef struct UINT16 usTactialTurnLimitCounter; UINT16 usTactialTurnLimitMax; UINT8 ubDirection; + } EV_S_UPDATENETWORKSOLDIER;