Exemple #1
0
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);
				}
			}
		}
	}
}
Exemple #2
0
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);
					}
				}
			}
		}
	}
}
Exemple #3
0
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);
		}
	}
}
Exemple #4
0
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;
	}
}