notifier
This commit is contained in:
commit
fc01f7fb43
49
EventNotifier/EventNotfierDiscordBot/nbactions.xml
Normal file
49
EventNotifier/EventNotfierDiscordBot/nbactions.xml
Normal file
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<actions>
|
||||
<action>
|
||||
<actionName>run</actionName>
|
||||
<packagings>
|
||||
<packaging>jar</packaging>
|
||||
</packagings>
|
||||
<goals>
|
||||
<goal>process-classes</goal>
|
||||
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||
</goals>
|
||||
<properties>
|
||||
<exec.args>-classpath %classpath FunctionLayer.Bottest</exec.args>
|
||||
<exec.executable>java</exec.executable>
|
||||
<exec.workingdir>E:\java8\Projects\EventNotfierDiscordBot</exec.workingdir>
|
||||
</properties>
|
||||
</action>
|
||||
<action>
|
||||
<actionName>debug</actionName>
|
||||
<packagings>
|
||||
<packaging>jar</packaging>
|
||||
</packagings>
|
||||
<goals>
|
||||
<goal>process-classes</goal>
|
||||
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||
</goals>
|
||||
<properties>
|
||||
<exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath FunctionLayer.Bottest</exec.args>
|
||||
<exec.executable>java</exec.executable>
|
||||
<jpda.listen>true</jpda.listen>
|
||||
<exec.workingdir>E:\java8\Projects\EventNotfierDiscordBot</exec.workingdir>
|
||||
</properties>
|
||||
</action>
|
||||
<action>
|
||||
<actionName>profile</actionName>
|
||||
<packagings>
|
||||
<packaging>jar</packaging>
|
||||
</packagings>
|
||||
<goals>
|
||||
<goal>process-classes</goal>
|
||||
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||
</goals>
|
||||
<properties>
|
||||
<exec.args>-classpath %classpath FunctionLayer.Bottest</exec.args>
|
||||
<exec.executable>java</exec.executable>
|
||||
<exec.workingdir>E:\java8\Projects\EventNotfierDiscordBot</exec.workingdir>
|
||||
</properties>
|
||||
</action>
|
||||
</actions>
|
70
EventNotifier/EventNotfierDiscordBot/pom.xml
Normal file
70
EventNotifier/EventNotfierDiscordBot/pom.xml
Normal file
@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.mycompany</groupId>
|
||||
<artifactId>EventNotfierDiscordBot</artifactId>
|
||||
<version>1.0</version>
|
||||
<packaging>jar</packaging>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.javacord</groupId>
|
||||
<artifactId>javacord</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-dbcp2</artifactId>
|
||||
<version>2.5.0</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.13</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>26.0-jre</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<mainClass>FunctionLayer.Bottest</mainClass>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>install</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/lib</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<classpathPrefix>lib/</classpathPrefix>
|
||||
<mainClass>${mainClass}</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package DataLayer;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author install1
|
||||
*/
|
||||
public class DBCPDataSource {
|
||||
private static BasicDataSource ds = new BasicDataSource();
|
||||
static {
|
||||
try {
|
||||
ds.setDriver(new com.mysql.cj.jdbc.Driver());
|
||||
ds.setUrl("jdbc:mysql://151.80.230.149:3306/eventscss?useLegacyDatetimeCode=false&serverTimezone=UTC");
|
||||
//ds.setUrl("jdbc:mysql://localhost:3306/eventcss?useLegacyDatetimeCode=false&serverTimezone=UTC");
|
||||
ds.setUsername("eventscss");
|
||||
ds.setPassword("sdbhb2h34b2hbhbdfwbfwhber234");
|
||||
ds.setMaxTotal(-1);
|
||||
ds.setMinIdle(5);
|
||||
ds.setMaxIdle(-1);
|
||||
ds.setMaxOpenPreparedStatements(100);
|
||||
} catch (SQLException ex) {
|
||||
Logger.getLogger(DBCPDataSource.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static Connection getConnection() throws SQLException {
|
||||
return ds.getConnection();
|
||||
}
|
||||
|
||||
private DBCPDataSource() {
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package DataLayer;
|
||||
|
||||
import FunctionLayer.CustomError;
|
||||
import FunctionLayer.StringObject;
|
||||
import com.google.common.base.Stopwatch;
|
||||
import com.google.common.collect.MapMaker;
|
||||
import java.beans.PropertyVetoException;
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author install1
|
||||
*/
|
||||
public class DataMapper {
|
||||
|
||||
public static final long EXPIRE_TIME_IN_SECONDS = TimeUnit.SECONDS.convert(15, TimeUnit.MINUTES);
|
||||
public static DataMapper instance = new DataMapper();
|
||||
private volatile boolean called;
|
||||
private final ConcurrentMap<Integer, StringObject> soEventContentCache;
|
||||
private final Stopwatch stopwatch;
|
||||
|
||||
public DataMapper() {
|
||||
this.stopwatch = Stopwatch.createStarted();
|
||||
this.soEventContentCache = new MapMaker().concurrencyLevel(2).makeMap();
|
||||
}
|
||||
|
||||
public List<StringObject> getAllMapValues() {
|
||||
List<StringObject> MapColoumns = new ArrayList(soEventContentCache.values());
|
||||
return MapColoumns;
|
||||
}
|
||||
|
||||
private Map<Integer, StringObject> getCache() throws SQLException, IOException, CustomError {
|
||||
List<StringObject> stro;
|
||||
stro = GetEventContentFromDBTable();
|
||||
LinkedHashMap<Integer, StringObject> LHM = new LinkedHashMap();
|
||||
for (int i = 0; i < stro.size(); i++) {
|
||||
LHM.put(i, stro.get(i));
|
||||
}
|
||||
return LHM;
|
||||
}
|
||||
|
||||
public synchronized void initialization() throws SQLException, IOException, CustomError {
|
||||
if (called == false) {
|
||||
soEventContentCache.putAll(getCache());
|
||||
for (int i = 0; i < soEventContentCache.size(); i++) {
|
||||
soEventContentCache.get(i).setEventContent(modifyEventContent(soEventContentCache.get(i).getEventContent(), i));
|
||||
}
|
||||
called = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void checkUpdateTime() {
|
||||
new Thread(() -> {
|
||||
if (stopwatch.elapsed(TimeUnit.SECONDS) >= EXPIRE_TIME_IN_SECONDS) {
|
||||
try {
|
||||
soEventContentCache.clear();
|
||||
called = false;
|
||||
initialization();
|
||||
stopwatch.reset();
|
||||
} catch (SQLException | IOException | CustomError ex) {
|
||||
Logger.getLogger(DataMapper.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
public static String modifyEventContent(String str, int i) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
switch (i) {
|
||||
case 0: {
|
||||
sb.append(str);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
str = str.trim();
|
||||
sb.append(str);
|
||||
sb.insert(0, "Rewards: ");
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
sb.append(str);
|
||||
sb.insert(0, "Leaders: ");
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
sb.append(str);
|
||||
sb.insert(0, "Date: ");
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
sb.append(str);
|
||||
sb.insert(0, "Hour: ");
|
||||
sb.append("GMT +1");
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
sb.append(str);
|
||||
sb.insert(0, "Map: ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static List<StringObject> GetEventContentFromDBTable() throws CustomError {
|
||||
/*
|
||||
0 = title
|
||||
1 = rewards
|
||||
2 = leaders
|
||||
3 = datum
|
||||
4 = hours
|
||||
5 = maps
|
||||
*/
|
||||
List<StringObject> str = new ArrayList();
|
||||
Connection l_cCon = null;
|
||||
PreparedStatement l_pStatement = null;
|
||||
ResultSet l_rsSearch = null;
|
||||
try {
|
||||
l_cCon = DBCPDataSource.getConnection();
|
||||
String l_sSQL = "SELECT * FROM `EventContent`";
|
||||
l_pStatement = l_cCon.prepareStatement(l_sSQL);
|
||||
l_rsSearch = l_pStatement.executeQuery();
|
||||
l_rsSearch.next();
|
||||
for (int i = 1; i < 6; i++) {
|
||||
StringObject so = new StringObject(l_rsSearch.getString(i));
|
||||
str.add(so);
|
||||
}
|
||||
l_sSQL = "SELECT * FROM `Maps`";
|
||||
l_pStatement = l_cCon.prepareStatement(l_sSQL);
|
||||
l_rsSearch = l_pStatement.executeQuery();
|
||||
while (l_rsSearch.next()) {
|
||||
StringObject so = new StringObject(l_rsSearch.getString(1));
|
||||
str.add(so);
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
throw new CustomError("failed in DataMapper " + ex.getMessage());
|
||||
} finally {
|
||||
CloseConnections(l_pStatement, l_rsSearch, l_cCon);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
public static void CloseConnections(PreparedStatement ps, ResultSet rs, Connection con) {
|
||||
if (rs != null) {
|
||||
try {
|
||||
rs.close();
|
||||
} catch (SQLException ex) {
|
||||
Logger.getLogger(DataMapper.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
if (ps != null) {
|
||||
try {
|
||||
ps.close();
|
||||
} catch (SQLException ex) {
|
||||
Logger.getLogger(DataMapper.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
if (con != null) {
|
||||
try {
|
||||
con.close();
|
||||
} catch (SQLException ex) {
|
||||
Logger.getLogger(DataMapper.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package FunctionLayer;
|
||||
//https://github.com/Javacord/Javacord
|
||||
//https://discordapp.com/developers/applications/
|
||||
//https://docs.javacord.org/api/v/3.0.1/org/javacord/api/DiscordApi.html
|
||||
//https://stackoverflow.com/questions/17654213/how-do-i-create-a-netbeans-style-jar-with-all-dependencies-in-a-lib-folder
|
||||
//ps ax | grep EventNotfierDiscordBot-1.0
|
||||
//kill $pid (number)
|
||||
/*
|
||||
screen -d -m -S nonRoot java -jar /home/sourcemodextensionstest/EventNotfierDiscordBot/EventNotfierDiscordBot-1.0.jar
|
||||
screen -ls (number1)
|
||||
screen -X -S (number1) quit
|
||||
*/
|
||||
|
||||
import DataLayer.DataMapper;
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.javacord.api.DiscordApi;
|
||||
import org.javacord.api.DiscordApiBuilder;
|
||||
import org.javacord.api.event.message.MessageCreateEvent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author install1
|
||||
*/
|
||||
public class Bottest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
// Insert your bot's token here
|
||||
String token = "NTI5MDIyODgwOTU3MDcxMzk5.Dwqy6w.sgbRejEzZOLdTqyqzDmktSTBDpM";
|
||||
DiscordApi api = new DiscordApiBuilder().setToken(token).login().join();
|
||||
api.addMessageCreateListener((MessageCreateEvent event) -> {
|
||||
DataMapper.instance.checkUpdateTime();
|
||||
if (event.getMessageContent().equalsIgnoreCase("!event")) {
|
||||
try {
|
||||
event.getChannel().sendMessage("Event Information: ");
|
||||
DataMapper.instance.initialization();
|
||||
List<StringObject> EventContent = DataMapper.instance.getAllMapValues();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < EventContent.size(); i++) {
|
||||
sb.append(EventContent.get(i).getEventContent()).append("\n");
|
||||
}
|
||||
event.getChannel().sendMessage(sb.toString());
|
||||
} catch (SQLException | IOException | CustomError ex) {
|
||||
Logger.getLogger(Bottest.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package FunctionLayer;
|
||||
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author install1
|
||||
*/
|
||||
public class CustomError extends Exception {
|
||||
|
||||
public CustomError(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package FunctionLayer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author install1
|
||||
*/
|
||||
public class StringObject {
|
||||
String EventContent;
|
||||
|
||||
public String getEventContent() {
|
||||
return EventContent;
|
||||
}
|
||||
|
||||
public void setEventContent(String EventContent) {
|
||||
this.EventContent = EventContent;
|
||||
}
|
||||
|
||||
public StringObject(String EventContent) {
|
||||
this.EventContent = EventContent;
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.javacord</groupId>
|
||||
<artifactId>javacord</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>Javacord</name>
|
||||
<description>An easy to use multithreaded library for creating Discord bots in Java</description>
|
||||
<url>https://www.javacord.org</url>
|
||||
<inceptionYear>2015</inceptionYear>
|
||||
<licenses>
|
||||
<license>
|
||||
<name>Apache License, Version 2.0</name>
|
||||
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
<distribution>repo</distribution>
|
||||
<comments>A business-friendly OSS license</comments>
|
||||
</license>
|
||||
</licenses>
|
||||
<developers>
|
||||
<developer>
|
||||
<id>BtoBastian</id>
|
||||
<name>Bastian Oppermann</name>
|
||||
<email>bastianoppermann1997@gmail.com</email>
|
||||
<url>https://github.com/BtoBastian</url>
|
||||
<timezone>Europe/Berlin</timezone>
|
||||
</developer>
|
||||
</developers>
|
||||
<contributors>
|
||||
<contributor>
|
||||
<name>Björn Kautler</name>
|
||||
<email>Bjoern@Kautler.net</email>
|
||||
<url>https://github.com/Vampire</url>
|
||||
<timezone>Europe/Berlin</timezone>
|
||||
</contributor>
|
||||
</contributors>
|
||||
<scm>
|
||||
<connection>scm:git:https://github.com/Javacord/Javacord.git</connection>
|
||||
<developerConnection>scm:git:git@github.com:Javacord/Javacord.git</developerConnection>
|
||||
<url>https://github.com/Javacord/Javacord</url>
|
||||
</scm>
|
||||
<issueManagement>
|
||||
<system>GitHub</system>
|
||||
<url>https://github.com/Javacord/Javacord/issues</url>
|
||||
</issueManagement>
|
||||
<ciManagement>
|
||||
<system>TeamCity</system>
|
||||
<url>https://ci.javacord.org/project.html?projectId=Javacord&guest=1</url>
|
||||
</ciManagement>
|
||||
<distributionManagement>
|
||||
<downloadUrl>https://github.com/Javacord/Javacord/releases</downloadUrl>
|
||||
</distributionManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.javacord</groupId>
|
||||
<artifactId>javacord-api</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.javacord</groupId>
|
||||
<artifactId>javacord-core</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
Binary file not shown.
Binary file not shown.
BIN
EventNotifier/EventNotfierDiscordBot/target/lib/jsr305-3.0.2.jar
Normal file
BIN
EventNotifier/EventNotfierDiscordBot/target/lib/jsr305-3.0.2.jar
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
EventNotifier/EventNotfierDiscordBot/target/lib/okhttp-3.9.1.jar
Normal file
BIN
EventNotifier/EventNotfierDiscordBot/target/lib/okhttp-3.9.1.jar
Normal file
Binary file not shown.
BIN
EventNotifier/EventNotfierDiscordBot/target/lib/okio-1.13.0.jar
Normal file
BIN
EventNotifier/EventNotfierDiscordBot/target/lib/okio-1.13.0.jar
Normal file
Binary file not shown.
Binary file not shown.
@ -0,0 +1,5 @@
|
||||
#Generated by Maven
|
||||
#Fri Jan 04 22:18:34 CET 2019
|
||||
version=1.0
|
||||
groupId=com.mycompany
|
||||
artifactId=EventNotfierDiscordBot
|
97
EventNotifier/Eventnotifier_v2/Eventnotifier_v2.vcxproj
Normal file
97
EventNotifier/Eventnotifier_v2/Eventnotifier_v2.vcxproj
Normal file
@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x86">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x86</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x86">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x86</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{3ecf1ab2-fbd0-43c8-beb9-11ff8bb66aa2}</ProjectGuid>
|
||||
<Keyword>Linux</Keyword>
|
||||
<RootNamespace>Eventnotifier_v2</RootNamespace>
|
||||
<MinimumVisualStudioVersion>15.0</MinimumVisualStudioVersion>
|
||||
<ApplicationType>Linux</ApplicationType>
|
||||
<ApplicationTypeRevision>1.0</ApplicationTypeRevision>
|
||||
<TargetLinuxPlatform>Generic</TargetLinuxPlatform>
|
||||
<LinuxProjectType>{D51BCBC9-82E9-4017-911E-C93873C4EA2B}</LinuxProjectType>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<RemoteRootDir>/home/sourcemodextensionstest</RemoteRootDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings" />
|
||||
<ImportGroup Label="Shared" />
|
||||
<ImportGroup Label="PropertySheets" />
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<IncludePath>/home/sourcemodextensionstest/EventNotifier/boost_1_69_0;/home/sourcemodextensionstest/EventNotifier/includes/mysql;/home/sourcemodextensionstest/EventNotifier/includes/jdbc;/home/sourcemodextensionstest/EventNotifier/curl-7.62.0/include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>/home/sourcemodextensionstest/EventNotifier/boost_1_69_0/libs;/home/sourcemodextensionstest/EventNotifier/curl-7.62.0/lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>/home/sourcemodextensionstest/EventNotifier/boost_1_69_0;/home/sourcemodextensionstest/EventNotifier/includes/jdbc;/home/sourcemodextensionstest/EventNotifier/includes/mysql;/home/sourcemodextensionstest/EventNotifier/curl-7.62.0/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>-lmysqlcppconn;-lcurl;$(StlAdditionalDependencies);%(Link.AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets" />
|
||||
</Project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<RemoteTarget>-1386263875;104.248.40.216 (username=, port=22, authentication=Password)</RemoteTarget>
|
||||
</PropertyGroup>
|
||||
</Project>
|
286
EventNotifier/Eventnotifier_v2/main.cpp
Normal file
286
EventNotifier/Eventnotifier_v2/main.cpp
Normal file
@ -0,0 +1,286 @@
|
||||
#include <algorithm>
|
||||
#include <string.h>
|
||||
#include <cstdio>
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <stdlib.h>
|
||||
#include <cppconn/driver.h>
|
||||
#include <cppconn/exception.h>
|
||||
#include <cppconn/resultset.h>
|
||||
#include <cppconn/statement.h>
|
||||
#include "mysql_connection.h"
|
||||
#include "mysql_driver.h"
|
||||
#include <curl/curl.h>
|
||||
/*
|
||||
g++ -v -x c -E -
|
||||
-lmysqlcppconn
|
||||
https://stackoverflow.com/questions/34057798/how-does-one-set-up-the-visual-studio-code-compiler-debugger-to-gcc
|
||||
https://docs.microsoft.com/en-us/cpp/linux/deploy-run-and-debug-your-linux-project?view=vs-2017
|
||||
*/
|
||||
|
||||
using namespace std;
|
||||
string data;
|
||||
string mapnames[10];
|
||||
string EventContent[5];
|
||||
string pattern[10];
|
||||
int SelectMysqlEventCount(sql::Connection *con)
|
||||
{
|
||||
sql::Statement *stmt;
|
||||
sql::ResultSet *res;
|
||||
int EventCount = 0;
|
||||
try {
|
||||
stmt = con->createStatement();
|
||||
res = stmt->executeQuery("SELECT * FROM `EventCount`");
|
||||
if (res->next()) {
|
||||
cout << res->getInt(1) << endl;
|
||||
EventCount = res->getInt(1);
|
||||
}
|
||||
}
|
||||
catch (sql::SQLException &e) {
|
||||
cout << "# ERR: SQLException in " << __FILE__;
|
||||
cout << "# ERR: " << e.what();
|
||||
cout << " (MySQL error code: " << e.getErrorCode();
|
||||
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
|
||||
}
|
||||
delete stmt;
|
||||
delete res;
|
||||
//cout << endl;
|
||||
return EventCount;
|
||||
}
|
||||
|
||||
size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up)
|
||||
{
|
||||
for (std::size_t c = 0; c < size*nmemb; c++)
|
||||
{
|
||||
data.push_back(buf[c]);
|
||||
}
|
||||
return size * nmemb; //tell curl how many bytes we handled
|
||||
}
|
||||
|
||||
|
||||
string printreturn(std::string::size_type urlstringend, std::string const &s)
|
||||
{
|
||||
string strreturn("");
|
||||
if (urlstringend == std::string::npos) {
|
||||
strreturn = "not found sdbhabd2342d";
|
||||
}
|
||||
else
|
||||
{
|
||||
strreturn = s.substr(0, urlstringend);
|
||||
}
|
||||
return strreturn;
|
||||
}
|
||||
|
||||
void removeSubstrs(string& s, string& p) {
|
||||
string::size_type n = p.length();
|
||||
for (string::size_type i = s.find(p);
|
||||
i != string::npos;
|
||||
i = s.find(p))
|
||||
s.erase(i, n);
|
||||
}
|
||||
|
||||
void ReadForumSubSectionEvent()
|
||||
{
|
||||
int index;
|
||||
CURL* curl;
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
curl = curl_easy_init();
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "https://unloze.com/forums/events.76/");
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
|
||||
//curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); //tell curl to output its progress
|
||||
curl_easy_perform(curl);
|
||||
//check by taking the first from the top of the page, thats always the newest in order
|
||||
//the needed context is always close, instead of taking the full size we only take the needed portion distance
|
||||
std::string::size_type urlstringend;
|
||||
urlstringend = data.find("preview\">Event #");
|
||||
std::string sdeli = ("data-previewUrl=\"");
|
||||
string strf = printreturn(urlstringend, data);
|
||||
size_t pos = 0;
|
||||
if ((pos = strf.find(sdeli)) != std::string::npos) {
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
}
|
||||
data.clear();
|
||||
strf.insert(0, "https://unloze.com/");
|
||||
//https://unloze.com/threads/event-54n74-15-b4ck.1324 is returned here for example
|
||||
std::cout << "strf.c_str(): " << strf.c_str() << "\n";
|
||||
curl_easy_setopt(curl, CURLOPT_URL, strf.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
|
||||
curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
curl_global_cleanup();
|
||||
//assumes only ze event threads contain "CS:S Zombie Escape"
|
||||
//mapnames collects maps specified to event
|
||||
urlstringend = data.find("CS:S Zombie Escape");
|
||||
strf = printreturn(urlstringend, data);
|
||||
if (strf.find("not found sdbhabd2342d") == std::string::npos)
|
||||
{
|
||||
urlstringend = data.find("Prize :");
|
||||
strf = printreturn(urlstringend, data);
|
||||
sdeli = ("<a href=\"http://fastdl.unloze.com/css_ze/maps/");
|
||||
pos = 0;
|
||||
while ((pos = strf.find(sdeli)) != std::string::npos && index < 10)
|
||||
{
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
mapnames[index] = strf.substr(0, strf.find(".bsp.bz2"));
|
||||
std::cout << "mapnames[index]: " << mapnames[index] << "\n";
|
||||
index++;
|
||||
}
|
||||
//EventContent 0 = title
|
||||
urlstringend = data.find("| UNLOZE</title>");
|
||||
strf = printreturn(urlstringend, data);
|
||||
sdeli = ("<title>");
|
||||
pos = 0;
|
||||
if ((pos = strf.find(sdeli)) != std::string::npos)
|
||||
{
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
EventContent[0] = strf;
|
||||
}
|
||||
//EventContent 1 = rewards
|
||||
urlstringend = data.find("<div class=\"messageTextEndMarker\"> </div>");
|
||||
strf = printreturn(urlstringend, data);
|
||||
sdeli = ("Prize :");
|
||||
pos = 0;
|
||||
index = 0;
|
||||
if ((pos = strf.find(sdeli)) != std::string::npos)
|
||||
{
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
size_t index1 = 0;
|
||||
pattern[0] = "</span>";
|
||||
pattern[1] = "<br/>";
|
||||
pattern[2] = "<b>";
|
||||
pattern[3] = "</b>";
|
||||
string teststr = strf;
|
||||
while (!!pattern[index].size())
|
||||
{
|
||||
removeSubstrs(teststr, pattern[index]);
|
||||
index++;
|
||||
}
|
||||
//std::cout << "teststr: " << "\n" << teststr << "\n";
|
||||
strf = teststr;
|
||||
EventContent[1] = strf;
|
||||
}
|
||||
//EventContent 2 = leader
|
||||
urlstringend = data.find("Prize :");
|
||||
strf = printreturn(urlstringend, data);
|
||||
sdeli = ("Leader :</span>");
|
||||
pos = 0;
|
||||
if ((pos = strf.find(sdeli)) != std::string::npos)
|
||||
{
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
//std::cout << "reached eventcontent2 strf: " << strf << "\n";
|
||||
EventContent[2] = strf.substr(0, strf.find("<"));
|
||||
}
|
||||
//EventContent 3 = date
|
||||
urlstringend = data.find("\">Time :");
|
||||
strf = printreturn(urlstringend, data);
|
||||
sdeli = ("Date :</span>");
|
||||
pos = 0;
|
||||
if ((pos = strf.find(sdeli)) != std::string::npos)
|
||||
{
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
EventContent[3] = strf.substr(0, strf.find("<"));
|
||||
}
|
||||
//EventContent[4] = hours
|
||||
urlstringend = data.find("Leader :");
|
||||
strf = printreturn(urlstringend, data);
|
||||
sdeli = ("Time :</span>");
|
||||
pos = 0;
|
||||
if ((pos = strf.find(sdeli)) != std::string::npos)
|
||||
{
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
strf = strf.substr(0, strf.find("pm GMT+1"));
|
||||
}
|
||||
sdeli = ("//");
|
||||
pos = 0;
|
||||
if ((pos = strf.find(sdeli)) != std::string::npos)
|
||||
{
|
||||
strf.erase(0, pos + sdeli.length());
|
||||
EventContent[4] = strf;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Not found" << "\n" << "data value: " << data << "\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MYSQLUpdateEventMaps(sql::Connection *con)
|
||||
{
|
||||
sql::Statement *stmt;
|
||||
try {
|
||||
stmt = con->createStatement();
|
||||
stmt->executeUpdate("delete from Maps");
|
||||
int index;
|
||||
while (!!mapnames[index].size())
|
||||
{
|
||||
stmt->executeUpdate("INSERT INTO `Maps` (`MapNames`) VALUES (\"" + mapnames[index] + "\")");
|
||||
index++;
|
||||
}
|
||||
}
|
||||
catch (sql::SQLException &e) {
|
||||
cout << "# ERR: SQLException in " << __FILE__;
|
||||
cout << "# ERR: " << e.what();
|
||||
cout << " (MySQL error code: " << e.getErrorCode();
|
||||
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
|
||||
}
|
||||
delete stmt;
|
||||
}
|
||||
|
||||
void MYSQLUpdateEventContent(sql::Connection *con)
|
||||
{
|
||||
sql::Statement *stmt;
|
||||
try {
|
||||
stmt = con->createStatement();
|
||||
stmt->executeUpdate("UPDATE `EventContent` SET `title`=\"" + EventContent[0] +"\",`Rewards`=\"" + EventContent[1]
|
||||
+ "\",`Leaders`=\"" + EventContent[2] + "\",`datum`=\"" + EventContent[3] + "\",`hours`=\"" + EventContent[4] + "\"");
|
||||
}catch (sql::SQLException &e) {
|
||||
cout << "# ERR: SQLException in " << __FILE__;
|
||||
cout << "# ERR: " << e.what();
|
||||
cout << " (MySQL error code: " << e.getErrorCode();
|
||||
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
|
||||
}
|
||||
delete stmt;
|
||||
}
|
||||
|
||||
bool CloseDBConnection(sql::Connection *con)
|
||||
{
|
||||
try
|
||||
{
|
||||
con->close();
|
||||
delete con;
|
||||
return true;
|
||||
}
|
||||
catch (sql::SQLException &e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
sql::mysql::MySQL_Driver *driver;
|
||||
sql::Connection *con;
|
||||
driver = sql::mysql::get_driver_instance();
|
||||
con = driver->connect("tcp://151.80.230.149:3306", "eventscss", "sdbhb2h34b2hbhbdfwbfwhber234");
|
||||
con->setSchema("eventscss");
|
||||
try {
|
||||
//Eventcount = SelectMysqlEventCount(con);
|
||||
ReadForumSubSectionEvent();
|
||||
MYSQLUpdateEventMaps(con);
|
||||
MYSQLUpdateEventContent(con);
|
||||
CloseDBConnection(con);
|
||||
}
|
||||
catch (sql::SQLException &e) {
|
||||
cout << "# ERR: SQLException in " << __FILE__;
|
||||
cout << "# ERR: " << e.what();
|
||||
cout << " (MySQL error code: " << e.getErrorCode();
|
||||
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
|
||||
}
|
||||
cout << "EventContent[0]: " << EventContent[0] << endl;
|
||||
cout << "EventContent[1]: " << EventContent[1] << endl;
|
||||
cout << "EventContent[2]: " << EventContent[2] << endl;
|
||||
cout << "EventContent[3]: " << EventContent[3] << endl;
|
||||
cout << "EventContent[4]: " << EventContent[4] << endl;
|
||||
return 0;
|
||||
}
|
296
EventNotifier/scripting/unloze_eventScheduler_redux_css.sp
Normal file
296
EventNotifier/scripting/unloze_eventScheduler_redux_css.sp
Normal file
@ -0,0 +1,296 @@
|
||||
#pragma semicolon 1
|
||||
#define DEBUG
|
||||
#define PLUGIN_AUTHOR "jenz"
|
||||
#define PLUGIN_VERSION "1.00"
|
||||
#define g_dIndex 65
|
||||
#define g_dLength 256
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <system2>
|
||||
#pragma newdecls required
|
||||
//64 maps in one event cuz ofc
|
||||
char g_cEventMaps[g_dIndex][g_dLength];
|
||||
char g_cEventContent[g_dLength][g_dLength];
|
||||
int g_iIndexCounter;
|
||||
Database g_dDatabase;
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "schedule announcer",
|
||||
author = PLUGIN_AUTHOR,
|
||||
description = "informs players when next event takes place",
|
||||
version = PLUGIN_VERSION,
|
||||
url = "www.unloze.com"
|
||||
};
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnPluginStart()
|
||||
{
|
||||
RegConsoleCmd("sm_event", Cmd_EventNotifier);
|
||||
RegConsoleCmd("sm_events", Cmd_EventNotifier);
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public Action Cmd_EventNotifier(int client, any args)
|
||||
{
|
||||
EventNotifierMenu(client);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnMapStart()
|
||||
{
|
||||
SQL_StartConnection();
|
||||
SQL_CreateDBIFNotExist();
|
||||
EventInfo();
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
static void EventNotifierMenu(int client)
|
||||
{
|
||||
Menu EventMenu = new Menu(MenuHandler1);
|
||||
char l_cEventTimeleft[g_dLength][1];
|
||||
EventMenu.SetTitle("UNLOZE Event Information");
|
||||
CalculateTimeToNextEvent(g_cEventContent[3], g_cEventContent[4], l_cEventTimeleft[0], sizeof(l_cEventTimeleft));
|
||||
// 0 event title
|
||||
EventMenu.AddItem("", g_cEventContent[0], ITEMDRAW_DISABLED);
|
||||
for (int i = 0; i < g_iIndexCounter; i++)
|
||||
{
|
||||
if (StrContains(g_cEventMaps[i], "Map:", false) == -1)
|
||||
{
|
||||
Format(g_cEventMaps[i], sizeof(g_cEventMaps), "Map: %s", g_cEventMaps[i]);
|
||||
}
|
||||
EventMenu.AddItem("", g_cEventMaps[i], ITEMDRAW_DISABLED);
|
||||
}
|
||||
// 1 rewards
|
||||
if (StrContains(g_cEventContent[1], "Rewards:", false) == -1)
|
||||
{
|
||||
TrimString(g_cEventContent[1]);
|
||||
Format(g_cEventContent[1], sizeof(g_cEventContent), "Rewards: %s", g_cEventContent[1]);
|
||||
}
|
||||
EventMenu.AddItem("", g_cEventContent[1], ITEMDRAW_DISABLED);
|
||||
// 2 leaders
|
||||
if (StrContains(g_cEventContent[2], "Leaders:", false) == -1)
|
||||
{
|
||||
Format(g_cEventContent[2], sizeof(g_cEventContent), "Leaders: %s", g_cEventContent[2]);
|
||||
}
|
||||
EventMenu.AddItem("", g_cEventContent[2], ITEMDRAW_DISABLED);
|
||||
// 3 timeleft
|
||||
if (StrContains(l_cEventTimeleft[0], "Timeleft:", false) == -1)
|
||||
{
|
||||
Format(l_cEventTimeleft[0], sizeof(l_cEventTimeleft), "Timeleft: %s", l_cEventTimeleft[0]);
|
||||
}
|
||||
EventMenu.AddItem("", l_cEventTimeleft[0], ITEMDRAW_DISABLED);
|
||||
EventMenu.ExitButton = true;
|
||||
EventMenu.ExitBackButton = true;
|
||||
EventMenu.Display(client, 0);
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public int MenuHandler1(Menu menu, MenuAction action, int param1, int param2)
|
||||
{
|
||||
if (action == MenuAction_End)
|
||||
{
|
||||
delete menu;
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void CalculateTimeToNextEvent(char[] content, char[] content1, char[]str, int maxsize)
|
||||
{
|
||||
//content = 24/11/2018
|
||||
//content1 = : 6
|
||||
char sPart[2][526];
|
||||
char sYear[24];
|
||||
char sMonth[24];
|
||||
char sDay[24];
|
||||
char sHour[24];
|
||||
char sMinute[24];
|
||||
int i_Year;
|
||||
int i_Month;
|
||||
int i_Day;
|
||||
int i_Hour;
|
||||
int i_Minute;
|
||||
int year;
|
||||
int months;
|
||||
int days;
|
||||
int l_hours;
|
||||
int minutes;
|
||||
FormatTime(sYear, sizeof(sYear), "%Y");
|
||||
FormatTime(sMonth, sizeof(sMonth), "%m");
|
||||
FormatTime(sDay, sizeof(sDay), "%d");
|
||||
FormatTime(sHour, sizeof(sHour), "%H");
|
||||
FormatTime(sMinute, sizeof(sMinute), "%M");
|
||||
TrimString(content);
|
||||
TrimString(content1);
|
||||
ExplodeString(content, "/", sPart, 2, maxsize);
|
||||
i_Day = StringToInt(sDay);
|
||||
days = StringToInt(sPart[0]);
|
||||
i_Month = StringToInt(sMonth);
|
||||
ExplodeString(sPart[1], "/", sPart, 2, maxsize);
|
||||
months = StringToInt(sPart[0]);
|
||||
i_Hour = StringToInt(sHour);
|
||||
l_hours = StringToInt(content1);
|
||||
char sPart1[3][526];
|
||||
ExplodeString(content, "/", sPart1, 3, maxsize);
|
||||
year = StringToInt(sPart1[2]);
|
||||
i_Year = StringToInt(sYear);
|
||||
i_Minute = StringToInt(sMinute);
|
||||
if (days >= i_Day || months > i_Month || year > i_Year)
|
||||
{
|
||||
if (i_Year <= year)
|
||||
{
|
||||
if (year > i_Year)
|
||||
{
|
||||
i_Month = 1;
|
||||
}
|
||||
if (days >= i_Day)
|
||||
{
|
||||
days -= i_Day;
|
||||
}
|
||||
else if (i_Month == 1 || i_Month == 3 || i_Month == 5 || i_Month == 7 || i_Month == 8 || i_Month == 10 || i_Month == 12)
|
||||
{
|
||||
days += (31 - i_Day);
|
||||
}
|
||||
else if (i_Month == 2)
|
||||
{
|
||||
days += (28 - i_Day);
|
||||
}
|
||||
else
|
||||
{
|
||||
days += (30 - i_Day);
|
||||
}
|
||||
//from 12 to 24 or from 7 to 19 etc etc
|
||||
l_hours += 12;
|
||||
if (i_Hour > l_hours)
|
||||
{
|
||||
days -= 1;
|
||||
l_hours = 24 - (i_Hour - l_hours);
|
||||
//PrintToChatAll("if statement l_hours: %i", l_hours);
|
||||
}
|
||||
else
|
||||
{
|
||||
l_hours -= i_Hour;
|
||||
//PrintToChatAll("else statement: l_hours: %i", l_hours);
|
||||
}
|
||||
if (l_hours != 0)
|
||||
{
|
||||
l_hours -= 1;
|
||||
}
|
||||
minutes = 60 - i_Minute;
|
||||
Format(str, maxsize, "Taking Place in: %i Days, %i hours, %i Minutes", days, l_hours, minutes);
|
||||
}
|
||||
else
|
||||
{
|
||||
Format(str, maxsize, "EVENT OVER");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Format(str, maxsize, "EVENT OVER");
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void EventInfo()
|
||||
{
|
||||
MYSQLGetEventContent();
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void MYSQLGetEventContent()
|
||||
{
|
||||
MYSQLGetContent();
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void MYSQLGetContent()
|
||||
{
|
||||
char sQuery[g_dLength];
|
||||
Format(sQuery, sizeof(sQuery), "SELECT * FROM `EventContent`");
|
||||
SQL_TQuery(g_dDatabase, TqueryThreadCallback, sQuery);
|
||||
Format(sQuery, sizeof(sQuery), "SELECT * FROM `Maps`");
|
||||
SQL_TQuery(g_dDatabase, TqueryThreadCallbackmaps, sQuery);
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void TqueryThreadCallback(Handle db, Handle rs, const char[] error, any data)
|
||||
{
|
||||
if (SQL_GetRowCount(rs) > 0 && SQL_FetchRow(rs))
|
||||
{
|
||||
// 0 event title
|
||||
SQL_FetchString(rs, 0, g_cEventContent[0], sizeof(g_cEventContent));
|
||||
// 1 rewards
|
||||
SQL_FetchString(rs, 1, g_cEventContent[1], sizeof(g_cEventContent));
|
||||
// 2 leaders
|
||||
SQL_FetchString(rs, 2, g_cEventContent[2], sizeof(g_cEventContent));
|
||||
// 3 timeleft (24/11/2018)
|
||||
SQL_FetchString(rs, 3, g_cEventContent[3], sizeof(g_cEventContent));
|
||||
//4 timeleft = : 5 pm GMT+0 // 6 pm GMT+1 // 7 pm GMT+2
|
||||
SQL_FetchString(rs, 4, g_cEventContent[4], sizeof(g_cEventContent));
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void TqueryThreadCallbackmaps(Handle owner, Handle rs, const char[] error, any data)
|
||||
{
|
||||
g_iIndexCounter = 0;
|
||||
if (SQL_GetRowCount(rs) > 0 && SQL_FetchRow(rs))
|
||||
{
|
||||
g_iIndexCounter++;
|
||||
int index;
|
||||
SQL_FetchString(rs, 0, g_cEventMaps[index], sizeof(g_cEventMaps));
|
||||
index++;
|
||||
while (SQL_FetchRow(rs))
|
||||
{
|
||||
SQL_FetchString(rs, 0, g_cEventMaps[index], sizeof(g_cEventMaps));
|
||||
index++;
|
||||
g_iIndexCounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void SQL_StartConnection()
|
||||
{
|
||||
char error[g_dLength];
|
||||
if (SQL_CheckConfig("eventscss"))
|
||||
g_dDatabase = SQL_Connect("eventscss", true, error, sizeof(error));
|
||||
if (g_dDatabase == null)
|
||||
{
|
||||
PrintToChatAll("{green}[UNLOZE] {white}Error! Could not connect to MYSQL-DB!");
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void SQL_CreateDBIFNotExist()
|
||||
{
|
||||
char sQuery[g_dLength];
|
||||
Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `eventscss`.`EventContent` (`title` VARCHAR(256) NOT NULL, `Rewards` VARCHAR(256) NULL, `Leaders` VARCHAR(256) NULL, `datum` VARCHAR(128) NULL, `hours` VARCHAR(128) NULL, PRIMARY KEY (`title`)) ENGINE = InnoDB;");
|
||||
SQL_FastQuery(g_dDatabase, sQuery);
|
||||
Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `eventscss`.`Maps` (`MapNames` VARCHAR(45) NOT NULL, PRIMARY KEY (`MapNames`)) ENGINE = InnoDB;");
|
||||
SQL_FastQuery(g_dDatabase, sQuery);
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
stock bool IsValidClient(int client)
|
||||
{
|
||||
if (client > 0 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
Loading…
Reference in New Issue
Block a user