void SendToDeadUserArea(int UserIndex, std::string sdData) { /* '************************************************************** */ /* 'Author: Juan Martín Sotuyo Dodero (Maraxus) */ /* 'Last Modify Date: Unknow */ /* ' */ /* '************************************************************** */ int LoopC; int tempIndex; int Map; int AreaX; int AreaY; Map = UserList[UserIndex].Pos.Map; AreaX = UserList[UserIndex].AreasInfo.AreaPerteneceX; AreaY = UserList[UserIndex].AreasInfo.AreaPerteneceY; if (!MapaValido(Map)) { return; } for (LoopC = (1); LoopC <= (ConnGroups[Map].CountEntrys); LoopC++) { tempIndex = ConnGroups[Map].UserEntrys[LoopC]; /* 'Esta en el area? */ if (UserList[tempIndex].AreasInfo.AreaReciveX && AreaX) { if (UserList[tempIndex].AreasInfo.AreaReciveY && AreaY) { /* 'Dead and admins read */ if (UserList[tempIndex].ConnIDValida == true && (UserList[tempIndex].flags.Muerto == 1 || UserTieneAlgunPrivilegios(tempIndex, PlayerType_Admin, PlayerType_Dios, PlayerType_SemiDios, PlayerType_Consejero))) { EnviarDatosASlot(tempIndex, sdData); } } } } }
void SendToUsersAndRmsAndCounselorsAreaButGMs(int UserIndex, std::string sdData) { /* '************************************************************** */ /* 'Author: Torres Patricio(Pato) */ /* 'Last Modify Date: 10/17/2009 */ /* ' */ /* '************************************************************** */ int LoopC; int tempIndex; int Map; int AreaX; int AreaY; Map = UserList[UserIndex].Pos.Map; AreaX = UserList[UserIndex].AreasInfo.AreaPerteneceX; AreaY = UserList[UserIndex].AreasInfo.AreaPerteneceY; if (!MapaValido(Map)) { return; } for (LoopC = (1); LoopC <= (ConnGroups[Map].CountEntrys); LoopC++) { tempIndex = ConnGroups[Map].UserEntrys[LoopC]; /* 'Esta en el area? */ if (UserList[tempIndex].AreasInfo.AreaReciveX && AreaX) { if (UserList[tempIndex].AreasInfo.AreaReciveY && AreaY) { if (UserList[tempIndex].ConnIDValida) { if (UserTieneAlgunPrivilegios (tempIndex, PlayerType_User, PlayerType_Consejero, PlayerType_RoleMaster)) { EnviarDatosASlot(tempIndex, sdData); } } } } } }
void GameTimer_Timer() { int iUserIndex; bool bEnviarStats; bool bEnviarAyS; /* '<<<<<< Procesa eventos de los usuarios >>>>>> */ /* 'LastUser */ for (iUserIndex = (1); iUserIndex <= (MaxUsers); iUserIndex++) { /* 'Conexion activa? */ if (UserIndexSocketValido(iUserIndex)) { /* '¿User valido? */ if (UserList[iUserIndex].flags.UserLogged) { /* '[Alejo-18-5] */ bEnviarStats = false; bEnviarAyS = false; if (UserList[iUserIndex].flags.Paralizado == 1) { EfectoParalisisUser(iUserIndex); } if (UserList[iUserIndex].flags.Ceguera == 1 || UserList[iUserIndex].flags.Estupidez) { EfectoCegueEstu(iUserIndex); } if (UserList[iUserIndex].flags.Muerto == 0) { /* '[Consejeros] */ if (UserTieneAlgunPrivilegios(iUserIndex, PlayerType_User)) { EfectoLava(iUserIndex); } if (UserList[iUserIndex].flags.Desnudo != 0 && UserTieneAlgunPrivilegios(iUserIndex, PlayerType_User)) { EfectoFrio(iUserIndex); } if (UserList[iUserIndex].flags.Meditando) { DoMeditar(iUserIndex); } if (UserList[iUserIndex].flags.Envenenado != 0 && UserTieneAlgunPrivilegios(iUserIndex, PlayerType_User)) { EfectoVeneno(iUserIndex); } if (UserList[iUserIndex].flags.AdminInvisible != 1) { if (UserList[iUserIndex].flags.invisible == 1) { EfectoInvisibilidad(iUserIndex); } if (UserList[iUserIndex].flags.Oculto == 1) { DoPermanecerOculto(iUserIndex); } } if (UserList[iUserIndex].flags.Mimetizado == 1) { EfectoMimetismo(iUserIndex); } if (UserList[iUserIndex].flags.AtacablePor != 0) { EfectoEstadoAtacable(iUserIndex); } DuracionPociones(iUserIndex); HambreYSed(iUserIndex, bEnviarAyS); if (UserList[iUserIndex].flags.Hambre == 0 && UserList[iUserIndex].flags.Sed == 0) { if (Lloviendo) { if (!Intemperie(iUserIndex)) { if (!UserList[iUserIndex].flags.Descansar) { /* 'No esta descansando */ Sanar(iUserIndex, bEnviarStats, SanaIntervaloSinDescansar); if (bEnviarStats) { WriteUpdateHP(iUserIndex); bEnviarStats = false; } RecStamina(iUserIndex, bEnviarStats, StaminaIntervaloSinDescansar); if (bEnviarStats) { WriteUpdateSta(iUserIndex); bEnviarStats = false; } } else { /* 'esta descansando */ Sanar(iUserIndex, bEnviarStats, SanaIntervaloDescansar); if (bEnviarStats) { WriteUpdateHP(iUserIndex); bEnviarStats = false; } RecStamina(iUserIndex, bEnviarStats, StaminaIntervaloDescansar); if (bEnviarStats) { WriteUpdateSta(iUserIndex); bEnviarStats = false; } /* 'termina de descansar automaticamente */ if (UserList[iUserIndex].Stats.MaxHp == UserList[iUserIndex].Stats.MinHp && UserList[iUserIndex].Stats.MaxSta == UserList[iUserIndex].Stats.MinSta) { WriteRestOK(iUserIndex); WriteConsoleMsg(iUserIndex, "Has terminado de descansar.", FontTypeNames_FONTTYPE_INFO); UserList[iUserIndex].flags.Descansar = false; } } } } else { if (!UserList[iUserIndex].flags.Descansar) { /* 'No esta descansando */ Sanar(iUserIndex, bEnviarStats, SanaIntervaloSinDescansar); if (bEnviarStats) { WriteUpdateHP(iUserIndex); bEnviarStats = false; } RecStamina(iUserIndex, bEnviarStats, StaminaIntervaloSinDescansar); if (bEnviarStats) { WriteUpdateSta(iUserIndex); bEnviarStats = false; } } else { /* 'esta descansando */ Sanar(iUserIndex, bEnviarStats, SanaIntervaloDescansar); if (bEnviarStats) { WriteUpdateHP(iUserIndex); bEnviarStats = false; } RecStamina(iUserIndex, bEnviarStats, StaminaIntervaloDescansar); if (bEnviarStats) { WriteUpdateSta(iUserIndex); bEnviarStats = false; } /* 'termina de descansar automaticamente */ if (UserList[iUserIndex].Stats.MaxHp == UserList[iUserIndex].Stats.MinHp && UserList[iUserIndex].Stats.MaxSta == UserList[iUserIndex].Stats.MinSta) { WriteRestOK(iUserIndex); WriteConsoleMsg(iUserIndex, "Has terminado de descansar.", FontTypeNames_FONTTYPE_INFO); UserList[iUserIndex].flags.Descansar = false; } } } } if (bEnviarAyS) { WriteUpdateHungerAndThirst(iUserIndex); } if (UserList[iUserIndex].NroMascotas > 0) { TiempoInvocacion(iUserIndex); } } else { if (UserList[iUserIndex].flags.Traveling != 0) { TravelingEffect(iUserIndex); } /* 'Muerto */ } /* 'no esta logeado? */ } else { /* 'Inactive players will be removed! */ UserList[iUserIndex].Counters.IdleCount = UserList[iUserIndex].Counters.IdleCount + 1; if (UserList[iUserIndex].Counters.IdleCount > IntervaloParaConexion) { UserList[iUserIndex].Counters.IdleCount = 0; CloseSocket(iUserIndex); } /* 'UserLogged */ } } if (UserIndexSocketValido(iUserIndex)) { /* 'If there is anything to be sent, we send it */ FlushBuffer(iUserIndex); } } }
void SendData(SendTarget sndRoute, int sndIndex, std::string sndData, bool IsDenounce) { /* '************************************************************** */ /* 'Author: Juan Martín Sotuyo Dodero (Maraxus) - Rewrite of original */ /* 'Last Modify Date: 14/11/2010 */ /* 'Last modified by: ZaMa */ /* '14/11/2010: ZaMa - Now denounces can be desactivated. */ /* '************************************************************** */ int LoopC; switch (sndRoute) { case SendTarget_ToPCArea: SendToUserArea(sndIndex, sndData); return; break; case SendTarget_ToAdmins: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if (UserList[LoopC].ConnID != -1) { if (UserTieneAlgunPrivilegios(LoopC, PlayerType_Admin, PlayerType_Dios, PlayerType_SemiDios, PlayerType_Consejero)) { /* ' Denounces can be desactivated */ if (IsDenounce) { if (UserList[LoopC].flags.SendDenounces) { EnviarDatosASlot(LoopC, sndData); } } else { EnviarDatosASlot(LoopC, sndData); } } } } return; break; case SendTarget_ToAll: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if (UserList[LoopC].ConnID != -1) { /* 'Esta logeado como usuario? */ if (UserList[LoopC].flags.UserLogged) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToAllButIndex: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1) && (LoopC != sndIndex)) { /* 'Esta logeado como usuario? */ if (UserList[LoopC].flags.UserLogged) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_toMap: SendToMap(sndIndex, sndData); return; break; case SendTarget_ToMapButIndex: SendToMapButIndex(sndIndex, sndData); return; break; case SendTarget_ToGuildMembers: // LoopC = m_Iterador_ProximoUserIndex(sndIndex); // while (LoopC>0) { // if ((UserList[LoopC].ConnID != -1)) { // EnviarDatosASlot(LoopC, sndData); // } // LoopC = m_Iterador_ProximoUserIndex(sndIndex); for (auto LoopC : guild_Iterador_ProximoUserIndex(sndIndex)) { if ((UserList[LoopC].ConnID != -1)) { EnviarDatosASlot(LoopC, sndData); } } break; return; break; case SendTarget_ToDeadArea: SendToDeadUserArea(sndIndex, sndData); return; break; case SendTarget_ToPCAreaButIndex: SendToUserAreaButindex(sndIndex, sndData); return; break; case SendTarget_ToClanArea: SendToUserGuildArea(sndIndex, sndData); return; break; case SendTarget_ToPartyArea: SendToUserPartyArea(sndIndex, sndData); return; break; case SendTarget_ToAdminsAreaButConsejeros: SendToAdminsButConsejerosArea(sndIndex, sndData); return; break; case SendTarget_ToNPCArea: SendToNpcArea(sndIndex, sndData); return; break; case SendTarget_ToDiosesYclan: // LoopC = m_Iterador_ProximoUserIndex(sndIndex); // while (LoopC > 0) { // if ((UserList[LoopC].ConnID != -1)) { // EnviarDatosASlot(LoopC, sndData); // } // LoopC = m_Iterador_ProximoUserIndex(sndIndex); // } for (auto LoopC : guild_Iterador_ProximoUserIndex(sndIndex)) { if ((UserList[LoopC].ConnID != -1)) { EnviarDatosASlot(LoopC, sndData); } } // LoopC = Iterador_ProximoGM(sndIndex); // while (LoopC > 0) { // if ((UserList[LoopC].ConnID != -1)) { // EnviarDatosASlot(LoopC, sndData); // } // LoopC = Iterador_ProximoGM(sndIndex); // } for (auto LoopC : guild_Iterador_ProximoGM(sndIndex)) { if ((UserList[LoopC].ConnID != -1)) { EnviarDatosASlot(LoopC, sndData); } } return; break; case SendTarget_ToConsejo: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserTienePrivilegio(LoopC, PlayerType_RoyalCouncil)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToConsejoCaos: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserTienePrivilegio(LoopC, PlayerType_ChaosCouncil)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToRolesMasters: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserTienePrivilegio(LoopC, PlayerType_RoleMaster)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToCiudadanos: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (!criminal(LoopC)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToCriminales: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (criminal(LoopC)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToReal: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserList[LoopC].Faccion.ArmadaReal == 1) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToCaos: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserList[LoopC].Faccion.FuerzasCaos == 1) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToCiudadanosYRMs: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (!criminal(LoopC) || UserTienePrivilegio(LoopC, PlayerType_RoleMaster)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToCriminalesYRMs: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (criminal(LoopC) || UserTienePrivilegio(LoopC, PlayerType_RoleMaster)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToRealYRMs: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserList[LoopC].Faccion.ArmadaReal == 1 || UserTienePrivilegio(LoopC, PlayerType_RoleMaster)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToCaosYRMs: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserList[LoopC].Faccion.FuerzasCaos == 1 || UserTienePrivilegio(LoopC, PlayerType_RoleMaster)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToHigherAdmins: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if (UserList[LoopC].ConnID != -1) { if (UserTieneAlgunPrivilegios(LoopC, PlayerType_Admin, PlayerType_Dios)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToGMsAreaButRmsOrCounselors: SendToGMsAreaButRmsOrCounselors(sndIndex, sndData); return; break; case SendTarget_ToUsersAreaButGMs: SendToUsersAreaButGMs(sndIndex, sndData); return; break; case SendTarget_ToUsersAndRmsAndCounselorsAreaButGMs: SendToUsersAndRmsAndCounselorsAreaButGMs(sndIndex, sndData); return; break; case SendTarget_ToAdminsButCounselors: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if (UserList[LoopC].ConnID != -1) { if (UserTieneAlgunPrivilegios(LoopC, PlayerType_Admin, PlayerType_Dios, PlayerType_SemiDios, PlayerType_RoleMaster) && !UserTieneAlgunPrivilegios(LoopC, PlayerType_Consejero)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToAdminsButCounselorsAndRms: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if (UserList[LoopC].ConnID != -1) { if (UserTieneAlgunPrivilegios(LoopC, PlayerType_Admin, PlayerType_Dios, PlayerType_SemiDios) && !UserTieneAlgunPrivilegios(LoopC, PlayerType_Consejero, PlayerType_RoleMaster)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToHigherAdminsButRMs: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if (UserList[LoopC].ConnID != -1) { if (UserTieneAlgunPrivilegios(LoopC, PlayerType_Admin, PlayerType_Dios) && !UserTieneAlgunPrivilegios(LoopC, PlayerType_RoleMaster)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToRMsAndHigherAdmins: for (LoopC = (1); LoopC <= (LastUser); LoopC++) { if ((UserList[LoopC].ConnID != -1)) { if (UserTieneAlgunPrivilegios(LoopC, PlayerType_RoleMaster, PlayerType_Admin, PlayerType_Dios)) { EnviarDatosASlot(LoopC, sndData); } } } return; break; case SendTarget_ToGM: throw std::runtime_error("SendData unhandled target: SendTarget_ToGM"); break; } }