Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.ComponentModel;
- using System.Data;
- using System.IO;
- using TShockAPI;
- using TShockAPI.DB;
- using Terraria;
- using Hooks;
- using Mono.Data.Sqlite;
- using MySql.Data.MySqlClient;
- using Newtonsoft.Json;
- using Vault;
- namespace Lottery
- {
- [APIVersion(1, 12)]
- public class Lottery : TerrariaPlugin
- {
- public IDbConnection Database;
- public String SavePath = Path.Combine(TShock.SavePath, "Lottery/");
- internal static Config config;
- public override string Name
- {
- get { return "Lottery"; }
- }
- public override string Author
- {
- get { return "by InanZen"; }
- }
- public override string Description
- {
- get { return ""; }
- }
- public override Version Version
- {
- get { return new Version("0.1"); }
- }
- public Lottery(Main game)
- : base(game)
- {
- Order = 1;
- }
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- // NetHooks.GetData -= OnGetData;
- // NetHooks.SendData -= OnSendData;
- GameHooks.Initialize -= OnInitialize;
- // ServerHooks.Leave -= OnLeave;
- // ServerHooks.Join -= OnJoin;
- Database.Dispose();
- }
- }
- public override void Initialize()
- {
- // NetHooks.GetData += OnGetData;
- // NetHooks.SendData += OnSendData;
- GameHooks.Initialize += OnInitialize;
- // ServerHooks.Leave += OnLeave;
- // ServerHooks.Join += OnJoin;
- }
- void OnInitialize()
- {
- config = new Config();
- if (!Directory.Exists(SavePath))
- Directory.CreateDirectory(SavePath);
- ReadConfig();
- switch (TShock.Config.StorageType.ToLower())
- {
- case "mysql":
- string[] host = TShock.Config.MySqlHost.Split(':');
- Database = new MySqlConnection()
- {
- ConnectionString = string.Format("Server={0}; Port={1}; Database={2}; Uid={3}; Pwd={4};",
- host[0],
- host.Length == 1 ? "3306" : host[1],
- TShock.Config.MySqlDbName,
- TShock.Config.MySqlUsername,
- TShock.Config.MySqlPassword)
- };
- break;
- case "sqlite":
- string sql = Path.Combine(SavePath, "lottery.sqlite");
- Database = new SqliteConnection(string.Format("uri=file://{0},Version=3", sql));
- break;
- }
- SqlTableCreator sqlcreator = new SqlTableCreator(Database, Database.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder)new SqliteQueryCreator() : new MysqlQueryCreator());
- sqlcreator.EnsureExists(new SqlTable("LotteryPlayers",
- new SqlColumn("username", MySqlDbType.VarChar) { Length = 30 },
- new SqlColumn("amount", MySqlDbType.Int32)
- ));
- sqlcreator.EnsureExists(new SqlTable("LotteryWinners",
- new SqlColumn("id", MySqlDbType.Int32) { Primary = true, AutoIncrement = true },
- new SqlColumn("username", MySqlDbType.VarChar) { Length = 30 },
- new SqlColumn("amount", MySqlDbType.Int32),
- new SqlColumn("date", MySqlDbType.Text)
- ));
- Commands.ChatCommands.Add(new Command("lottery", LotteryCommand, "loto","lottery")); ;
- }
- void LotteryCommand(CommandArgs args)
- {
- if (args.Parameters.Count > 0)
- {
- switch (args.Parameters[0])
- {
- case "pot":
- {
- var reader = Database.QueryReader("SELECT SUM(amount) AS total FROM LotteryPlayers");
- int total = 0;
- if (reader.Read())
- {
- total = reader.Get<int>("total");
- }
- reader.Dispose();
- args.Player.SendMessage(String.Format("There is {0} in the pot.",Vault.Vault.MoneyToString(total)),Color.DarkGreen);
- return;
- }
- case "pay":
- {
- int amount = 0;
- if (args.Parameters.Count > 1 && int.TryParse(args.Parameters[1], out amount) && amount > 0)
- {
- if (Vault.Vault.ModifyBalance(args.Player.Name, -amount, false))
- {
- int total = 0;
- var reader = Database.QueryReader("SELECT amount FROM LotteryPlayers WHERE username = @0", args.Player.Name);
- if (reader.Read())
- total = reader.Get<int>("amount");
- reader.Dispose();
- if (total == 0)
- Database.Query("INSERT INTO LotteryPlayers(username, amount) VALUES(@0,@1)", args.Player.Name, amount);
- else
- Database.Query("UPDATE LotteryPlayers SET amount = @0 WHERE username = @1", total + amount, args.Player.Name);
- args.Player.SendMessage(String.Format("Success: You have now {0} in play this draw.", Vault.Vault.MoneyToString(total + amount)), Color.DarkGreen);
- }
- else
- args.Player.SendMessage("Error: Could not deduce the amount from your balance. Check your balance with /balance", Color.DarkOrange);
- }
- else
- args.Player.SendMessage("Syntax: /loto pay amount (amount must be valid, non-negative number)", Color.DarkOrange);
- return;
- }
- case "status":
- {
- int total = 0;
- var reader = Database.QueryReader("SELECT amount FROM LotteryPlayers WHERE username = @0", args.Player.Name);
- if (reader.Read())
- total = reader.Get<int>("amount");
- reader.Dispose();
- args.Player.SendMessage(String.Format("You have {0} in play this draw.", Vault.Vault.MoneyToString(total)), Color.DarkGreen);
- return;
- }
- case "winner":
- {
- var reader = Database.QueryReader("SELECT * FROM LotteryWinners SORT BY id DESC LIMIT 1", args.Player.Name);
- if (reader.Read())
- {
- args.Player.SendMessage(String.Format("Latest winner is {0} who won {1} on {2}", reader.Get<string>("username"), Vault.Vault.MoneyToString(reader.Get<int>("amount")), JsonConvert.DeserializeObject<DateTime>(reader.Get<string>("date")).ToString()), Color.DarkGreen);
- }
- else
- args.Player.SendMessage("There are no records of any winners at this moment.", Color.DarkOrange);
- reader.Dispose();
- return;
- }
- }
- }
- args.Player.SendMessage("Lottery commands: (/lottery /loto)", Color.DarkOrange);
- args.Player.SendMessage("/loto pay amount - the more you pay in, the higher chances of win ;)", Color.DarkGreen);
- args.Player.SendMessage("/loto pot - see the current amount of money in the draw", Color.DarkGreen);
- args.Player.SendMessage("/loto status - check how much you have invested in current draw", Color.DarkGreen);
- args.Player.SendMessage("/loto winner - check who won last draw", Color.DarkGreen);
- }
- internal class Config
- {
- }
- private void CreateConfig()
- {
- string filepath = Path.Combine(SavePath, "config.json");
- try
- {
- using (var stream = new FileStream(filepath, FileMode.Create, FileAccess.Write, FileShare.Write))
- {
- using (var sr = new StreamWriter(stream))
- {
- config = new Config();
- var configString = JsonConvert.SerializeObject(config, Formatting.Indented);
- sr.Write(configString);
- }
- stream.Close();
- }
- }
- catch (Exception ex)
- {
- Log.ConsoleError(ex.Message);
- config = new Config();
- }
- }
- private bool ReadConfig()
- {
- string filepath = Path.Combine(SavePath, "config.json");
- try
- {
- if (File.Exists(filepath))
- {
- using (var stream = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- using (var sr = new StreamReader(stream))
- {
- var configString = sr.ReadToEnd();
- config = JsonConvert.DeserializeObject<Config>(configString);
- }
- stream.Close();
- }
- return true;
- }
- else
- {
- Log.ConsoleError("Config not found. Creating new one");
- CreateConfig();
- return false;
- }
- }
- catch (Exception ex)
- {
- Log.ConsoleError(ex.Message);
- }
- return false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment