From 8159898bbd381a7adb9d0f0a9e69335e1d24581c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 8 Jul 2015 23:52:55 +0200 Subject: [PATCH 001/124] init --- amxbans_core.sma | 790 +++++ services/sklepsms_usluga_bf2_odznaki.amxx | Bin 0 -> 3215 bytes services/sklepsms_usluga_bf2_odznaki.sma | 139 + services/sklepsms_usluga_cod_exp.amxx | Bin 0 -> 2872 bytes services/sklepsms_usluga_cod_exp.sma | 45 + services/sklepsms_usluga_cod_exp2.amxx | Bin 0 -> 1351 bytes services/sklepsms_usluga_cod_exp2.sma | 40 + services/sklepsms_usluga_cod_te.amxx | Bin 0 -> 5615 bytes services/sklepsms_usluga_cod_te.sma | 195 ++ services/sklepsms_usluga_dodatkowe_flagi.amxx | Bin 0 -> 799 bytes services/sklepsms_usluga_dodatkowe_flagi.sma | 27 + services/sklepsms_usluga_gxm_bm.amxx | Bin 0 -> 1124 bytes services/sklepsms_usluga_gxm_bm.sma | 34 + services/sklepsms_usluga_gxm_exp.amxx | Bin 0 -> 1128 bytes services/sklepsms_usluga_gxm_exp.sma | 34 + .../sklepsms_usluga_rezerwacja_nicku.amxx | Bin 0 -> 710 bytes services/sklepsms_usluga_rezerwacja_nicku.sma | 19 + .../sklepsms_usluga_rezerwacja_slota.amxx | Bin 0 -> 814 bytes services/sklepsms_usluga_rezerwacja_slota.sma | 27 + services/sklepsms_usluga_vip.amxx | Bin 0 -> 798 bytes services/sklepsms_usluga_vip.sma | 27 + services/sklepsms_usluga_vippro.amxx | Bin 0 -> 804 bytes services/sklepsms_usluga_vippro.sma | 27 + services/sklepsms_usluga_zp_ap.amxx | Bin 0 -> 1127 bytes services/sklepsms_usluga_zp_ap.sma | 34 + sklep_sms.sma | 2756 +++++++++++++++++ 26 files changed, 4194 insertions(+) create mode 100644 amxbans_core.sma create mode 100644 services/sklepsms_usluga_bf2_odznaki.amxx create mode 100644 services/sklepsms_usluga_bf2_odznaki.sma create mode 100644 services/sklepsms_usluga_cod_exp.amxx create mode 100644 services/sklepsms_usluga_cod_exp.sma create mode 100644 services/sklepsms_usluga_cod_exp2.amxx create mode 100644 services/sklepsms_usluga_cod_exp2.sma create mode 100644 services/sklepsms_usluga_cod_te.amxx create mode 100644 services/sklepsms_usluga_cod_te.sma create mode 100644 services/sklepsms_usluga_dodatkowe_flagi.amxx create mode 100644 services/sklepsms_usluga_dodatkowe_flagi.sma create mode 100644 services/sklepsms_usluga_gxm_bm.amxx create mode 100644 services/sklepsms_usluga_gxm_bm.sma create mode 100644 services/sklepsms_usluga_gxm_exp.amxx create mode 100644 services/sklepsms_usluga_gxm_exp.sma create mode 100644 services/sklepsms_usluga_rezerwacja_nicku.amxx create mode 100644 services/sklepsms_usluga_rezerwacja_nicku.sma create mode 100644 services/sklepsms_usluga_rezerwacja_slota.amxx create mode 100644 services/sklepsms_usluga_rezerwacja_slota.sma create mode 100644 services/sklepsms_usluga_vip.amxx create mode 100644 services/sklepsms_usluga_vip.sma create mode 100644 services/sklepsms_usluga_vippro.amxx create mode 100644 services/sklepsms_usluga_vippro.sma create mode 100644 services/sklepsms_usluga_zp_ap.amxx create mode 100644 services/sklepsms_usluga_zp_ap.sma create mode 100644 sklep_sms.sma diff --git a/amxbans_core.sma b/amxbans_core.sma new file mode 100644 index 0000000..1597953 --- /dev/null +++ b/amxbans_core.sma @@ -0,0 +1,790 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * + * AMX Bans - http://www.amxbans.net + * Plugin - Core + * + * Copyright (C) 2014 Ryan "YamiKaitou" LeBlanc + * Copyright (C) 2009, 2010 Thomas Kurz + * Forked from "Admin Base (SQL)" in AMX Mod X (version 1.8.1) + * + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of this program with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#define PLUGINNAME "AMXBans Core" +#define PLUGINAUTHOR "YamiKaitou edited by SeeK" +new const PLUGINVERSION[] = "2.0"; + +#include +#include +#include + +new AdminCount; + +#define ADMIN_LOOKUP (1<<0) +#define ADMIN_NORMAL (1<<1) +#define ADMIN_STEAM (1<<2) +#define ADMIN_IPADDR (1<<3) +#define ADMIN_NAME (1<<4) + +new g_cmdLoopback[16] +new bool:g_CaseSensitiveName[33]; + +// pcvars +new amx_mode; +new amx_password_field; +new amx_default_access; + +//amxbans +new pcvarip +new pcvarprefix +new pcvaradminsfile +new g_ServerAddr[100] +new g_dbPrefix[32] +new g_AdminsFromFile +new g_szAdminNick[33][32] +new g_iAdminUseStaticBantime[33] +new Array:g_AdminNick +new Array:g_AdminUseStaticBantime + +//multi forward handles +new bool:g_isAdmin[33] +enum MFHANDLE_TYPES { + Amxbans_Sql_Initialized=0, + Admin_Connect, + Admin_Disconnect +} +new MFHandle[MFHANDLE_TYPES] + +new Handle:info + +public plugin_init() +{ + register_plugin(PLUGINNAME, PLUGINVERSION, PLUGINAUTHOR); + + register_dictionary("admin.txt") + register_dictionary("common.txt") + amx_mode=register_cvar("amx_mode", "1") + amx_password_field=register_cvar("amx_password_field", "_pw") + amx_default_access=register_cvar("amx_default_access", "") + + register_cvar("amx_vote_ratio", "0.02") + register_cvar("amx_vote_time", "10") + register_cvar("amx_vote_answers", "1") + register_cvar("amx_vote_delay", "60") + register_cvar("amx_last_voting", "0") + register_cvar("amx_show_activity", "2") + register_cvar("amx_votekick_ratio", "0.40") + register_cvar("amx_voteban_ratio", "0.40") + register_cvar("amx_votemap_ratio", "0.40") + + set_cvar_float("amx_last_voting", 0.0) + + + register_srvcmd("amx_sqladmins", "adminSql") + register_cvar("amx_sql_table", "admins") +// amxbans + pcvarip=register_cvar("amxbans_server_address","") + pcvarprefix=register_cvar("amx_sql_prefix", "amx") + pcvaradminsfile=register_cvar("amxbans_use_admins_file","0") + + g_AdminNick=ArrayCreate(32,32) + g_AdminUseStaticBantime=ArrayCreate(1,32) +// + register_cvar("amx_sql_host", "127.0.0.1") + register_cvar("amx_sql_user", "root") + register_cvar("amx_sql_pass", "") + register_cvar("amx_sql_db", "amx") + register_cvar("amx_sql_type", "mysql") + + register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG) + //register_concmd("amx_addadmin", "addadminfn", ADMIN_RCON, " [password] [authtype] - add specified player as an admin to users.ini") + + format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z')) + + register_clcmd(g_cmdLoopback, "ackSignal") + + remove_user_flags(0, read_flags("z")) // Remove 'user' flag from server rights + + new configsDir[64] + get_configsdir(configsDir, 63) + + server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file + server_cmd("exec %s/sql.cfg", configsDir) + //server_cmd("exec %s/amxbans.cfg", configsDir) + +} + +public client_connect(id) +{ + g_CaseSensitiveName[id] = false; +} + +public plugin_cfg() +{ + //fixx to be sure cfgs are loaded + create_forwards() + set_task(0.1,"delayed_plugin_cfg") +} + +create_forwards() +{ + MFHandle[Amxbans_Sql_Initialized]=CreateMultiForward("amxbans_sql_initialized",ET_IGNORE,FP_CELL,FP_STRING) + MFHandle[Admin_Connect]=CreateMultiForward("amxbans_admin_connect",ET_IGNORE,FP_CELL) + MFHandle[Admin_Disconnect]=CreateMultiForward("amxbans_admin_disconnect",ET_IGNORE,FP_CELL) +} + +public delayed_plugin_cfg() +{ + //check if amxbans plugins are the first plugins and default admin plugins are disabled + //added for admins who cant read the docs + if(find_plugin_byfile("admin.amxx") != INVALID_PLUGIN_ID) + { + log_amx("[AMXBans] WARNING: admin.amxx plugin running! stopped.") + pause("acd","admin.amxx") + } + if(find_plugin_byfile("admin_sql.amxx") != INVALID_PLUGIN_ID) + { + log_amx("[AMXBans] WARNING: admin_sql.amxx plugin running! stopped.") + pause("acd","admin_sql.amxx") + } + //if(find_plugin_byfile("amxbans_core.amxx") != 0) log_amx("[AMXBans] WARNING: amxbans_core.amxx should be the fist entry in your plugins.ini!") + //if(find_plugin_byfile("amxbans_main.amxx") != 1) log_amx("[AMXBans] WARNING: amxbans_main.amxx should be the second entry in your plugins.ini!") + + get_pcvar_string(pcvarprefix,g_dbPrefix,charsmax(g_dbPrefix)) + get_pcvar_string(pcvarip,g_ServerAddr,charsmax(g_ServerAddr)) + g_AdminsFromFile=get_pcvar_num(pcvaradminsfile) + + if(strlen(g_ServerAddr) < 9) + { + new ip[32] + get_user_ip(0,ip,charsmax(ip)) + formatex(g_ServerAddr,charsmax(g_ServerAddr),"%s",ip) + } + if(get_cvar_num("amxbans_debug") >= 1) server_print("[AMXBans] plugin_cfg: ip %s / prefix %s",g_ServerAddr,g_dbPrefix) + + server_cmd("amx_sqladmins") + server_exec(); + + set_task(6.1, "delayed_load") +} + +public delayed_load() +{ + new configFile[128], curMap[64], configDir[128] + + get_configsdir(configDir, charsmax(configDir)) + get_mapname(curMap, charsmax(curMap)) + + new i=0; + + while (curMap[i] != '_' && curMap[i++] != '^0') {} + + if (curMap[i]=='_') + { + // this map has a prefix + curMap[i]='^0'; + formatex(configFile, charsmax(configFile), "%s/maps/prefix_%s.cfg", configDir, curMap); + + if (file_exists(configFile)) + { + server_cmd("exec %s", configFile); + } + } + + get_mapname(curMap, charsmax(curMap)) + + formatex(configFile, charsmax(configFile), "%s/maps/%s.cfg", configDir, curMap) + + if (file_exists(configFile)) + { + server_cmd("exec %s", configFile) + } +} + +loadSettings(szFilename[]) +{ + new File=fopen(szFilename,"r"); + + if (File) + { + new Text[512]; + new Flags[33]; + new Access[33] + new AuthData[44]; + new Password[33]; + new Name[34]; + new Static[2]; + + while (!feof(File)) + { + fgets(File,Text,charsmax(Text)); + + trim(Text); + + // comment + if (Text[0]==';') + { + continue; + } + + Flags[0]=0; + Access[0]=0; + AuthData[0]=0; + Password[0]=0; + Name[0] = 0; + Static[0] = 0; + + // not enough parameters + if (parse(Text, AuthData, charsmax(AuthData), Password, charsmax(Password), Access, charsmax(Access), Flags, charsmax(Flags), Name, charsmax(Name), Static, sizeof Static) < 2) + { + continue; + } + + admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); + ArrayPushString(g_AdminNick, Name); + ArrayPushCell(g_AdminUseStaticBantime, str_to_num(Static)); + + AdminCount++; + } + + fclose(File); + } + + if (AdminCount == 1) + { + server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMIN"); + } + else + { + server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount); + } + + return 1; +} + +public adminSql() +{ + new table[32], error[128], errno + AdminCount = 0; + admins_flush(); + + SQL_SetAffinity("mysql") + info = SQL_MakeStdTuple() + new Handle:sql = SQL_Connect(info, errno, error, 127) + + get_cvar_string("amx_sql_table", table, 31) + + //sql error or amxbans_use_admins_file == 1 + if (sql == Empty_Handle || g_AdminsFromFile > 0) + { + if(!g_AdminsFromFile) server_print("[AMXBans] %L", LANG_SERVER, "SQL_CANT_CON", error) + + //backup to users.ini + new configsDir[64] + + get_configsdir(configsDir, charsmax(configsDir)) + format(configsDir, charsmax(configsDir), "%s/users.ini", configsDir) + loadSettings(configsDir) // Load admins accounts + + new players[32], num, pv + new name[33] + get_players(players, num) + for (new i=0; i 1) + { + if (sql != Empty_Handle) + { + //Fix by EpicMorg: + SQL_FreeHandle(sql) + server_print("[amxbans_core.amxx] [AMXBans] SQL Connection closed.") + } + return PLUGIN_HANDLED + } + + ArrayClear(g_AdminNick) + ArrayClear(g_AdminUseStaticBantime) + + new Handle:query + +//amxbans + new pquery[1024] + + formatex(pquery,1023,"SELECT aa.steamid,aa.password,aa.access,aa.flags,aa.nickname,ads.custom_flags,ads.use_static_bantime \ + FROM %s_amxadmins as aa, %s_admins_servers as ads, %s_serverinfo as si \ + WHERE ((ads.admin_id=aa.id) AND (ads.server_id=si.id) AND \ + ((aa.days=0) OR (aa.expired>UNIX_TIMESTAMP(NOW()))) AND (si.address='%s'))", g_dbPrefix, g_dbPrefix, g_dbPrefix, g_ServerAddr) + + query = SQL_PrepareQuery(sql,pquery) + + SQL_Execute(query) +// + + if(SQL_NumRows(query)) + { + /* do this incase people change the query order and forget to modify below */ + new qcolAuth = SQL_FieldNameToNum(query, "steamid") + new qcolPass = SQL_FieldNameToNum(query, "password") + new qcolAccess = SQL_FieldNameToNum(query, "access") + new qcolFlags = SQL_FieldNameToNum(query, "flags") + new qcolNick = SQL_FieldNameToNum(query, "nickname") + new qcolCustom = SQL_FieldNameToNum(query, "custom_flags") + new qcolStatic = SQL_FieldNameToNum(query, "use_static_bantime") + + + new AuthData[44]; + new Password[44]; + new Access[33]; + new Flags[33]; + new Nick[33]; + new Static[5] + new iStatic + + while (SQL_MoreResults(query)) + { + SQL_ReadResult(query, qcolAuth, AuthData, charsmax(AuthData)); + SQL_ReadResult(query, qcolPass, Password, charsmax(Password)); + SQL_ReadResult(query, qcolStatic, Static, charsmax(Static)); + SQL_ReadResult(query, qcolCustom, Access, charsmax(Access)); + SQL_ReadResult(query, qcolNick, Nick, charsmax(Nick)); + SQL_ReadResult(query, qcolFlags, Flags, charsmax(Flags)); + + //if custom access not set get the global + trim(Access) + if(equal(Access,"")) SQL_ReadResult(query, qcolAccess, Access, charsmax(Access)); + + admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); + + //save nick + ArrayPushString(g_AdminNick,Nick) + + //save static bantime + iStatic=1 + if(equal(Static,"no")) iStatic=0 + ArrayPushCell(g_AdminUseStaticBantime,iStatic) + + ++AdminCount; + SQL_NextRow(query) + } + } + + if (AdminCount == 1) + { + server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMIN") + } + else + { + server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount) + } + + SQL_FreeHandle(query) + SQL_FreeHandle(sql) + + new players[32], num, pv + new name[33] + get_players(players, num) + for (new i=0; i<%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", + name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) + } + else + { + new password3[33], md5_password[34], md5_password2[34]; + admins_lookup(index,AdminProp_Password,password3,charsmax(password3)); + + md5(password,md5_password); + md5(password2,md5_password2); + + //log_amx("%s %s %s %s %s",password,md5_password,password2,md5_password2,password3); + if ( equal(password, password3) || equal(md5_password, password3) || equal(password2, password3) || equal(md5_password2, password3) ) + { + result |= 12 + set_user_flags(id, Access) + + new sflags[32] + get_flags(Access, sflags, 31) + + new ret + if(!g_isAdmin[id]) ExecuteForward(MFHandle[Admin_Connect],ret,id) + g_isAdmin[id] = true + + log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", + name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) + } + else + { + result |= 1 + + if (Flags & FLAG_KICK) + { + result |= 2 + g_isAdmin[id] = false + log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", + name, get_user_userid(id), authid, AuthData, ip) + } + } + } + } + else if (get_pcvar_num(amx_mode) == 2) + { + result |= 2 + } + else + { + new defaccess[32] + + get_pcvar_string(amx_default_access, defaccess, 31) + + if (!strlen(defaccess)) + { + copy(defaccess, 32, "z") + } + + new idefaccess = read_flags(defaccess) + + if (idefaccess) + { + result |= 8 + set_user_flags(id, idefaccess) + } + } + + return result; +} + +accessUser(id, name[] = "") +{ + remove_user_flags(id) + + new userip[32], userauthid[32], password[32], password2[33], passfield[32], username[32] + + get_user_ip(id, userip, 31, 1) + get_user_authid(id, userauthid, 31) + + if (name[0]) + { + copy(username, 31, name) + } + else + { + get_user_name(id, username, 31) + } + + get_pcvar_string(amx_password_field, passfield, 31) + get_user_info(id, passfield, password, 31) + get_user_info(id, "_ss", password2, charsmax(password2)) + + new result = getAccess(id, username, userauthid, userip, password, password2) + + if (result & 1) + { + client_cmd(id, "echo ^"* %L^"", id, "INV_PAS") + } + + if (result & 2) + { + client_cmd(id, "%s", g_cmdLoopback) + return PLUGIN_HANDLED + } + + if (result & 4) + { + client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC") + } + + if (result & 8) + { + client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET") + } + + return PLUGIN_CONTINUE +} + +public client_infochanged(id) +{ + if (!is_user_connected(id) || !get_pcvar_num(amx_mode)) + { + return PLUGIN_CONTINUE + } + + new newname[32], oldname[32] + + get_user_name(id, oldname, 31) + get_user_info(id, "name", newname, 31) + + if (g_CaseSensitiveName[id]) + { + if (!equal(newname, oldname)) + { + accessUser(id, newname) + } + } + else + { + if (!equali(newname, oldname)) + { + accessUser(id, newname) + } + } + return PLUGIN_CONTINUE +} + +public client_disconnect(id) +{ + if(g_isAdmin[id]) + { + new ret + ExecuteForward(MFHandle[Admin_Disconnect],ret,id) + } + g_isAdmin[id]=false +} + +public ackSignal(id) +{ + server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY") + return PLUGIN_HANDLED +} + +public client_authorized(id) + return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE + +public client_putinserver(id) +{ + if (!is_dedicated_server() && id == 1) + return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE + + return PLUGIN_CONTINUE +} + +//natives +public plugin_natives() +{ + register_library("AMXBansCore") + + register_native("amxbans_get_db_prefix","native_amxbans_get_prefix") + register_native("amxbans_get_admin_nick","native_amxbans_get_nick") + register_native("amxbans_get_static_bantime","native_amxbans_static_bantime") +} + +public native_amxbans_get_prefix() +{ + new len= get_param(2) + set_array(1,g_dbPrefix,len) +} + +public native_amxbans_get_nick() +{ + + new id = get_param(1) + new len= get_param(3) + + set_array(2,g_szAdminNick[id],len) +} + +public native_amxbans_static_bantime() +{ + new id = get_param(1) + if(get_cvar_num("amxbans_debug") >= 3) log_amx("[AMXBans Core] Native static bantime: id: %d | result: %d",id,g_iAdminUseStaticBantime[id]) + return g_iAdminUseStaticBantime[id] +} diff --git a/services/sklepsms_usluga_bf2_odznaki.amxx b/services/sklepsms_usluga_bf2_odznaki.amxx new file mode 100644 index 0000000000000000000000000000000000000000..a96292b59949e2c7f65d1facfd2a82055f4fd9ff GIT binary patch literal 3215 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 Bgd+d| literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_bf2_odznaki.sma b/services/sklepsms_usluga_bf2_odznaki.sma new file mode 100644 index 0000000..cd12fa3 --- /dev/null +++ b/services/sklepsms_usluga_bf2_odznaki.sma @@ -0,0 +1,139 @@ +#include +#include + +native bf2_get_maxbadges(); +native bf2_get_badge_name(badge_id, badge_level, name[], len); +native bf2_get_user_badge(index, badge_id); +native bf2_set_user_badge(index, badge_id, level); + +new const service_id[MAX_ID] = "bf2_badge"; +#define PLUGIN "Sklep-SMS: Usluga BF2 Odznaki" +#define AUTHOR "SeeK" + +#define TASK_MENU1 1000 + +new stronaP[33], bool:wybranoP[33] +new dane[33] + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_chosen(id,amount) { + new menu = menu_create("Wybierz odznake:","menuHandler") + new menu_callback = menu_makecallback("menuCallback"); + new nazwa[64] + for(new i = 0; i < bf2_get_maxbadges(); ++i) { + bf2_get_badge_name(i,amount,nazwa,charsmax(nazwa)) + new data[2] + data[0] = i+1 + data[1] = bf2_get_user_badge(id,i) >= amount ? 0 : 1 + + menu_additem(menu,nazwa,data,0,menu_callback) + } + + menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); + menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); + + //Zerujemy + wybranoP[id] = false + stronaP[id] = 0 + + // Dane dla taska + new data[2] + data[0] = id + data[1] = menu + + // Wyswietlamy + wyswietlMenu(data) + + return SS_STOP +} + +public menuCallback(id, menu, item) { + new data[3], iName[2]; + new zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data,charsmax(data), iName, charsmax(iName), callback); + + return data[1] ? ITEM_ENABLED : ITEM_DISABLED + //return ITEM_ENABLED +} + +public wyswietlMenu(data[]) { + new id = data[0] + if(!is_user_connected(id)) { + menu_destroy(data[1]) + return + } + if(!wybranoP[id]) { + new menu, newmenu, page + player_menu_info(id, menu, newmenu, page) + if(newmenu != data[1]) + menu_display(id,data[1],stronaP[id]) + else + stronaP[id] = page + + set_task(0.1,"wyswietlMenu",TASK_MENU1+id, data, 2) + } +} + +public menuHandler(id, menu, item) { + if(item == MENU_EXIT) { + // Niszczymy menu + wybranoP[id] = true + menu_destroy(menu) + return + } + + if(item >= 0) { + // Wybrano odznake + wybranoP[id] = true + + new data[2], iName[2]; + new zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data,charsmax(data), iName, charsmax(iName), callback); + + dane[id] = data[0]-1 + + // Niszczymy menu + menu_destroy(menu) + + ss_show_sms_info(id) + } +} + +public ss_service_bought(id,amount) { + new badge_id = dane[id]; + new badge_level = amount; + + if( bf2_set_user_badge(id,badge_id,badge_level) == -1 ) + return SS_ERROR; + + new szText[512]; + bf2_get_badge_name(badge_id,badge_level,szText,sizeof szText); + format(szText,sizeof szText,"


\ +

Kupiles/as odznake: %s

\ + W razie problemow skontaktuj sie z nami.\ +

",szText); + show_motd(id,szText,"Informacje dotyczace uslugi"); + + return SS_OK; +} + +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/services/sklepsms_usluga_cod_exp.amxx b/services/sklepsms_usluga_cod_exp.amxx new file mode 100644 index 0000000000000000000000000000000000000000..1e3b4ddb90848365de6be1ff71fe680c79613ec4 GIT binary patch literal 2872 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 literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_cod_exp.sma b/services/sklepsms_usluga_cod_exp.sma new file mode 100644 index 0000000..971fc4a --- /dev/null +++ b/services/sklepsms_usluga_cod_exp.sma @@ -0,0 +1,45 @@ +#include +#include +#include +native cod_get_user_class(id); +native cod_get_user_xp(id); +native cod_set_user_xp(id, wartosc); + +new const service_id[MAX_ID] = "cod_exp"; +#define PLUGIN "Sklep-SMS: Usluga COD EXP" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_chosen(id) { + if( !cod_get_user_class(id) ) { + client_print_color(id,Red,"^4[%s] ^1Musisz ^3wybrac klase^1, aby moc zakupic EXP.",PREFIX); + return SS_STOP; + } + + return SS_OK; +} + +public ss_service_bought(id,amount) { + cod_set_user_xp(id,cod_get_user_xp(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/services/sklepsms_usluga_cod_exp2.amxx b/services/sklepsms_usluga_cod_exp2.amxx new file mode 100644 index 0000000000000000000000000000000000000000..307e85b98144489b8e41f9ec236b728c7641d0ff GIT binary patch literal 1351 zcmV-N1-SZHSWQ6y0|5jt1polp4FCYtNB{sB0001ZoXu80Y}`~Be|MLLJ9E$q3RD6K zLkkGei+qo{p z-?%ObA$p*1K;JTb585pX@dI!hHa`J3fxiIffxiOBApf0gf#cxOb&l~om@Q0p*QHdzG<&?)zJ0bM2$1uSj4dz%V^EDrD-{i z>vxmDbK@k>?*xNxFA-gtn3=H%twAhB495PDk?g`&MoJG(_E_vq*q$qWc#2#<5q991 zg3yfnvAE_1RwBfDwrnv8+RD-UpbMbKsV1NasyArB_!7(WdY_+A z@9qipK08K_&P)7l-p0J3$`h(kS-BTplI%SK>UB?=$TC z6#G7#^Huzp7zgcDZsWP!R2=gC2I%GyvCC}x7~58lSXYVjx&tynEs#?h<@sH1&0pun zM(Oz4Z?TN7I_IN&7B~;}JsINByDX5Co7i+MV)eaLzn>_c+x@;-E~kK`B$ z`-ylwU>#L6RcnuZUSv7hbT}r>`y4~%v%xy6>@#G0CC}GzGFL0A(G8Z9?BISWy+?6h z$8gyFfu4p=xM##^@kIKy)7M|?1$|kIrChDuih^!r^@C3=-<7p1?TNX?<>i_k^h4LP zk|3(NzU>VhX!Bor5{$IH`A;W{!AFp?({;quXgdo0>jgduybC-H{2BNZa0mD_EfnYav%o6wIr0TON2Lco zPum210r;SpmHW41_Uopz^JTzg;CbK@AFp&2zbe#4*}a8GrD8$E8`oS<@~&00+848) zuK*R-N!OGycA1H44bTf!4+)@sHf0hcEM?3jvO;!}XS=>5*V%{Sk3qlo{5>q$>qSSlVhnps~;&+WoKVcL4mr&4-u?w6`&^uACE zlv)Wdsp>&pbwZ34^ED+OM|H5hV!oaSG`Xjxle!=}LEz!Tu>2unu282LVMiRZFOy#2 z;D>MdT~GD{N1|!SI?-`)!|f~$Ly2GcoYQxGy!RoBwiH=@ydZ~&*AAj&G4r5_xhS%R zcvt6xn?Z6L&2ts1uG$je$H^o*V!hEYv`RRLdoG>@@Y|v^#El^3+_Y@+T_?kCaw=1MI-OQQL zWJ5-QN_3>JY4dYSbI`GE%^CDVz17gCJNmS(Pq*|LL!WYp(@dWYOP@0I7WfTPm}%+L zGkRtyq9wbOUwLr=;F6(r29pnURqOYth~8V5Vv9rG@s}cdnvN J{{Z(r?)}~Js>c8T literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_cod_exp2.sma b/services/sklepsms_usluga_cod_exp2.sma new file mode 100644 index 0000000..5768f9a --- /dev/null +++ b/services/sklepsms_usluga_cod_exp2.sma @@ -0,0 +1,40 @@ +#include +#include +native cod_get_user_class(id); +native cod_get_user_xp(id); +native cod_set_user_xp(id, wartosc); + +new const service_id[MAX_ID] = "cod_exp"; +#define PLUGIN "Sklep-SMS: Usluga COD EXP" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_addingtolist(id) { + client_print(id,print_chat,"[%s] Musisz odczekac tydzien od restartu leveli, aby moc zakupic EXP.",PREFIX); + return ITEM_DISABLED; +} + +public ss_service_bought(id,amount) { + cod_set_user_xp(id,cod_get_user_xp(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/services/sklepsms_usluga_cod_te.amxx b/services/sklepsms_usluga_cod_te.amxx new file mode 100644 index 0000000000000000000000000000000000000000..7d04147406f58340c84fe625dec01ca9f59c7554 GIT binary patch literal 5615 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 J{{uONU}Y=iTHgQw literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_cod_te.sma b/services/sklepsms_usluga_cod_te.sma new file mode 100644 index 0000000..6e47f91 --- /dev/null +++ b/services/sklepsms_usluga_cod_te.sma @@ -0,0 +1,195 @@ +#include +#include +#include +native cod_get_classes_num(); +native cod_get_class_name(perk, Return[], len); +native cod_get_user_class(id); +native cod_get_user_xp(id); +native cod_set_user_xp(id, wartosc); +native cod_set_user_class(id, klasa, zmien=0); + +#define TASK_CHECK_FIRST 1000 +#define TASK_CHECK_SECOND 2000 + +new const service_id[MAX_ID] = "cod_exp_transfer"; +#define PLUGIN "Sklep-SMS: Usluga COD PE" +#define AUTHOR "SeeK" + +new fromClass[33], toClass[33], currentClass[33], fromClassExp[33]; + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_addingtolist(id) { + return cod_get_classes_num() >= 2 ? ITEM_ENABLED : ITEM_OFF +} + +public ss_service_chosen(id) { + fromClass[id] = toClass[id] = currentClass[id] = fromClassExp[id] = 0; + + new menu = menu_create("Z jakiej klasy?","fromClassMenu_handle") + for(new i = 1; i <= cod_get_classes_num(); ++i) { + new name[64] + cod_get_class_name(i,name,sizeof(name)) + + menu_additem(menu,name) + } + + menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); + menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); + menu_setprop(menu,MPROP_EXITNAME,"Wyjdz") + + menu_display(id,menu); + + return SS_STOP; +} + +public fromClassMenu_handle(id, menu, item) { + if(item < 0) { + // Niszczymy poprzednie menu + menu_destroy(menu) + return; + } + + // +1 poniewaz klasy zaczynaja sie od id: 1 + fromClass[id] = item+1; + + new menu2 = menu_create("Na jaka klase?","toClassMenu_handle") + new menu_callback = menu_makecallback("toClassMenu_callback"); + for(new i = 1; i <= cod_get_classes_num(); ++i) { + new name[64] + cod_get_class_name(i,name,sizeof(name)) + + menu_additem(menu2,name,"",0,menu_callback) + } + + menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia strona"); + menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna strona"); + menu_setprop(menu2,MPROP_EXITNAME,"Wyjdz") + + // Niszczymy poprzednie menu + menu_destroy(menu) + + menu_display(id,menu2); +} + +public toClassMenu_callback(id, menu, item) { + return fromClass[id] == item+1 ? ITEM_DISABLED : ITEM_ENABLED; +} + +public toClassMenu_handle(id, menu, item) { + if( item < 0 ) { + menu_destroy(menu) + return; + } + + // +1 poniewaz klasy zaczynaja sie od id: 1 + toClass[id] = item+1; + + menu_destroy(menu); + + // Zapisujemy obecna klase + currentClass[id] = cod_get_user_class(id); + + // Sprawdzamy czy pierwsza klasa jest dostepna ( nie jest np. klasa VIP ) + cod_set_user_class(id,fromClass[id],1); + chosen_checkFirstClass(TASK_CHECK_FIRST+id) +} + +public chosen_checkFirstClass(id) { + id -= TASK_CHECK_FIRST; + if( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase + cod_set_user_class(id,toClass[id],1); + chosen_checkSecondClass(TASK_CHECK_SECOND+id) + } + else if ( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy + set_task(0.2,"chosen_checkFirstClass",TASK_CHECK_FIRST+id); + } + else if( !cod_get_user_class(id) ) { + client_print_color(id,Red,"^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy z ktorej chcesz przeniesc EXP.",PREFIX); + } +} + +public chosen_checkSecondClass(id) { + id -= TASK_CHECK_SECOND; + if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase + // Ustawiamy klase ktora mial gracz przed zakupem + cod_set_user_class(id,currentClass[id],1); + ss_show_sms_info(id); + } + else if ( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy + set_task(0.2,"chosen_checkSecondClass",TASK_CHECK_SECOND+id); + } + else if( !cod_get_user_class(id) ) { + client_print_color(id,Red,"^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy na ktora chcesz przeniesc EXP.",PREFIX); + } +} + +public ss_service_bought(id,amount) { + // Ustawiamy pierwsza klase + cod_set_user_class(id,fromClass[id],1); + + // Sprawdzamy czy pierwsza klasa sie prawidlowo zaladowala + bought_checkFirstClass(TASK_CHECK_FIRST+id); +} + +public bought_checkFirstClass(id) { + id -= TASK_CHECK_FIRST; + if( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase + // Zapisujemy EXP pierwszej klasy + fromClassExp[id] = cod_get_user_xp(id); + + // Zerujemy EXP pierwszej klasy + cod_set_user_xp(id,0); + + new name[32]; get_user_name(id,name,sizeof name); + new class1[64]; cod_get_class_name(fromClass[id],class1,sizeof class1); + ss_log("Zabrano graczowi %s %d EXPa z klasy %s",name,fromClassExp[id],class1); + + // Ustawiamy druga klase + cod_set_user_class(id,toClass[id],1); + bought_checkSecondClass(TASK_CHECK_SECOND+id) + } + else if( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy + set_task(0.2,"bought_checkFirstClass",TASK_CHECK_FIRST+id); + } +} + +public bought_checkSecondClass(id) { + id -= TASK_CHECK_SECOND; + if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase + // Ustawiamy EXP na drugiej klasie + cod_set_user_xp(id,cod_get_user_xp(id)+fromClassExp[id]); + + // Ustawiamy klase ktora mial gracz przed zakupem + cod_set_user_class(id,currentClass[id],1); + + new name[32]; get_user_name(id,name,sizeof name); + new class1[64]; cod_get_class_name(fromClass[id],class1,sizeof class1); + new class2[64]; cod_get_class_name(toClass[id],class2,sizeof class2); + ss_log("Przeniesiono graczowi %s %d EXPa z klasy %s na klase %s",name,fromClassExp[id],class1,class2) + } + else if( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy + set_task(0.2,"bought_checkSecondClass",TASK_CHECK_SECOND+id); + } +} + + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/services/sklepsms_usluga_dodatkowe_flagi.amxx b/services/sklepsms_usluga_dodatkowe_flagi.amxx new file mode 100644 index 0000000000000000000000000000000000000000..196fc2b72d06184bea8670f0cdd4fbe68ff4ca28 GIT binary patch literal 799 zcmV+)1K|8vSWQ6y0|5jF0{{T02LJ$EL;wI70001ZoaL0iZ__{&$6tN`v1uicDo_VR zhDr?3{NRVw(uImr356g~QmI9i%r(BcZXBPn9om#70|RUkVqigH<C$%Xkb=Mn zr2p7%Nkf>X?OLI7>|ji8icpX*Er_LWB+ik3U&MygQeKZN85&(kj7>*a0sMr?%V0}+ zM$idp*-;`S+U0yp;5l;=JVm}Uymm&`pD0;h02AN|`(Fa5z#6C=5|2jw^6ZykzrqoI zIgXj0Jw3ASACgD*4|%MyPmX<3{{s8x*ni@PbJD!?BY9s0_y5w~0N21E^Xva)Ip1`j z;r;(G8lVjvAb|&FSzhP)Iw*n_5U_0*SU|82Wlaj0EDJeqB-`QGk=-);3--4;k1LeC zm-OAtkK`wr8p~>UEML%DqMOo5qsjQjq8l!6sg5iMQnt(Yd}aBfqjrRA%ks^}>|%X& zwOm)*(6=4wmAgSy$jJspX~cVBmWq}PwlyUo`eQgvkhd-HiJ=^3f8;%_r1vsi_4#qP7%`)zy{e#EtE%Uce$2tSD z4W%4ZrEq&N*^HW{uez>jbY!@tOw_b+Ek|~gDbe4PW_q0N*c;8BC+P$&njPE4{d+j5 z=?gcg$sV$4C_k(x5p-JgebGa;FR8mKTnQw8Y}2>Xzf4zkEeJ)cU7XW3PkANbgt{gl z>Du<5^o!M&t}V>ST~F6G(BIqILa{nm(Y2OxgRtcJcJcDQfiFW>cS_Zk7Fo?#MqK8{ dT&m+Py54Bk8n++ZDpo6%icbG#`~-}260>ifhaCU_ literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_dodatkowe_flagi.sma b/services/sklepsms_usluga_dodatkowe_flagi.sma new file mode 100644 index 0000000..ec97a32 --- /dev/null +++ b/services/sklepsms_usluga_dodatkowe_flagi.sma @@ -0,0 +1,27 @@ +#include +#include + +new const service_id[MAX_ID] = ""; +#define PLUGIN "Sklep-SMS: Usluga Dodatkowe Flagi" + +new szFlags[25]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[],flags[]) { + copy(szFlags,sizeof szFlags,flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + return ITEM_DISABLED; + + return ITEM_ENABLED; +} diff --git a/services/sklepsms_usluga_gxm_bm.amxx b/services/sklepsms_usluga_gxm_bm.amxx new file mode 100644 index 0000000000000000000000000000000000000000..4e5f3c417ab0107949b4a307f78b24abc029d862 GIT binary patch literal 1124 zcmV-q1e^OSx?cJ95McQ8Tp+aL9Mh3a(6Ao6QO2ap{s5&ezv z8WG(BeFfSR`Wm!dA^HZm51(&=JHYROi@+a%HRyjOJq`u`6f_Ktj|sjgI4^ib@Lk|J zqBqxo&r@h;-j=e~JwHFyr$M_V`T#Tq zdKmNt=n~fqG!T42^kuux&uDk|jCOZUuw%Vh;;F>*zF__(&?}%%MbCU&VjjX~SM2Zo zN1QK(=QxuR$B;M|B-i$RwafD|Mt(K%tB7Cy1izn+(c0gY_%-8r9@R7Cu}8=AsGX8W zRo1xQ?_9}mO6+*;mqFJ{va)Yod?&#KwZ+p;ywJzs1`R${J|-8*%cj+ z8Of)JX-FQ$UT@QbH*Anwn)gYc*MM}Ldcyx-Bb1!@yWxShKuU617nv`5mM7x30@@TE z%VW}KkmbvQuaiE{H$kb`@|o|;nyh;pv?e}0e@l2C9nyQM*jxO6&z9C#LRTN)oIb;0 z`yIWGzZMtiJbt`OdDpf!qCmA$r8ZkPlBl29LG+0oda8A0< z0(=&D2z-vKR@H^qgR^)85vvu0(%Va(ujGHZkgK`t^UZ)eJYIhgX8C)JD?B$3qXm;y zEzA--mLO%Z7rJU&VifWk6w2QJ7}aapIY?-FCAP57G^uH5-?w zVmoOzoFn~=a{fi13mg-wbeJaUWAGjDneA+vGi^3g+i|neOO(CYxNOe4&XEtaj_vzq z`JX%Pu-+a^;>aLTS=jWaXPgGCI_>tzC7;|@NmL{{vTrsQ7giTwGv8~vgCI7$9doW{ q&N=2>*PL%7J(j$hKRdQL+cvw9ci3RQYtGG^+G}pcoc#w}<)RUag)p)J literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_gxm_bm.sma b/services/sklepsms_usluga_gxm_bm.sma new file mode 100644 index 0000000..13a35c7 --- /dev/null +++ b/services/sklepsms_usluga_gxm_bm.sma @@ -0,0 +1,34 @@ +#include +#include +native get_user_bm(id); +native set_user_bm(id, ilosc); + +new const service_id[MAX_ID] = "gxm_bm"; +#define PLUGIN "Sklep-SMS: Usluga GXM BM" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_bought(id,amount) { + set_user_bm(id,get_user_bm(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/services/sklepsms_usluga_gxm_exp.amxx b/services/sklepsms_usluga_gxm_exp.amxx new file mode 100644 index 0000000000000000000000000000000000000000..e6b3bbc5ad436c87af4b456daab4b9652ff86542 GIT binary patch literal 1128 zcmV-u1eg0*SWQ6y0|5k31ONbZ3jhH0MgRa90001ZoXu9vZ`@Q6AMb9%u1QfT9|t~- zh{OSs-DJDjigF-o2uN*8rKGTMaUJ_**Q~#=y&)+%^w0y5IB?|9Lym~QfFlyuNO0g- zA^rn`lpB@cH}*K|G?3(k>ecu+Z@%8V+4ubBV1nrPKkM}h)# zBDxLw7PKq$9cZ&c^gVD7K0g4rfjEDXG3b2G{!9P)!OG7~?cB`>s6u9K{J2DDS6Pe4rnzRIk>G2hFWY@}M!S1ww7YwP9qWw}PbHrB1@mu!-U59odgfaab00Q4Vt@ZX z;(Q}K$C;Ekn#8#vxwamuU6z+N_N$3sMf~a~_&w0ZbN^W4d)o0ls%OY!myYLAJ0*{* z%<-t-xsuI+P2Gb)=P2ElT|UDRtQq9Y3>@ zPZ3j-Jc_;EqQ~#CKu&4gr~JJ7l-EhgIQpOR2_z@}Zn&Tg$$@iO7nvt|mdE0^0vd`= zNxst}Ulx3u^7DKPl!z^#`M%7_y7xgn@!|1%GQKJEv?|e6Ey(61w)7=XDo{ z?ho8~{MEQf=kep+%DcBY2z}K|lo~c~#$i9U{O}7aa8>i_%Jjl=uh+CgKXN@Q4dbR8 z*xty2wS4ktAjq!2Q-dsrpFuzLRMZ?Le8=Pi#4xk5W%f6HQ*A~wiEm{m?<2}j+{cuk zWM2J4%1_n@n6d%94%B&d!1KU+z^8z}0G|f_3cSec#0h^6I0<|nxD9-P{eUk5?*m@~ zJ^;Q9+y}nGWvk}Z&mYd>9Ym~FG)nF)xt@|g=R&6D>z`W$zUs05QIKZqII3`+EKDw# ztmeWrwjv2q7Q2C?HYG+OuR$SKcVPKSGGp!7hAVUQdaq|z{9csGWsN{_+wWz~2fsPh zOg(NjwlgKa_p~F*toc~XwEW&asx8`)T`CMXwJNq<(Ve)Cl&@APSBYaB?_v0hpwU_w zdf32Lu!TtL+-}6Evt#-y9fS@p7Axp`$`2id%O!6|Cg{4mwz?H5dV&@l-wm)oBa~t_ zwu0oE+QNJ*VVo}K5p-IJV`~ea^TqH+nBGFOGzn9;C^SW}Ys_^n>y2oX3}!IW8&{?x zE7lu!7$hl6jM??pzvwf8ZPUmX`}M|JtgK<&W6pnEg3b^})JR%`5%4eqEoED{~t>-yrt>H=)Kw(gAl$mq0< u`88wSHs(7 +#include +native get_user_xp(id); +native set_user_xp(id, ilosc); + +new const service_id[MAX_ID] = "gxm_exp"; +#define PLUGIN "Sklep-SMS: Usluga GXM EXP" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_bought(id,amount) { + set_user_xp(id,get_user_xp(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/services/sklepsms_usluga_rezerwacja_nicku.amxx b/services/sklepsms_usluga_rezerwacja_nicku.amxx new file mode 100644 index 0000000000000000000000000000000000000000..ea3c9e73e902b26505bff5a88293159ac6148052 GIT binary patch literal 710 zcmV;%0y+IySWQ6y0|5lC0ssIV1^@tDLjV960001ZoZXbaYZO5g$KU0LZZrYyOr?dO zg~>%l5Gz9@O}r3Hf+rqq=58l@o7>%4c6LqfY|>Z=77;9jprW0nl^`}2HX?}FTBHzL zV-*|G@9e%iHYWN9IPlpwGjHb2+c)n`t)FP?yJhu}MW2c2b&05kx!M%bFSLu8n*&V{ zF>9a-I=}*Vzy`Qad3(z81Rb=Zx)3mQdLhPq$}*v$-gn4uduuXPJl(qV`0{&zy*SJ*LZ)2rHS1t>rKp73TtO+cPvx(NmDtfRuQ_s43s1BGUX4) z0lMnd7uu1;jZHd%7vhE@9JCONP|wIVyqQ;VQpqhGqRBWGZPe`*HLH?EEfKbb*z1PL zH1m$mecZIn?H?P=^Jne-re(bPSL+ +#include + +new const service_id[MAX_ID] = "resnick"; +#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Nicku" + +new szFlags[25]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[],flags[]) { + copy(szFlags,sizeof szFlags,flags); +} diff --git a/services/sklepsms_usluga_rezerwacja_slota.amxx b/services/sklepsms_usluga_rezerwacja_slota.amxx new file mode 100644 index 0000000000000000000000000000000000000000..97c951ee288f9b7e122953a172c27286d4b71554 GIT binary patch literal 814 zcmV+}1JV3gSWQ6y0|5jU0{{T92LJ$ML;wI70001ZoZXbqYt%p#$KSS9H?ai;QF;*f zQ1GDLAO3*WUM$vvv=wz*Xhn$AWSXX%&7_&E?bb_=3Lc7h@FIBi&k+0v{0}O4@FpI- zc+qcm-nLoWB7!FeKD?RtW9DV@=6M4|yWfh%J}S~kf#^dYkq4bOMf4M6jEEM&Hh9MD zu*sj_^Fr%|DZwUj&2TDaT(1r@#`Z98%l>p_RW)TrOWCO0OO&68rrHou zAS<`(qmy%si7IQ$PZ;xc@mA@bk*ZD8!XSa zV@W4y(rX403LwTo^NEP`jBF#Dx=PYHvx7~ONg~>K_EYMvN*A=m#m*-|_m*kB?3S+C zmQID+D2>@xtm3i=Q`?g3wzY;5Db-xtni!Frv287***C0-Qf;hiTds<9T8@*TbY;&W sk!fUy<(g|{UgOnV$aqgktvAHB>+>`9I}dM{YSn7hrhh+v0q`~$NFm9iMgRZ+ literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_rezerwacja_slota.sma b/services/sklepsms_usluga_rezerwacja_slota.sma new file mode 100644 index 0000000..c3ba547 --- /dev/null +++ b/services/sklepsms_usluga_rezerwacja_slota.sma @@ -0,0 +1,27 @@ +#include +#include + +new const service_id[MAX_ID] = "resslot"; +#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Slota" + +new szFlags[25]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[],flags[]) { + copy(szFlags,sizeof szFlags,flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + return ITEM_DISABLED; + + return ITEM_ENABLED; +} diff --git a/services/sklepsms_usluga_vip.amxx b/services/sklepsms_usluga_vip.amxx new file mode 100644 index 0000000000000000000000000000000000000000..301200a246c9278b2e1abdcd07d2a096af5f7555 GIT binary patch literal 798 zcmV+(1L6EwSWQ6y0|5jE0{{ST2LJ#tL;wI70001ZoZXbqYZE~f$6wm2*|i0QqVyo< z5b&T)HvWLt3RrZ)A`quz>m@FIBi&k+0v{0}O4@FpI- zc+u}>UTR`nM7%lh;my8Z^LBnbXMkw$Yd+scc`D|J-uDqX&^c2?KQP9KXbJ3qXUs0^ zUVuD!4feoWw!I@WKCt}A@*B(VEUlc8!;r^_Zk>ZXPjT4vgUGF|`kiSI1u1FmYME>X zHR%e^3nD*NVW4~To=62H(uZ0mt_jZU`zm&%nu=TG%hYW`QXkbKk?H^6Z@j>{hr*UvdS zYmaozcMhqe?+b4)+SbmH?I-_P-bN37GSd!VcCi{SoW`n%v7*v|-P{!q^ z&K{@vz(aG}-@@Gt;*xHN_T|b_W|!0gkH}oO$6yG&WZNrnn#_Y62A{zhu!EY;lDRx1 z>}y)n9vH~w$UJm21`k*x(U3jH%6S^X$-NY_~Dmw`TeJ zv3s5Fg}mm7_Ij4g5**e0c6%!S&9mJNcMdMMJX~*j7zNIxWRXP`JGBkjON$!&0SYWnSY>SIBrz cNToN#wyO)X)tQHP3Khq3Z2Fh+6S~h4dYhn`2><{9 literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_vip.sma b/services/sklepsms_usluga_vip.sma new file mode 100644 index 0000000..9279e0e --- /dev/null +++ b/services/sklepsms_usluga_vip.sma @@ -0,0 +1,27 @@ +#include +#include + +new const service_id[MAX_ID] = "vip"; +#define PLUGIN "Sklep-SMS: Usluga VIP" + +new szFlags[25]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[],flags[]) { + copy(szFlags,sizeof szFlags,flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + return ITEM_DISABLED; + + return ITEM_ENABLED; +} diff --git a/services/sklepsms_usluga_vippro.amxx b/services/sklepsms_usluga_vippro.amxx new file mode 100644 index 0000000000000000000000000000000000000000..c222ed02ee9662188c2054bd78b90b3d76b90d63 GIT binary patch literal 804 zcmV+<1Ka#qSWQ6y0|5jK0{{Sm2LJ#-L;wI70001ZoZXbaYZO5g$KNGUZ`TM4qNEV7 z2w151BPt}ONi+(QM57la5n-L&PWIN@+u6+Q#awJsY8S-9MzHnI5c~)H4 zNl*BG7ze3}Ler=BMJh$WTa83u5GQ<|nz~9n(=>EF zQX(bV;ChST8FLuaQST_v=X&NJ$vwoiCWl#Wjfnnbk2!LSQJ#Ygo@H&%sz%AbA0@?e}y%!ZQ z)>DIIW?6Ry7veMeM|K)6Idr6RD%mNP>Z&PAM#@HML90NErg|*mP?oM%&ri=UEtTfg zBiI{}OiC@2JyyHG!}B_8;jM>BqE*o}Md!X{S+jfVfCpsn;6rc(ykOf)aE$C5JPtmA z6JQHvog{moM%dSOs~s?u%aMKib`1Y!jYU)T88gFcB!i7YztazGSKQ_bd-_Ax}#E)InVfQbScAcbU>cv{&qU)Hp(Q=LFsi-vy<1nkF zD5BJL-Yg+o)l1lf{)Vx literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_vippro.sma b/services/sklepsms_usluga_vippro.sma new file mode 100644 index 0000000..f3d7ca8 --- /dev/null +++ b/services/sklepsms_usluga_vippro.sma @@ -0,0 +1,27 @@ +#include +#include + +new const service_id[MAX_ID] = "vippro"; +#define PLUGIN "Sklep-SMS: Usluga VIP PRO" + +new szFlags[25]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[],flags[]) { + copy(szFlags,sizeof szFlags,flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + return ITEM_DISABLED; + + return ITEM_ENABLED; +} diff --git a/services/sklepsms_usluga_zp_ap.amxx b/services/sklepsms_usluga_zp_ap.amxx new file mode 100644 index 0000000000000000000000000000000000000000..bdc41e6158e945b23c1ab763d71bbf61677216c4 GIT binary patch literal 1127 zcmV-t1ep6+SWQ6y0|5k21ONbb3jhH4MgRa90001ZoXu7{Z{$=IKJ(ZxGi1@SJPMvh zM52IXW->d;iltyg6s@$IXr*K!(3l(hW@6$OwkISZLMgT&5(Op27AXNk29VGl2m9t`urWA*F8RSukSq`Bl`7^TCGeqN=ig~Rib0)j^~N~#&wg3 zJ_f!44g}u*u25J4r5QzA?qI8S7}%v9!4w4EpN{^>t!qP86y^ ztSN?KGob~qz_ZT zegPi>6Tp+eSHL9q5f})+CibG=mzVT=a7n+tbNtwD6l5yMJXctL19%JgT}#c}kM!n$+4l)w{H=(lD+nab=0CofG#{X*l+yg1k~XTSw&*bsW&y zI;t1cQIRoD$6YDJO^6?l{U)$j&=q5A5<4cb!TPd8(&H=6gNpdTqO_)PhZZoaoP*;`myXee16CTVg#w2ObAM58eg8z;WOg!4JVNfqw?S z3_b$C!cD7Wea|kg;vHnHluH!v%sZ}@zvWtL<^up95_q%6+YkICeUDLtW2b2{#dsxC zCXosyNm1?iw%(E)xxNa6Y~H@|v{c5{p$~Uvbc3&@UVNXE&ZS3ze7`?Tj~{&JQd9Hr zu(6vO`F>a$F{a0lxzx({-BD|PAUUAiflI4k(>9$Cmb0%f&8njw8lq^2z|CqPbcevjcr8veOG&dt+AD4M~^YO>#Qzshnk+Cp6xk4W@m_2EJw#k<+N(ng~_Ys9S*_C#*5r z`evgZp0=k7%di^tcsq{tr;t046P%Kac8lHgR@kVoMp|vuZyD3JbrJ)srCir2{#9oK z)>(`pSv(uW-#1$m)E|3+i3x7>rztZLW;FEqLxV`kNuv5c9n tG223UthtfiJIa`D8C~c*>@eFkW@e2nYNnl{{gBCsD;gbD;od+ literal 0 HcmV?d00001 diff --git a/services/sklepsms_usluga_zp_ap.sma b/services/sklepsms_usluga_zp_ap.sma new file mode 100644 index 0000000..2524c64 --- /dev/null +++ b/services/sklepsms_usluga_zp_ap.sma @@ -0,0 +1,34 @@ +#include +#include +native zp_get_user_ammo_packs(id); +native zp_set_user_ammo_packs(id, amount); + +new const service_id[MAX_ID] = "zp_ap"; +#define PLUGIN "Sklep-SMS: Usluga ZP AP" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_bought(id,amount) { + zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/sklep_sms.sma b/sklep_sms.sma new file mode 100644 index 0000000..d42fd4d --- /dev/null +++ b/sklep_sms.sma @@ -0,0 +1,2756 @@ +#include +#include +#include +#include +#include +#if AMXX_VERSION_NUM < 183 +#include +#else +#define Red print_team_red +#define Blue print_team_blue +#endif + +#pragma semicolon 1 + +forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); + +#define DOSTEP ADMIN_CFG +#define FLAG_NICK (1<<5) + +// ID zadan +#define TASK_WYSWIETL 2000 +#define TASK_CHECK_USER 5000 +#define TASK_SHOW_MENU_SERVICE_TYPES 8000 + +// Sockets +#define TASK_CHECK_SOCKET 6000 +#define TASK_TIME_OUT 7000 + +// Klawisze ktore mozna uzyc w menu +#define KEYS (1<<0)|(1<<9) // Keys: 10 +#define KEYS2 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 1234567890 + +// Logowanie danych +#define LOGING +#define DEBUG "sklep_sms_debug.log" +#define CFG_FILE "sklep_sms.cfg" +#define LOG_FILE "sklep_sms.log" +//#define TRACE_FILE "sklep_sms_trace.log" + +// Stale +const MAX_KOMENDA = 32; +const MAX_KONTAKT = 64; + +//Rejestracja uslug +enum e_Service { + sID[MAX_ID+1], + PLUGIN, + sNAME[MAX_NAME+1], + DESCRIPTION[MAX_DESCRIPTION+1], + TAG[MAX_SERVICE_TAG+1], + GROUPS[33], + FLAGS[27], + TYPES +}; + +new Array:service_plugins, + Array:service_ids, + Array:services; + +// Modul platnosci +enum e_TransactionService { + tsID[MAX_ID+1], + tsNAME[MAX_NAME+1], + SMS_TEXT[MAX_SMS_TEXT+1], +}; +new transaction_service[e_TransactionService]; + +// Numery i taryfy SMS +enum e_SMS { + NUMBER[MAX_NUMBER+1], + sTARIFF, +}; +new Array:smses; + +// Lista cen ( taryf ) dla usług +enum e_Price { + pSERVICE[MAX_ID+1], + pTARIFF, + AMOUNT, +}; +new Array:pricelist; + +//Dodatkowe zmienne +new which_service[33], + which_price[33], + b_passwords[33][MAX_PASSWORD+1], + b_types[33]; + +//CVARy +new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip; +new sklep_komenda[MAX_KOMENDA+1], przeladuj_komenda[MAX_KOMENDA+1], uslugi_komenda[MAX_KOMENDA+1], show_info; + +// Sciezka do pliku konfiguracyjnego +new config_path[128]; + +//Licencja +new license[32], license_password[33]; +new bool:footer = true; +new server_ip[32]; +new server_name[128]; +new bool:blocked = false; + +// MySQL +new const TABLE_PREFIX[] = "ss_"; +new Handle:SqlTuple; +new bool:sql_connected = false; +new sql_host[64], sql_user[32], sql_pass[32], sql_db[32]; +new server_id; +new const all_flags[] = "abcdefghijklmnopqrstuyvwxz"; +new szTemp[4096]; + +// Flagi graczy +enum e_PlayerFlags { + pfPLAYER[33], + pfFLAGS, + pfPASSWORD[MAX_PASSWORD+2], + pfTYPE +}; +new Array:players_flags; +new bool:players_loaded = false; +new ostatnie_przeladowanie; + +// Sockets +new sockets[33]; + +// Settings +new st_currency[16], + st_shop_url[128], + st_signature[128], + st_sms_service[65], + st_contact[MAX_KONTAKT+1], + st_random_key[33], + st_random_key_md5[34], + Float:st_vat; + +new shop_url[128], shop_url_add[128]; + +new bool:shop_registered = false; +new bool:is_amxbans = false; + +public plugin_natives() { + register_library("shop_sms"); + register_native("ss_register_service", "registerService"); + register_native("ss_show_sms_info", "native_infoSMS"); + register_native("ss_add_code", "native_addCode"); + register_native("ss_log", "dodajLog"); + register_native("ss_is_steam", "native_is_steam"); +} + +public plugin_precache() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: plugin_precache"); + #endif + get_configsdir(config_path, charsmax(config_path)); + + // Tworzenie pliku sklep_sms.cfg + format(config_path, charsmax(config_path), "%s/%s", config_path, CFG_FILE); + if(!file_exists(config_path)) { + new szText[1024], iLen=0, iMax=charsmax(szText); + iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// SKLEP SMS: - Plik Konfiguracyjny^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Wlacza / Wylacza sklepik^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// 1 - wlaczony^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// 0 - wylaczony^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_on ^"1^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu wyswietlenia menu sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_sklep_komenda ^"/sklepsms^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu przeladowania flag wykupionych w sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_przeladuj_komenda ^"/przeladuj^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_uslugi_komenda ^"/uslugi^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Wyswietlac informacje o sklepie na chacie?^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_info ^"1^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// ### Dane Bazy MySQL ###^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Adres IP^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_host ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Uzytkownik^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_user ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Haslo^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_pass ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Nazwa bazy danych"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_db ^"^""); + write_file(config_path, szText); + } + + //Rejestrowanie cvarow + cvar_on = register_cvar("sklepsms_on", "1"); + cvar_sklep = register_cvar("sklepsms_sklep_komenda", "/sklepsms"); + cvar_przeladuj = register_cvar("sklepsms_przeladuj_komenda", "/przeladuj"); + cvar_uslugi = register_cvar("sklepsms_uslugi_komenda", "/uslugi"); + cvar_show_info = register_cvar("sklepsms_info", "1"); + cvar_host = register_cvar("sklepsms_host", "localhost"); + cvar_user = register_cvar("sklepsms_user", "root"); + cvar_pass = register_cvar("sklepsms_pass", ""); + cvar_db = register_cvar("sklepsms_db", ""); + cvar_server_ip = register_cvar("sklepsms_server_ip", ""); + + // Wczytywanie confingu + if(file_exists(config_path)) { + server_cmd("exec %s", config_path); + } + + service_plugins = ArrayCreate(); + service_ids = ArrayCreate(MAX_NAME); + + players_flags = ArrayCreate(e_PlayerFlags); + smses = ArrayCreate(e_SMS); + services = ArrayCreate(e_Service); + pricelist = ArrayCreate(e_Price); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: plugin_precache"); + #endif +} + +public plugin_init() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: plugin_init"); + #endif + + register_plugin("Sklep SMS", VERSION, "SeeK"); + + register_menucmd(register_menuid("SMS_Info"), KEYS, "infoSMS_handler"); + register_concmd("Podaj_Kod_Zwrotny", "kodZwrotny"); + register_concmd("ssnick_Podaj_Haslo", "menuServiceType_nick"); + register_concmd("ssip_Podaj_Haslo", "menuServiceType_ip"); + register_concmd("sklepsms_reloaddata", "usersReloadData"); + register_concmd("sklepsms_reloadusers", "pre_usersReload"); + + register_clcmd("say", "sayHook"); + register_clcmd("say_team", "sayHook"); + + if( show_info ) + set_task(137.0, "reklama", _, _, _, "b"); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: plugin_init"); + #endif +} + +public loadCvars() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: loadCvar"); + #endif + + //Pobieranie wartosci cvarow + get_pcvar_string(cvar_sklep, sklep_komenda, charsmax(sklep_komenda)); + get_pcvar_string(cvar_przeladuj, przeladuj_komenda, charsmax(przeladuj_komenda)); + get_pcvar_string(cvar_uslugi, uslugi_komenda, charsmax(uslugi_komenda)); + show_info = get_pcvar_num(cvar_show_info); + + get_pcvar_string(cvar_host, sql_host, charsmax(sql_host)); + get_pcvar_string(cvar_user, sql_user, charsmax(sql_user)); + get_pcvar_string(cvar_pass, sql_pass, charsmax(sql_pass)); + get_pcvar_string(cvar_db, sql_db, charsmax(sql_db)); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: loadCvar"); + #endif +} + +public plugin_end() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: plugin_end"); + #endif + + if( SqlTuple ) + SqlTuple = Empty_Handle; + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: plugin_end"); + #endif +} + +public plugin_cfg() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: plugin_cfg"); + #endif + + // Blad przy tworzeniu ( brak uprawnien ) + if( !file_exists(config_path) ) + brakSciezki(0, config_path); + + // Ponowne wczytywanie confingu + if( file_exists(config_path) ) { + server_cmd("exec %s", config_path); + server_exec(); + } + + // Pobieranie ip serwera + get_pcvar_string(cvar_server_ip, server_ip, charsmax(server_ip)); + if( !strlen(server_ip) ) // Brak ip w cvarach + get_user_ip(0, server_ip, charsmax(server_ip)); + + // Ladownaie cvarow + loadCvars(); + + // Łaczenie z baza + SqlTuple = SQL_MakeDbTuple(sql_host, sql_user, sql_pass, sql_db); + if( !SqlTuple ) _error42("plugin_cfg"); + + // Zaladuj flagi + _usersLoad(false); + + new ip[22], port[10]; + split(server_ip, ip, charsmax(ip), port, charsmax(port), ":"); + + formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%sservers` WHERE `ip` = '%s' AND `port` = '%s'", TABLE_PREFIX, ip, port); + //log_to_file(LOG_FILE, szTemp); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getServerData", szTemp); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: plugin_cfg"); + #endif +} + +public checkLoadedServices() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: checkLoadedServices"); + #endif + + if( !ArraySize(services) ) { + log_amx("Nie zaladowano zadnych uslug."); + } else { + log_amx("Zaladowano %d uslug.", ArraySize(services)); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: checkLoadedServices"); + #endif +} + +public client_authorized(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: client_authorized"); + #endif + + _usersCheckUser(id); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: client_authorized"); + #endif +} + +public client_putinserver(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: client_putinserver"); + #endif + + _usersCheckUser(id); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: client_putinserver"); + #endif +} + +public sayHook(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: sayHook"); + #endif + + new tekst[32]; + read_argv(1, tekst, charsmax(tekst)); + + if(equali(tekst, sklep_komenda)) { + if(blocked) + client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepiku z powodu bledow ze sklepem.", PREFIX); + else + sklepMenu(id); + } + else if(equali(tekst, przeladuj_komenda)) { + pre_usersReload(id); + } + else if(equali(tekst, uslugi_komenda)) { + _showPlayerServices(id); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: sayHook"); + #endif +} + +/* Menu sklepu */ +public sklepMenu(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: sklepMenu"); + #endif + + if( !is_user_connected(id) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: sklepMenu"); + #endif + return; + } + if(!get_pcvar_num(cvar_on)) { + client_print_color(id, Red, "^4[%s] ^1Sklep jest obecnie ^3wylaczony^1.", PREFIX); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: sklepMenu"); + #endif + return; + } + if( !sql_connected ) { + client_print_color(id, Red, "^4[%s] ^1Nie polaczono z baza danych.", PREFIX); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end4: sklepMenu"); + #endif + return; + } + if(!ArraySize(services)) { + client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end3: sklepMenu"); + #endif + return; + } + if( !shop_registered ) { + client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end5: sklepMenu"); + #endif + return; + } + + new menu; + if(footer) + menu = menu_create("\rSklep SMS\d napedzany przez\w sklep-sms.pl^n\yWybierz usluge:", "sklepMenu_handler"); + else + menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "sklepMenu_handler"); + + new menu_callback = menu_makecallback("sklepMenu_callback"); + + new szText[64], service[e_Service]; + for(new i = 0; i < ArraySize(services); ++i) { + new data[4]; + data[0] = i+1; + // Pobierz dane o usludze + ArrayGetArray(services, i, service); + + // Usluga wymaga posiadania grupy, TODO zakodzic to + /*if( strlen(service[GROUPS]) ) + continue;*/ + + // Sforamtuj punkt w menu + if( service[DESCRIPTION] ) + formatex(szText, charsmax(szText), "Kup %s \d(%s)", service[sNAME], service[DESCRIPTION]); + else + formatex(szText, charsmax(szText), "Kup %s", service[sNAME]); + + new ret; + new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_addingtolist", FP_CELL); + ExecuteForward(forward_handle, ret, id); + DestroyForward(forward_handle); + + data[1] = ret; + + if(data[1] != ITEM_OFF) + menu_additem(menu, szText, data, 0, menu_callback); + } + + //Wyjdz zamiast Exit + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); + menu_display(id, menu); + + client_print_color(id, Red, "^4[%s] ^1W razie problemow mozesz sie z nami skontaktowac", PREFIX); + client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, st_contact); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end6: sklepMenu"); + #endif +} + +public sklepMenu_callback(id, menu, item) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: sklepMenu_callback"); + #endif + + new data[4], zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: sklepMenu_callback"); + #endif + return data[1] == ITEM_DISABLED ? ITEM_DISABLED : ITEM_ENABLED; +} + +public sklepMenu_handler(id, menu, item) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: sklepMenu_handler"); + #endif + + if( !is_user_connected(id) || item == MENU_EXIT ) { + menu_destroy(menu); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: sklepMenu_handler"); + #endif + return; + } + + new data[4], zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); + + wyborMenu(id, data[0]-1); + menu_destroy(menu); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: sklepMenu_handler"); + #endif +} +/* Konie menu sklepu */ + +/* Menu wyboru */ +public wyborMenu(id, service_id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: wyborMenu"); + #endif + + if( !is_user_connected(id) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: wyborMenu"); + #endif + return; + } + + new service[e_Service]; + ArrayGetArray(services, service_id, service); + + new szText[64], data[3]; + + formatex(szText, charsmax(szText), "\rSklep SMS^n\yWybierz ilosc %s:", service[sNAME]); + + new menu = menu_create(szText, "wyborMenu_handler"); + + new price[e_Price], number[MAX_NUMBER+1]; + for(new i = 0; i < ArraySize( pricelist ); ++i) { + ArrayGetArray(pricelist, i, price); + // ID usługi jest inne + if( !equali(price[pSERVICE], service[sID]) ) + continue; + + // Pobranie numeru na ktory trzeba wyslac SMSa + setc(number, strlen(number), 0); + _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + + // Przy danej metodzie płatności nie można użyć danej taryfy + if( !strlen(number) ) + continue; + + new amount[32+1]; + if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); + else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + } + new temp_cost = get_sms_cost(number); + formatex(szText, charsmax(szText), + "\y%s \wza %d.%s %s + VAT\d ( %d.%s %s )", + amount, temp_cost/100, two_number_value(temp_cost%100), st_currency, floatround(temp_cost*st_vat)/100, + two_number_value(floatround(temp_cost*st_vat)%100), st_currency + ); + data[0] = service_id+1; + data[1] = min(127, i); // Problem przy ilosci uslug powyzej 256! + data[2] = min(127, i-data[1]); + menu_additem(menu, szText, data); + } + + // Wyjdz zamiast Exit + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); + + if( menu_items(menu) > 1 ) + menu_display(id, menu); + else if(menu_items(menu) == 1) { // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie + which_service[id] = service_id; + which_price[id] = data[1]+data[2]; + prev_infoSMS(id); + } + else // Zero + client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: wyborMenu"); + #endif +} + +public wyborMenu_handler(id, menu, item) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: wyborMenu_handler"); + #endif + + if(!is_user_connected(id) || item == MENU_EXIT) { + menu_destroy(menu); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: wyborMenu_handler"); + #endif + return; + } + + new data[4], zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); + + which_service[id] = data[0]-1; + which_price[id] = data[1]+data[2]; + + prev_infoSMS(id); + menu_destroy(menu); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: wyborMenu_handler"); + #endif +} +/* Koniec menu wyboru */ + +/* Informacje dot SMSa */ + +public prev_infoSMS(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: prev_infoSMS"); + #endif + + new service[e_Service]; + ArrayGetArray(services, which_service[id], service); + + if( service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID) ) { + // Wyswietlamy menu z wyborem na co chcemy kupic usluge + new menu = menu_create("Wybierz typ uslugi", "menuServiceType_handler"); + new menu_callback = menu_makecallback("menuServiceType_callback"); + + menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); + menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); + menu_additem(menu, "Na SteamID", "", 0, menu_callback); + + menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER); + + new data[4]; + data[0] = id; + data[1] = menu; + + menuDisplayServiceTypes(data); + } + else + _serviceChosen(id); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: prev_infoSMS"); + #endif +} + +public menuServiceType_callback(id, menu, item) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: menuServiceType_callback"); + #endif + + new service[e_Service]; + ArrayGetArray(services, which_service[id], service); + + switch( item ) { + case 0: return service[TYPES]&TYPE_NICK ? ITEM_ENABLED : ITEM_DISABLED; + case 1: return service[TYPES]&TYPE_IP ? ITEM_ENABLED : ITEM_DISABLED; + case 2: return service[TYPES]&TYPE_SID && is_steam(id) ? ITEM_ENABLED : ITEM_DISABLED; + } + + return ITEM_DISABLED; +} + +public menuDisplayServiceTypes(data[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: menuDisplayServiceTypes"); + #endif + + new id = data[0]; + if( !is_user_connected(id) ) { + menu_destroy(data[1]); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: menuDisplayServiceTypes"); + #endif + return; + } + + new menu, newmenu; + player_menu_info(id, menu, newmenu); + if(newmenu != data[1]) + menu_display(id, data[1]); + + set_task(0.1, "menuDisplayServiceTypes", TASK_SHOW_MENU_SERVICE_TYPES+id, data, 2); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: menuDisplayServiceTypes"); + #endif +} + +public menuServiceType_handler(id, menu, item) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: menuServiceType_handler"); + #endif + + switch(item) { + case 0: { + client_cmd(id, "messagemode ssnick_Podaj_Haslo"); + } + case 1: { + client_cmd(id, "messagemode ssip_Podaj_Haslo"); + } + case 2: { + _serviceChosen(id, TYPE_SID, ""); + } + } + + if( 0 <= item <= 2) { + remove_task(TASK_SHOW_MENU_SERVICE_TYPES+id); + menu_destroy(menu); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: menuServiceType_handler"); + #endif +} + +public menuServiceType_nick(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: menuServiceType_nick"); + #endif + + new szPassword[65]; + read_argv(1, szPassword, charsmax(szPassword)); + + if( !_menuServiceType_checkPass(id, TYPE_NICK, szPassword) ) + client_cmd(id, "messagemode ssnick_Podaj_Haslo"); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: menuServiceType_nick"); + #endif +} + +public menuServiceType_ip(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: menuServiceType_ip"); + #endif + + new szPassword[65]; + read_argv(1, szPassword, charsmax(szPassword)); + + if( !_menuServiceType_checkPass(id, TYPE_IP, szPassword) ) + client_cmd(id, "messagemode ssip_Podaj_Haslo"); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: menuServiceType_ip"); + #endif +} + +bool:_menuServiceType_checkPass(id, type, szPassword[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _menuServiceType_checkPass"); + #endif + + if( strlen(szPassword) > 30 ) { + client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _menuServiceType_checkPass"); + #endif + return false; + } + else if( !strlen(szPassword) ) { + client_print(id, print_center, "Haslo nie zostalo wprowadzone. Wprowadz je."); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: _menuServiceType_checkPass"); + #endif + return false; + } + + _serviceChosen(id, type, szPassword); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end3: _menuServiceType_checkPass"); + #endif + return true; +} + +public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: checkServicePassword"); + #endif + + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: checkServicePassword"); + #endif + return; + } + + new id = data[0]; + new type = data[1]; + // Haslo takie jak do innych uslug + if( SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "equal")) ) { + new szPassword[33]; + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), szPassword, charsmax(szPassword)); + _serviceChosen(id, type, szPassword); + } + else { + if( type == TYPE_NICK ) { + client_print_color(id, Red, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3nick^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); + client_cmd(id, "messagemode ssnick_Podaj_Haslo"); + } + else if( type == TYPE_IP ) { + client_print_color(id, Blue, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3adres IP^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); + client_cmd(id, "messagemode ssip_Podaj_Haslo"); + } + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: checkServicePassword"); + #endif +} + +_serviceChosen(id, type=0, szPassword[] = "") { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _serviceChosen"); + #endif + + new service[e_Service], price[e_Price]; + ArrayGetArray(services, which_service[id], service); + ArrayGetArray(pricelist, which_price[id], price); + copy(b_passwords[id], MAX_PASSWORD, szPassword); + b_types[id] = type; + + new ret; + new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_chosen", FP_CELL, FP_CELL); + ExecuteForward(forward_handle, ret, id, price[AMOUNT]); + DestroyForward(forward_handle); + + if( ret != SS_STOP ) { + infoSMS(id); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _serviceChosen"); + #endif +} + +public infoSMS(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: infoSMS"); + #endif + + if( !is_user_connected(id) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: infoSMS"); + #endif + return; + } + + new service[e_Service], price[e_Price], number[MAX_NUMBER+1], szText[512]; + ArrayGetArray(services, which_service[id], service); + ArrayGetArray(pricelist, which_price[id], price); + _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + + new amount[32+1]; + if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); + else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + } + + formatex(szText, charsmax(szText), "\rSklep SMS^n^n"); + format(szText, charsmax(szText), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", szText, service[sNAME], amount); + new temp_cost = get_sms_cost(number); + format(szText, charsmax(szText), + "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", + szText, transaction_service[SMS_TEXT], number, temp_cost/100, two_number_value(temp_cost%100), st_currency, floatround(temp_cost*st_vat)/100, + two_number_value(floatround(temp_cost*st_vat)%100), st_currency + ); + format(szText, charsmax(szText), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", szText); + + //Wyswietlane caly czas menu zakupu + infoSMS_wyswietl(szText, id+TASK_WYSWIETL); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: infoSMS"); + #endif +} + +public infoSMS_wyswietl(info[], id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: infoSMS_wyswietl"); + #endif + + id -= TASK_WYSWIETL; + if( !is_user_connected(id) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: infoSMS_wyswietl"); + #endif + return; + } + + show_menu(id, KEYS, info, 1, "SMS_Info"); + set_task(0.9, "infoSMS_wyswietl", id+TASK_WYSWIETL, info, strlen(info)); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: infoSMS_wyswietl"); + #endif +} + +public infoSMS_handler(id, key) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: infoSMS_handler"); + #endif + + if(task_exists(id+TASK_WYSWIETL)) remove_task(id+TASK_WYSWIETL); + + if( !is_user_connected(id) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: infoSMS_handler"); + #endif + return; + } + + if(key == 0) { + client_cmd(id, "messagemode Podaj_Kod_Zwrotny"); + } + else if(key == 9) { + client_print_color(id, Red, "^4[%s] ^1Transakcja zostala ^3przerwana^1.", PREFIX); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: infoSMS_handler"); + #endif +} + +// Wprowadzanie kodu zwrotnego +public kodZwrotny(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: kodZwrotny"); + #endif + + if( !is_user_connected(id) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: kodZwrotny"); + #endif + return; + } + + new sms_code[MAX_CODE+1], szUrl[512]; + read_argv(1, sms_code, charsmax(sms_code)); + + dodajLog2(id, "Wprowadzono kod: %s", sms_code); + + if(!strlen(sms_code)) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: kodZwrotny"); + #endif + client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); + return; + } + else if(containi(sms_code, " ") != -1) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end3: kodZwrotny"); + #endif + client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1.", PREFIX); + return; + } + else if(strlen(sms_code) == 1 && containi(sms_code, "0") == 0) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end4: kodZwrotny"); + #endif + client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1byc rowny^3 0^1.", PREFIX); + return; + } + + client_print_color(id, Red, "^4[%s] ^1Trwa weryfikacja kodu...", PREFIX); + + // ############# ZAKUP USLUGI ############### + + new service[e_Service], auth_data[32], price[e_Price], ip[32]; + new u_service_id[65], u_auth_data[64], u_password[65], u_sms_service[65], u_sms_code[MAX_CODE*2+1], u_ip[64]; + + // Pobieramy dane o usludze + ArrayGetArray(services, which_service[id], service); + + // Pobieramy dane gracza Nick / IP / SID + switch( b_types[id] ) { + case TYPE_IP: get_user_ip(id, auth_data, charsmax(auth_data), 1); + case TYPE_SID: get_user_authid(id, auth_data, charsmax(auth_data)); + case TYPE_NICK: get_user_name(id, auth_data, charsmax(auth_data)); + } + + // Jezeli usluga nie jest wykupowana na nickpass, ippass, sid, to pobieramy nick + if( !strlen(auth_data) ) + get_user_name(id, auth_data, charsmax(auth_data)); + + // Pobieramy IP gracza + get_user_ip(id, ip, charsmax(ip), 1); + + // Pobieramy taryfe + ArrayGetArray(pricelist, which_price[id], price); + + // Urlencode + StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); + StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); + StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); + StringURLEncode(st_sms_service, u_sms_service, charsmax(u_sms_service)); + StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); + StringURLEncode(ip, u_ip, charsmax(u_ip)); + + formatex(szUrl, charsmax(szUrl), + "%sservers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=engine_amxx&language=polish", + shop_url_add, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, server_id, u_sms_service, u_sms_code, price[pTARIFF], u_ip + ); + sendSocket(id, shop_url, szUrl, "purchase_service"); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end4: kodZwrotny"); + #endif +} + +public purchaseService_callback(id, return_value[], szText[], positive, bsid, szWarnings[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: purchaseService_callback"); + #endif + + client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, szText); + + if( strlen(szWarnings) ) { + format(szWarnings, 1023, + "\ + \ + \ +
Bledy ktore wystapily przy zakupie uslugi
\ + %s\ + Uzyj jeszcze raz tego samego kodu zwrotnego sms.\ + ", + szWarnings + ); + show_motd(id, szWarnings, "Bledy przy zakupie uslugi"); + } + + // Wystapil jakis blad, wiec przerywamy + if( positive != 1 ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: purchaseService_callback"); + #endif + return; + } + + new ret, forward_handle, service[e_Service], price[e_Price], number[MAX_NUMBER+1]; + ArrayGetArray(services, which_service[id], service); + ArrayGetArray(pricelist, which_price[id], price); + _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + + forward_handle = CreateOneForward(service[PLUGIN], "ss_service_bought", FP_CELL, FP_CELL); + ExecuteForward(forward_handle, ret, id, price[AMOUNT]); + DestroyForward(forward_handle); + + // Wystapil jakis blad + if( ret == SS_ERROR ) { + client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, st_contact); + + new amount[32+1]; + if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); + else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + } + + dodajLog2(id, "Wystapil blad podczas kupowania %s - %s; Taryfa: %d", service[sNAME], amount, price[pTARIFF]); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: purchaseService_callback"); + #endif + return; + } + + // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy + if( service[FLAGS] ) + usersReloadData(); + + // Info w przypadku usługi na haslo + if( b_types[id] & (TYPE_NICK|TYPE_IP) ) { + // Ustawienie hasla + client_cmd(id, "setinfo _ss ^"%s^"", b_passwords[id]); + + new szText[512]; + formatex(szText, charsmax(szText), + "


\ +

Wykupiles/as usluge: %s

\ + Aby usluga dziala, dodaj wpis do pliku config.cfg: setinfo _ss ^"%s^"

\ + W razie problemow skontaktuj sie z nami.\ +

", + service[sNAME], b_passwords[id] + ); + show_motd(id, szText, "Informacje dotyczace uslugi"); + } + else if( b_types[id]&TYPE_SID ) { + new szText[512]; + formatex(szText, charsmax(szText), + "


\ +

Wykupiles/as usluge: %s

\ + W razie problemow skontaktuj sie z nami.\ +

", + service[sNAME] + ); + show_motd(id, szText, "Informacje dotyczace uslugi"); + } + + new amount[32+1]; + if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); + else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + } + + client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], amount); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end3: purchaseService_callback"); + #endif +} + +// Dodanie kodu do bazy kodow +public addCode(sms_code[], sms_tariff, free) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: addCode"); + #endif + + formatex(szTemp, charsmax(szTemp), "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) VALUES ('%s', '%d', '%d')", TABLE_PREFIX, sms_code, sms_tariff, free); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); + dodajLog2(0, "Dodano SMSa do tabeli kodow do wykorzystania. Kod: %s Taryfa: %d", sms_code, sms_tariff); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: addCode"); + #endif + return SS_OK; +} + +// Wyswietlenie obecnych uslug gracza + +_showPlayerServices(id) { + if( !is_user_connected(id) ) + return; + + new name[64+1], sid[64+1], ip[32+1]; + get_user_name(id, name, charsmax(name)); + escape(name, charsmax(name)); + get_user_ip(id, ip, charsmax(ip), 1); + escape(ip, charsmax(ip)); + get_user_authid(id, sid, charsmax(sid)); + escape(sid, charsmax(sid)); + + new data[1]; data[0] = id; + formatex(szTemp, charsmax(szTemp), + "SELECT `service`, FROM_UNIXTIME(`expire`) AS `expire` FROM `%splayers_services` AS ps \ + LEFT JOIN `%sservices` AS s ON ps.service = s.id \ + WHERE ps.server = '%d' \ + AND ((ps.type = '%d' AND ps.auth_data = '%s') \ + OR (ps.type = '%d' AND ps.auth_data = '%s') \ + OR (ps.type = '%d' AND ps.auth_data = '%s'))", + TABLE_PREFIX, TABLE_PREFIX, server_id, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid + ); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayerServices", szTemp, data, sizeof(data)); +} + +public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { + new id = data[0]; + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + client_print_color(id, Red, "^4[%s] ^1Niestety, nie udalo sie pozyskac informacji o Twoich uslugach.", PREFIX); + return; + } + + new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); + + while(SQL_MoreResults(Query)) { + new service[MAX_ID+1], expire[32+1], item_text[128]; + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), service, charsmax(service)); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire"), expire, charsmax(expire)); + + formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service, expire); + menu_additem(menu, item_text); + + SQL_NextRow(Query); + } + + if( menu_items(menu) ) + menu_display(id, menu); + else + client_print_color(id, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); +} + +public showPlayerServices_handler(id, menu, item) { + menu_destroy(menu); +} + +// Funkcje dotyczace flag graczy + +public pre_usersReload(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: pre_usersReload"); + #endif + + if(ostatnie_przeladowanie+10 > get_systime()) { + client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: pre_usersReload"); + #endif + return; + } + ostatnie_przeladowanie = get_systime(); + _usersReload(id); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: pre_usersReload"); + #endif +} + +_usersReload(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _usersReload"); + #endif + + for(new i = 1; i <= get_maxplayers(); ++i) { + if( !is_user_connected(i) ) + continue; + + _usersCheckUser(i); + } + if( id ) + client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _usersReload"); + #endif +} + +// Funkcja wczytujaca z bazy ponownie dane graczy +public usersReloadData() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: usersReloadData"); + #endif + + // Wczytywanie danych graczy + _usersLoad(true); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: usersReloadData"); + #endif +} + +_usersLoad(bool:reload) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _usersLoad"); + #endif + + // Czyscimy dotychczasowe dane + ArrayClear(players_flags); + players_loaded = false; + + new ip[16], port[8]; + split(server_ip, ip, charsmax(ip), port, charsmax(port), ":"); + + formatex(szTemp, charsmax(szTemp), + "SELECT f.id, f.type, f.auth_data, f.password, f.a, f.b, f.c, f.d, f.e, f.f, f.g, f.h, f.i, f.j, f.k, f.l, f.m, f.n, f.o, f.p, f.q, f.r, f.s, f.t, f.u, f.y, f.v, f.w, f.x, f.z \ + FROM `%splayers_flags` AS f \ + JOIN `%sservers` AS s ON s.id = f.server \ + WHERE s.ip = '%s' \ + AND s.port = '%s' \ + ORDER BY f.auth_data, f.type DESC", + TABLE_PREFIX, TABLE_PREFIX, ip, port + ); + + new data[1]; data[0] = reload; // Przeladuj liste adminow w amxbans + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayersData", szTemp, data, sizeof data); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _usersLoad"); + #endif +} + +public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getPlayersData"); + #endif + + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: getPlayersData"); + #endif + return; + } + + while(SQL_MoreResults(Query)) + { + new player_flags[e_PlayerFlags], type; + type = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "type")); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "auth_data"), player_flags[pfPLAYER], 32); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), player_flags[pfPASSWORD], MAX_PASSWORD); + + for(new i = 0; i < strlen(all_flags); ++i) { + new temp[4]; + formatex(temp, charsmax(temp), "%c", all_flags[i]); + new expire = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, temp)); + if( expire > get_systime() || expire == -1 ) + player_flags[pfFLAGS] |= read_flags(temp); + } + + if( type == TYPE_SID ) + player_flags[pfTYPE] = FLAG_AUTHID|FLAG_NOPASS; + else if( type == TYPE_IP ) + player_flags[pfTYPE] = FLAG_IP; + else + player_flags[pfTYPE] = FLAG_NICK|FLAG_KICK; + + //Dodanie do tablicy + if( player_flags[pfFLAGS] != 0 ) { + ArrayPushArray(players_flags, player_flags); + } + + SQL_NextRow(Query); + } + + players_loaded = true; + + if( data[0] && is_amxbans ) {// Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien + server_cmd("amx_reloadadmins"); + } + else { + // Sprawdzamy uprawnienia graczy + _usersReload(0); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getPlayersData"); + #endif +} + +public amxbans_sql_initialized() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: amxbans_sql_initialized"); + #endif + + is_amxbans = true; + addUsersToGlobalArray(); + // Sprawdzamy uprawnienia graczy + _usersReload(0); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: amxbans_sql_initialized"); + #endif +} + +// Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy +public addUsersToGlobalArray() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: addUsersToGlobalArray"); + #endif + + if( !players_loaded ) { // Dane uzytkownikow nie zostaly jeszcze zaladowane + set_task(0.1, "addUsersToGlobalArray"); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: addUsersToGlobalArray"); + #endif + return; + } + + // Potrzebujemy drugiej tablicy, zeby elementy z amxbansa mialy takie samo id + new Array:users, Array:users2; + users = ArrayCreate(e_PlayerFlags); + users2 = ArrayCreate(e_PlayerFlags); + + for(new i = 0; i < ArraySize(players_flags); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(players_flags, i, player_flags); + ArrayPushArray(users, player_flags); + } + + for(new i = 0; i < admins_num(); ++i) { + new player_flags[e_PlayerFlags], name_bak[33]; + + admins_lookup(i, AdminProp_Auth, player_flags[pfPLAYER], 32); + copy(name_bak, charsmax(name_bak), player_flags[pfPLAYER]); + strtolower(name_bak); + + admins_lookup(i, AdminProp_Password, player_flags[pfPASSWORD], MAX_PASSWORD); + + player_flags[pfTYPE] = admins_lookup(i, AdminProp_Flags); + player_flags[pfFLAGS] = admins_lookup(i, AdminProp_Access); + + new l = 0, p = ArraySize(users)-1, s; + while(l <= p) { + new player_flags2[e_PlayerFlags]; + s = (l + p) / 2; + + ArrayGetArray(users, s, player_flags2); + strtolower(player_flags2[pfPLAYER]); + if( equali(name_bak, player_flags2[pfPLAYER]) && player_flags[pfTYPE] == player_flags2[pfTYPE] ) { + // Zostawiamy haslo AMXBansa + player_flags[pfFLAGS] |= player_flags2[pfFLAGS]; + ArrayPushArray(users2, player_flags); + ArrayDeleteItem(users, s); + break; + } + else if( strcmp(name_bak, player_flags2[pfPLAYER]) > 0 ) { + l = s + 1; + } + else if( equali(name_bak, player_flags2[pfPLAYER]) && _getOrderOfType(player_flags[pfTYPE]) > _getOrderOfType(player_flags2[pfTYPE]) ) { + l = s + 1; + } + else { + p = s - 1; + } + } + + if( p < l ) { + ArrayPushArray(users2, player_flags); + } + } + admins_flush(); + + for(new i = 0; i < ArraySize(users2); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(users2, i, player_flags); + admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); + } + for(new i = 0; i < ArraySize(users); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(users, i, player_flags); + admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: addUsersToGlobalArray"); + #endif +} + +_getOrderOfType(type) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _getOrderOfType"); + #endif + + switch(type) { + case FLAG_IP: return 1; + case FLAG_NICK : return 2; + case FLAG_AUTHID: return 3; + } + + return 0; +} + +public usersCheckUser_task(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: sersCheckUser_task"); + #endif + + _usersCheckUser(id-TASK_CHECK_USER); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: sersCheckUser_task"); + #endif +} + +public _usersCheckUser(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _usersCheckUser"); + #endif + + if( !players_loaded ) { + if( !task_exists(TASK_CHECK_USER+id) ) + set_task(0.1, "usersCheckUser_task", TASK_CHECK_USER+id); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _usersCheckUser"); + #endif + return; + } + + for(new i = 0; i < ArraySize(players_flags); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(players_flags, i, player_flags); + + if( player_flags[pfTYPE]&FLAG_NICK ) { + new name[32]; + get_user_name(id, name, charsmax(name)); + if( !equali(name, player_flags[pfPLAYER]) ) + continue; + } + else if( player_flags[pfTYPE]&FLAG_IP ) { + new ip[32]; + get_user_ip(id, ip, charsmax(ip), 1); + if( !equali(ip, player_flags[pfPLAYER]) ) + continue; + } + else if( player_flags[pfTYPE]&FLAG_AUTHID ) { + new sid[32], arr_sid[32]; + copy(arr_sid, charsmax(arr_sid), player_flags[pfPLAYER]); + get_user_authid(id, sid, charsmax(sid)); + + strtolower(arr_sid); + strtolower(sid); + replace(sid, charsmax(sid), "steam_", ""); + replace(arr_sid, charsmax(arr_sid), "steam_", ""); + + if( !equali(sid, arr_sid) ) + continue; + } + + if( strlen(player_flags[pfPASSWORD]) ) { + new password[33], password_md5[34]; + + get_user_info(id, "_pw", password, charsmax(password)); + md5(password, password_md5); + + if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { + get_user_info(id, "_pw2", password, charsmax(password)); + md5(password, password_md5); + if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { + get_user_info(id, "_pw3", password, charsmax(password)); + md5(password, password_md5); + if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { + get_user_info(id, "_ss", password, charsmax(password)); + md5(password, password_md5); + if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { + if( !(player_flags[pfTYPE]&FLAG_KICK) ) // Nie kickuj gracza, tylko mu nie przydziel flag + continue; + + server_cmd("kick #%d ^"Bledne haslo^"", get_user_userid(id)); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: _usersCheckUser"); + #endif + return; + } + } + } + } + } + + set_user_flags(id, player_flags[pfFLAGS]); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end3: _usersCheckUser"); + #endif +} + +public brakSciezki(id, path[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: brakSciezki"); + #endif + + dodajLog2(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); + log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); + if( id ) + client_print_color(id, Blue, "^4[%s] ^1Wystapil ^3blad ^1przy zapisywaniu ustawien. Prawdopodobnie ^4brak uprawnien^1.", PREFIX); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: brakSciezki"); + #endif +} + +public reklama() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: reklama"); + #endif + + if(get_playersnum()>1) { + client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, sklep_komenda); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: reklama"); + #endif +} + +public dodajLog2(id, const szFormat[], any:...) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: dodajLog2"); + #endif + + #if defined LOGING + new szText[256], name[33], ip[22], sid[22]; + vformat(szText, charsmax(szText), szFormat, 3); + get_user_name(id, name, charsmax(name)); + get_user_ip(id, ip, charsmax(ip), 1); + get_user_authid(id, sid, charsmax(sid)); + + if(id) format(szText, charsmax(szText), "%s; %s; %s. %s", name, ip, sid, szText); + + log_to_sql(szText, charsmax(szText)); + #endif + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: dodajLog2"); + #endif +} + +public log_to_sql(text[], text_len) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: log_to_sql"); + #endif + + format(text, text_len, "%s. Serwer: %d", text, server_id); + SQL_QuoteString(Empty_Handle, text, text_len, text); + + formatex(szTemp, charsmax(szTemp), "INSERT INTO `%slogs` (text) VALUES ('%s')", TABLE_PREFIX, text); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: log_to_sql"); + #endif +} + +public getServerData(FailState, Handle:Query, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getServerData"); + #endif + + sql_connected = true; + if(FailState != TQUERY_SUCCESS) { + log_to_file(LOG_FILE, "Tresc bledu ( %d ): %s", Errorcode, Error ); + + SQL_GetQueryString(Query, szTemp, charsmax(szTemp)); + log_to_file(LOG_FILE, "Zapytanie: %s", szTemp); + + if(FailState == TQUERY_QUERY_FAILED) { + if(containi(Error, "exist") != -1) _error22(Errorcode, Error); + else _error15("getServerData", Errorcode, Error); + } + else if( FailState == TQUERY_CONNECT_FAILED ) { + sql_connected = false; + _error41(Errorcode, Error); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getServerData"); + #endif + return; + } + + _error40(); + } + + if(SQL_NumResults(Query) <= 0) { + _error21(); + } + + // Pobranie id serwera + server_id = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id")); + + // Pobranie uslugi obslugujacej platnosci + new sms_service[64]; + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms_service"), sms_service, charsmax(sms_service)); + if( strlen(sms_service) ) + copy(st_sms_service, charsmax(st_sms_service), sms_service); + + // Pobranie ustawien sklepu + formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%ssettings` WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_login', 'license_password')", TABLE_PREFIX); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getSettings", szTemp); + + // Aktualizacja informacji o serwerze + formatex(szTemp, charsmax(szTemp), "UPDATE `%sservers` SET `type` = 'amxx', `version` = '%s' WHERE `id` = '%d'", TABLE_PREFIX, VERSION, server_id); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); + + // Sprawdzanie dostepnosci usług + new service_id[MAX_NAME+1], ids[512], ids_len = 0, ids_max = charsmax(ids); + for(new i = 0; i < ArraySize(service_ids); ++i) { + ArrayGetString(service_ids, i, service_id, charsmax(service_id)); + + if( SQL_FieldNameToNum(Query, service_id) > -1 && SQL_ReadResult(Query, SQL_FieldNameToNum(Query, service_id)) ) { + if( ids_len ) + ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); + + ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service_id); + } + else { // Usługa nieaktywna, lub brak usługi + // Zatrzymaj plugin uslugi + new plugin_name[64]; + get_plugin(ArrayGetCell(service_plugins, i), plugin_name, charsmax(plugin_name)); + pause("acd", plugin_name); + ArrayDeleteItem(service_ids, i); + ArrayDeleteItem(service_plugins, i); + i -= 1; + } + } + + // Jest chociaz jedna usluga, wiec pobieramy dane o uslugach + if( ids_len ) { + formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%sservices` WHERE `id` IN(%s) ORDER BY `order` ASC", TABLE_PREFIX, ids); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getServicesData", szTemp); + } + else + // Sprawdz zaladowane uslugi + checkLoadedServices(); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: getServerData"); + #endif +} + +public getServicesData(FailState, Handle:Query, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getServicesData"); + #endif + + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + _error12(); + } + + new service[e_Service]; + new ids[512], ids_len = 0, ids_max = charsmax(ids); + while(SQL_MoreResults(Query)) + { + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), service[sID], MAX_ID); + service[PLUGIN] = _getServicePluginByID(service[sID]); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), service[sNAME], MAX_NAME); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "short_description"), service[DESCRIPTION], MAX_DESCRIPTION); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tag"), service[TAG], MAX_SERVICE_TAG); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "flags"), service[FLAGS], 26); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "groups"), service[GROUPS], 32); + service[TYPES] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "types")); + + ArrayPushArray(services, service); + + // Wyslanie danych uslugi do pluginu + new ret, forward_handle; + forward_handle = CreateOneForward(service[PLUGIN], "ss_service_data", FP_STRING, FP_STRING); + ExecuteForward(forward_handle, ret, service[sNAME], service[FLAGS]); + DestroyForward(forward_handle); + + // Przygotowywanie zapytania o priceliste + if( ids_len ) + ids_len += formatex(ids[ids_len], ids_max-ids_len, ",", szTemp); + + ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service[sID]); + + SQL_NextRow(Query); + } + + // Sprawdz zaladowane uslugi + checkLoadedServices(); + + // Jest chociaz jedna usluga + if( ids_len ) { + formatex(szTemp, charsmax(szTemp), + "SELECT * FROM `%spricelist` \ + WHERE (`server`='%d' OR `server`='-1') AND `service` IN (%s) \ + ORDER BY `amount` ASC", + TABLE_PREFIX, server_id, ids + ); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPriceList", szTemp); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getServicesData"); + #endif +} + +public getPriceList(FailState, Handle:Query, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getPriceList"); + #endif + + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getPriceList"); + #endif + return; + } + + while(SQL_MoreResults(Query)) + { + new price[e_Price]; + + price[pTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_ID); + price[AMOUNT] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "amount")); + + ArrayPushArray(pricelist, price); + + SQL_NextRow(Query); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: getPriceList"); + #endif +} + +public getSettings(FailState, Handle:Query, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getSettings"); + #endif + + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getSettings"); + #endif + return; + } + + new key[128], value[256]; + while( SQL_MoreResults(Query) ) { + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "key"), key, charsmax(key)); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "value"), value, charsmax(value)); + + if(equali(key, "currency")) + copy(st_currency, charsmax(st_currency), value); + else if(equali(key, "shop_url")) { + copy(st_shop_url, charsmax(st_shop_url), value); + replace(st_shop_url, charsmax(st_shop_url), "http://www.", ""); + replace(st_shop_url, charsmax(st_shop_url), "http://", ""); + + if( strlen(st_shop_url) == 0 ) { + _error33(); + } + + if(st_shop_url[strlen(st_shop_url)-1] != '/') + format(st_shop_url, charsmax(st_shop_url), "%s/", st_shop_url); + + split(st_shop_url, shop_url, charsmax(shop_url), shop_url_add, charsmax(shop_url_add), "/"); + + format(shop_url_add, charsmax(shop_url_add), "/%s", shop_url_add); + } + else if(equali(key, "signature")) + copy(st_signature, charsmax(st_signature), value); + else if( equali(key, "sms_service") && !strlen(st_sms_service) ) + copy(st_sms_service, charsmax(st_sms_service), value); + else if(equali(key, "contact")) + copy(st_contact, charsmax(st_contact), value); + else if(equali(key, "vat")) + st_vat = str_to_float(value); + else if(equali(key, "random_key")) { + copy(st_random_key, charsmax(st_random_key), value); + // Hashujemy random key + md5(st_random_key, st_random_key_md5); + } + else if(equali(key, "license_login")) { + copy(license, charsmax(license), value); + trim(license); + } + else if(equali(key, "license_password")) { + copy(license_password, charsmax(license_password), value); + } + + SQL_NextRow(Query); + } + + // Sprawdzamy czy licencja jest prawidłowa + validateLicense(); + + // Pobranie numerow sms + escape(st_sms_service, charsmax(st_sms_service)); + formatex(szTemp, charsmax(szTemp), "SELECT `number`, `tariff` FROM `%ssms_numbers` WHERE `service` = '%s'", TABLE_PREFIX, st_sms_service); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getSMSesData", szTemp); + + // Pobranie danych o serwisie transakcyjnym + formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%stransaction_services` WHERE `id` = '%s'", TABLE_PREFIX, st_sms_service); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getTransactionServiceData", szTemp); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: getSettings"); + #endif +} + +// Funkcja ktora wysyla zapytanie do serwera o sprawdzenie czy licencja jest prawidlowa +public validateLicense() { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: validateLicense"); + #endif + + // Sprawdzenie licencji + new szUrl[512], szName[128]; + get_cvar_string("hostname", server_name, charsmax(server_name)); + StringURLEncode(server_name, szName, charsmax(szName)); // Escaepowanie adresu url + + formatex(szUrl, charsmax(szUrl), + "/license.php?action=login_server&type=engine_amxx&license_id=%s&license_password=%s&server_ip=%s&version=%s&name=%s", + license, license_password, server_ip, VERSION, szName + ); + sendSocket(0, "license.sklep-sms.pl", szUrl, "validate_license"); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: validateLicense"); + #endif +} + +public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getTransactionServiceData"); + #endif + + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getTransactionServiceData"); + #endif + return; + } + + if( SQL_NumResults(Query) <= 0 ) { + _error31(); + } + + if( !SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms")) ) { + _error32(); + } + + new data[256]; + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), transaction_service[tsID], MAX_ID); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), transaction_service[tsNAME], MAX_NAME); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "data"), data, charsmax(data)); + if( !json_decode(data, "sms_text", transaction_service[SMS_TEXT], MAX_SMS_TEXT) ) + log_to_file(LOG_FILE, "Nie udalo sie pobrac kodu sms."); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: getTransactionServiceData"); + #endif +} + +public getSMSesData(FailState, Handle:Query, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getSMSesData"); + #endif + + if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getSMSesData"); + #endif + return; + } + + new sms[e_SMS]; + while(SQL_MoreResults(Query)) + { + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "number"), sms[NUMBER], MAX_NUMBER); + sms[sTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); + ArrayPushArray(smses, sms); + + SQL_NextRow(Query); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: getSMSesData"); + #endif +} + +_checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _checkForSQLErrors"); + #endif + + sql_connected = true; + if(FailState != TQUERY_SUCCESS) { + if(FailState == TQUERY_QUERY_FAILED) + log_to_file(LOG_FILE, "Nie mozna podlaczyc sie do bazy danych."); + else if(FailState == TQUERY_CONNECT_FAILED) { + log_to_file(LOG_FILE, "Zapytanie anulowane."); + sql_connected = false; + } + + log_to_file(LOG_FILE, "Tresc bledu ( %d ): %s", Errorcode, Error ); + + SQL_GetQueryString(Query, szTemp, charsmax(szTemp)); + log_to_file(LOG_FILE, "Zapytanie: %s", szTemp); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _checkForSQLErrors"); + #endif + return PLUGIN_HANDLED; + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: _checkForSQLErrors"); + #endif + return PLUGIN_CONTINUE; +} + +public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: IgnoreHandle"); + #endif + + _checkForSQLErrors(Query, FailState, Error, Errorcode); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: IgnoreHandle"); + #endif +} + +/* ######################################################################################################################### + * ############################################### Zewnetrzne funkcje ###################################################### + * ######################################################################################################################### + */ + +public registerService(plugin, params) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: registerService"); + #endif + + if(params != 1) { + log_to_file(LOG_FILE, "Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: registerService"); + #endif + return SS_ERROR; + } + + new id[MAX_NAME+1]; + + get_string(1, id, charsmax(id)); + + ArrayPushCell(service_plugins, plugin); + ArrayPushString(service_ids, id); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: registerService"); + #endif + return SS_OK; +} + +// Dodawanie kodu do listy kodow do wykorzystania +public native_addCode(plugin, params) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: native_addCode"); + #endif + + if( params != 2 ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: native_addCode"); + #endif + return; + } + + new sms_code[MAX_CODE+1], tariff; + get_string(1, sms_code, charsmax(sms_code)); + tariff = get_param(2); + addCode(sms_code, tariff, 1); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: native_addCode"); + #endif +} + +// Logowanie danych z pluginow zewnetrznych +public dodajLog(plugin, params) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: dodajLog"); + #endif + + #if defined LOGING + new text[1024]; + vdformat(text, charsmax(text), 1, 2); + log_to_sql(text, charsmax(text)); + #endif + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: dodajLog"); + #endif +} + +public native_infoSMS(plugin, params) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: native_infoSMS"); + #endif + + if(params != 1) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: native_infoSMS"); + #endif + return SS_ERROR; + } + + infoSMS( get_param(1) ); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: native_infoSMS"); + #endif + return SS_OK; +} + +public bool:native_is_steam(plugin, params) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: native_is_steam"); + #endif + + if(params != 1) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: native_is_steam"); + #endif + return false; + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: native_is_steam"); + #endif + return is_steam( get_param(1) ); +} + +bool:is_steam(id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: is_steam"); + #endif + + new auth[32]; + get_user_authid(id, auth, charsmax(auth)); + if(contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: is_steam"); + #endif + return true; + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: is_steam"); + #endif + return false; +} + +/* ######################################################################################################################### + * ###################################################### LICENCJA ######################################################### + * ######################################################################################################################### + */ + +/* ############ Poczatek: Licencja ################ */ +public licenseUpdateActivity() { + /*new szUrl[256], szName[128] + get_user_name(0, server_name, charsmax(server_name)); + StringURLEncode(server_name, szName, charsmax(szName)); // Escaepowanie adresu url + formatex(szUrl, charsmax(szUrl), "%slicense.php?action=update_activity&license_id=%s&server_ip=%s&version=%s&name=%s", shop_url_add, license, server_ip, VERSION, szName); + sendSocket(0, "license.sklep-sms.pl", szUrl, "update_activity"); + + set_task(300.0, "licenseUpdateActivity");*/ +} + +// ######### TYPY BŁĘDÓW ########## +// ## 1 - licencja +// ## 2 - server w bazie +// ## 3 - metody płatnosci +// ## 4 - sklep ogolnie +// ################################ + +_error10() { + _make_error("Error 10 - Wystapil blad"); +} + +_error12() { + _make_error("Error 12 - Blad ladowania licencji"); +} + +_error13() { + new szText[128]; + formatex(szText, charsmax(szText), "Error 13 - Brak licencji o numerze identyfikacyjnym: %s lub bledne haslo.", license); + _make_error(szText); +} + +_error14() { + log_to_file(LOG_FILE, "Error 14 - Nie udalo sie zaktualizowac aktywnosci serwera."); + blocked = true; +} + +// Problemy programistyczne +_error15(details[], errorcode, error[]) { + #if defined DEBUG + if(errorcode) log_to_file(DEBUG, "%d: %s", errorcode, error); + log_to_file(DEBUG, "Error 15 - Zglos ten blad: seek@sklep-sms.pl lub GG: 8930366. Szczegoly: %s", details); + #endif +} + +// Problemy z serwerem w bazie +_error21() { + _make_error("Error 21 - Serwer nie znajduje sie nie liscie serwerow na stronie WWW."); +} + +_error22(errorcode, error[]) { + #if defined DEBUG + if(errorcode) log_to_file(DEBUG, "%d: %s", errorcode, error); + #endif + _make_error("Error 22 - Brak tabeli ss_servers w bazie."); +} + +// Metody Płatnosci +_error31() { + #if defined DEBUG + log_to_file(DEBUG, "Error 31 - Brak danej metody platnosci."); + #endif + blocked = true; +} + +_error32() { + #if defined DEBUG + log_to_file(DEBUG, "Error 32 - Wybrana metoda platnosci nie obsluguje platnosci SMS."); + #endif + blocked = true; +} + +_error33() { + #if defined DEBUG + log_to_file(DEBUG, "Error 33 - Brak podanego adresu sklepu w ustawieniach."); + #endif + blocked = true; +} + +// Niesprecyzowany blad +_error40() { + #if defined DEBUG + log_to_file(DEBUG, "Error 40 - Wystapil nieznany blad przy polaczeniu z baza sklepu."); + #endif + blocked = true; +} + +_error41(errorcode, error[]) { + #if defined DEBUG + if(errorcode) log_to_file(DEBUG, "%d: %s", errorcode, error); + #endif + log_to_file(LOG_FILE, "Error 41 - Nie mozna polaczyc sie z baza danych sklepu."); + blocked = true; +} + +_error42(details[]) { + log_to_file(DEBUG, "Error 42 - Zglos ten blad: seek@sklep-sms.pl lub GG: 8930366. Szczegoly: %s", details); +} + +_make_error(informacja[]) { + set_fail_state(informacja); +} +/* ############# Koniec: Licencja ################## */ + +// ######### Sockets ######### +public socket_polacz(id, szHost[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: socket_polacz"); + #endif + + new error; + if( sockets[id] ) { + closeSocket(id); + } + + sockets[id] = socket_open(szHost, 80, SOCKET_TCP, error); + //error = 3; + if( error ) { + if(is_user_connected(id)) + client_print_color(id, Red, "^4[%s] ^1Nie mozna polaczyc sie z serwerem.", PREFIX); + #if defined LOG_FILE + log_to_file(LOG_FILE, "Nie mozna polaczyc sie z hostem: %s. ID bledu: %d.", szHost, error); + #endif + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: socket_polacz"); + #endif + return 0; + } + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: socket_polacz"); + #endif + return 1; +} + +public socket_CheckData(szAction[], id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: socket_CheckData"); + #endif + + id -= TASK_CHECK_SOCKET; + if(!socket_change(sockets[id])) { + set_task(0.6, "socket_CheckData", TASK_CHECK_SOCKET+id, szAction, strlen(szAction)); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: socket_CheckData"); + #endif + return; + } + + new szData[1024]; + + socket_recv(sockets[id], szData, charsmax(szData)); + + if(contain(szData, "Status: 404") >= 0) { + #if defined DEBUG + log_to_file(DEBUG, "Nie znaleziono pliku. Akcja: %s", szAction); + #endif + closeSocket(id); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: socket_CheckData"); + #endif + return; + } + + //log_to_file(DEBUG, "%s", szData); + + if( equal(szAction, "purchase_service") ) { + new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[1024]; + + getXMLValue(szData, "return_value", return_value, charsmax(return_value)); + getXMLValue(szData, "text", szText, charsmax(szText)); + getXMLValue(szData, "positive", szPositive, charsmax(szPositive)); + getXMLValue(szData, "bsid", szBsid, charsmax(szBsid)); + getXMLValue(szData, "warnings", szWarnings, charsmax(szWarnings)); + + purchaseService_callback(id, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); + } + else if( equal(szAction, "validate_license") ) { + new text[33]; + + getXMLValue(szData, "text", text, charsmax(text)); + + if( equal(text, "updated") ) { + new szFooter[2]; + getXMLValue(szData, "footer", szFooter, charsmax(szFooter)); + footer = str_to_num(szFooter) ? true : false; + + //set_task(300.0, "licenseUpdateActivity"); + log_amx("Walidacja licencji o numerze identyfikacyjnym: %s zostala zakonczona pomyslnie", license); + shop_registered = true; + } + else if( equal(text, "not_updated") ) { + _error14(); + } + else if( equal(text, "not_logged_successfully") ) { + _error13(); + } + else { + #if defined DEBUG + log_to_file(DEBUG, "%s", szData); + #endif + _error10(); + } + } + else if( equal(szAction, "update_activity") ) { + new text[33]; + + getXMLValue(szData, "text", text, charsmax(text)); + + if( equal(text, "updated") ) { + blocked = false; + } + else if( equal(text, "not_updated") ) { + _error14(); + } + else if( equal(text, "not_logged") ) { + // Probujemy sie ponownie zalogowac + set_task(0.1, "validateLicense"); + } + } + + closeSocket(id); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end3: socket_CheckData"); + #endif +} + +public sendSocket(id, szHost[], szUrl[], szAction[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: sendSocket"); + #endif + + if( !socket_polacz(id, szHost) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: sendSocket"); + #endif + return; + } + + new szText[512]; + formatex(szText, charsmax(szText), "GET %s HTTP/1.1^r^nHost: %s^r^n^r^n", szUrl, szHost); + socket_send(sockets[id], szText, strlen(szText)); + + format(szText, charsmax(szText), "%s|%s", szAction, szText); + //Utworzenie nowego pseudo watku oczekujacego na odpowiedz + set_task(0.6, "socket_CheckData", TASK_CHECK_SOCKET+id, szAction, strlen(szAction)); + set_task(10.0, "socket_TimeOut", TASK_TIME_OUT+id, szText, strlen(szText)); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: sendSocket"); + #endif +} + +public socket_TimeOut(szData[], id) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: socket_TimeOut"); + #endif + + id -= TASK_TIME_OUT; + + new szAction[32], szText[512]; + split(szData, szAction, charsmax(szAction), szText, charsmax(szText), "|"); + + // Dodajemy szczegoly zapytania + log_to_file(DEBUG, "Wyslano zapytanie HTTP z akcja: %s, tresc: %s", szAction, szText); + + if( is_user_connected(id) ) client_print_color(id, Red, "^4[%s] ^1Przekroczono limit czasu polaczenia z serwerem.", PREFIX); + #if defined LOG_FILE + log_to_file(LOG_FILE, "Przekroczono limit czasu polaczenia z serwerem."); + #endif + closeSocket(id); + + if( equal(szAction, "validate_license") ) { + log_to_file(LOG_FILE, "Nie udalo sie przeprowadzic walidacji licencji o numerze identyfikacyjnym: %s", license); + shop_registered = false; + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: closeSocket"); + #endif +} + +public closeSocket(socketID) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: closeSocket"); + #endif + + socket_close(sockets[socketID]); + sockets[socketID] = 0; + remove_task(TASK_CHECK_SOCKET+socketID); + remove_task(TASK_TIME_OUT+socketID); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: closeSocket"); + #endif +} +// ######### Koniec Socketow ######### + +_getServicePluginByID( id[] ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _getServicePluginByID"); + #endif + + new temp[MAX_NAME+1]; + for(new i = 0; i < ArraySize(service_ids); ++i) { + ArrayGetString(service_ids, i, temp, charsmax(temp)); + if( equali(id, temp) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _getServicePluginByID"); + #endif + return ArrayGetCell(service_plugins, i); + } + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: _getServicePluginByID"); + #endif + return -1; +} + +/*_getServiceByID( id[] ) { + new service[e_Service]; + for(new i = 0; i < ArraySize(services); ++i) { + ArrayGetArray(services, i, service); + if( equal(id, service[sID] ) ) { + return i; + } + } + return -1; +}*/ + +_getNumberByTariff( tariff, number[], len ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: _getNumberByTariff"); + #endif + + new sms[e_SMS]; + for(new i = 0; i < ArraySize(smses); ++i) { + ArrayGetArray(smses, i, sms); + if( tariff == sms[sTARIFF] ) { + copy(number, len, sms[NUMBER]); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: _getNumberByTariff"); + #endif + return; + } + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: _getNumberByTariff"); + #endif +} + +/* Stocki */ +stock usunPusteLinie(sciezka[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: usunPusteLinie"); + #endif + + if( !file_exists(sciezka) ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: usunPusteLinie"); + #endif + return; + } + + new zastepcza[64], licznik = 0 + do { + formatex(zastepcza, charsmax(zastepcza), "%d", licznik); + ++licznik; + } while( file_exists(zastepcza) ) + + new szLine[128], iLen; + for(new i=0; read_file(sciezka, i, szLine, charsmax(szLine), iLen); i++) { + trim(szLine); + // pusta linia + if (!strlen(szLine)) + continue; + + write_file(zastepcza, szLine, -1); + } + + if(file_size(zastepcza)>1) { + //Usuwa stary plik + unlink(sciezka); + //Zmienia nazwe tymczasowego pliku na stary plik + rename_file(zastepcza, sciezka, 1); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: usunPusteLinie"); + #endif +} + +stock escape(string[], string_len=64) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: escape"); + #endif + + replace_all(string, string_len, "'", "\'"); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: escape"); + #endif + return 1; +} + +stock get_sms_cost(szNumber[]) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: get_sms_cost"); + #endif + + if(strlen(szNumber) < 4) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: get_sms_cost"); + #endif + return 0; + } + else if(szNumber[0] == '7') { + new temp[4]; + formatex(temp, charsmax(temp), "%c", szNumber[1]); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end2: get_sms_cost"); + #endif + return szNumber[1] == '0' ? 50 : str_to_num(temp)*100; + } + else if(szNumber[0] == '9') { + new temp[4]; + formatex(temp, charsmax(temp), "%c%c", szNumber[1], szNumber[2]); + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end3: get_sms_cost"); + #endif + return str_to_num(temp)*100; + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end4: get_sms_cost"); + #endif + return 0; +} + +stock two_number_value(value) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: two_number_value"); + #endif + + new temp[17]; + if( value < 10 ) + formatex(temp, charsmax(temp), "0%d", value); + else + formatex(temp, charsmax(temp), "%d", value); + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: two_number_value"); + #endif + + return temp; +} + +stock groupDigits(a, output[], len) { + setc(output, len, 0); + new number[32]; + num_to_str(a, number, charsmax(number)); + + for(new i = 0; i < strlen(number); ++i) { + if(i && i % 3 == 0) + format(output, len, " %s", output); + + format(output, len, "%c%s", number[strlen(number) - 1 - i], output); + } +} + +stock getXMLValue(szText[], tag[], output[], len) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: getXMLValue"); + #endif + + new temp[64], textStart, textEnd; + + formatex(temp, charsmax(temp), "<%s>", tag); + textStart = contain(szText, temp); + + formatex(temp, charsmax(temp), "", tag); + textEnd = contain(szText, temp); + + if ( textStart >= 0 ) + { + new tag_len = 2 + strlen(tag); + copy(output, min(len, textEnd - textStart - tag_len), szText[textStart + tag_len]); + } + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: getXMLValue"); + #endif +} + +stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen ) { + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "start: StringURLEncode"); + #endif + + static const HEXCHARS[ 16 ] = { + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 + }; + + new iPos, cChar, iFLen; + while( ( cChar = szInput[ iPos ] ) && iFLen < iLen ) + { + if( cChar == 0x20 ) { + szOutput[ iFLen++ ] = 0x2B; + } + else if( !( 0x41 <= cChar <= 0x5A ) + && !( 0x61 <= cChar <= 0x7A ) + && !( 0x30 <= cChar <= 0x39 ) + && cChar != 0x2D + && cChar != 0x2E + && cChar != 0x5F ) + { + if( ( iFLen + 3 ) > iLen ) { + break; + } + else if( cChar > 0xFF || cChar < 0x00 ) { + cChar = 0x2A; + } + + szOutput[ iFLen++ ] = 0x25; + szOutput[ iFLen++ ] = HEXCHARS[ cChar >> 4 ]; + szOutput[ iFLen++ ] = HEXCHARS[ cChar & 15 ]; + } + else { + szOutput[ iFLen++ ] = cChar; + } + + iPos++; + } + + szOutput[ iFLen ] = 0; + + #if defined TRACE_FILE + log_to_file(TRACE_FILE, "end1: StringURLEncode"); + #endif + + return iFLen; +} + +stock bool:json_decode(const string[], const key[], output[], output_len) { + new pos = 0; + new len = strlen(string); + new key_start, key_len; + new temp_key[ 512 ]; + new value_start, value_len; + new escaped = false; + + while( pos < len ) { + + while( string[pos] != '"' ) pos++; + + // Pozyskujemy nazwe klucza + key_start = pos + 1; + escaped = false; + while( ++pos < len ) { + if( pos == len ) + return false; + + if( escaped ) + escaped = false; + else if( string[ pos ] == '\' ) + escaped = true; + else if( string [ pos ] == '"' ) + break; + } + if( pos == len ) return false; + + if( !(key_len = pos - key_start) ) + continue; + + copy(temp_key, min(charsmax(temp_key), key_len), string[key_start]); + + pos++; // Przechodzimy o jeden dalej, bo zatrzymalismy sie na znaku '"' + while( pos < len && isspace( string[pos] ) ) ++pos; + if( pos == len ) return false; + + if( string[ pos ] != ':' ) + continue; + + pos++; // Przechodzimy o jeden dalej, bo zatrzymalismy sie na znaku ':' + + while( pos < len && isspace( string[pos] ) ) ++pos; + if( pos == len ) return false; + + value_start = pos; + + pos--; // Wracamy o jeden, bo pozniej mamy pre inkrementacje + while( ++pos < len ) { + if( escaped ) + escaped = false; + else if( string[ pos ] == '\' ) + escaped = true; + else if( string [ pos ] == ',' || string [ pos ] == '}' ) + break; + } + if( pos == len ) return false; + + if( !(value_len = pos - value_start) ) + continue; + + // Jezeli klucz jest inny niz ten w argumencie funkcji, to nie kopiuj jego value + if( !equal(temp_key, key) ) + continue; + + copy(output, min(output_len, value_len), string[value_start]); + trim(output); + remove_quotes(output); + + return true; + } + + return false; +} From 618476b2dcdef79e3d421618cc28b294f75532ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jul 2015 00:50:41 +0200 Subject: [PATCH 002/124] Added ability for user to check its services. --- sklep_sms.sma | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index d42fd4d..79e270a 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -1171,7 +1171,7 @@ _showPlayerServices(id) { new data[1]; data[0] = id; formatex(szTemp, charsmax(szTemp), - "SELECT `service`, FROM_UNIXTIME(`expire`) AS `expire` FROM `%splayers_services` AS ps \ + "SELECT s.name AS `service`, FROM_UNIXTIME(ps.expire) AS `expire`, ps.expire AS `expire_num` FROM `%splayers_services` AS ps \ LEFT JOIN `%sservices` AS s ON ps.service = s.id \ WHERE ps.server = '%d' \ AND ((ps.type = '%d' AND ps.auth_data = '%s') \ @@ -1194,7 +1194,11 @@ public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], da while(SQL_MoreResults(Query)) { new service[MAX_ID+1], expire[32+1], item_text[128]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), service, charsmax(service)); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire"), expire, charsmax(expire)); + + if( SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire_num")) == -1 ) + copy(expire, charsmax(expire), "Nigdy"); + else + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire"), expire, charsmax(expire)); formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service, expire); menu_additem(menu, item_text); @@ -1202,8 +1206,10 @@ public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], da SQL_NextRow(Query); } - if( menu_items(menu) ) + if( menu_items(menu) ) { + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(id, menu); + } else client_print_color(id, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); } From 425600073b12a2aad23234e12d88f0900e27f6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 10 Jul 2015 19:53:41 +0200 Subject: [PATCH 003/124] Added support for many-to-many services-servers. --- sklep_sms.sma | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index 79e270a..1eebe19 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -318,7 +318,14 @@ public plugin_cfg() { new ip[22], port[10]; split(server_ip, ip, charsmax(ip), port, charsmax(port), ":"); - formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%sservers` WHERE `ip` = '%s' AND `port` = '%s'", TABLE_PREFIX, ip, port); + formatex(szTemp, charsmax(szTemp), + "SELECT s.id, s.name, s.sms_service, CONCAT(' ', GROUP_CONCAT( ss.service_id SEPARATOR ' ' ), ' ') AS `services` \ + FROM `%sservers` AS s \ + LEFT JOIN `%sservers_services` AS ss ON ss.server_id = s.id \ + WHERE s.ip = '%s' AND s.port = '%s' \ + GROUP BY s.id", + TABLE_PREFIX, TABLE_PREFIX, ip, port + ); //log_to_file(LOG_FILE, szTemp); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getServerData", szTemp); @@ -1677,6 +1684,10 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) { SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms_service"), sms_service, charsmax(sms_service)); if( strlen(sms_service) ) copy(st_sms_service, charsmax(st_sms_service), sms_service); + + // Pozyskanie uslug na serwerze + new szServices[512]; + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "services"), szServices, charsmax(szServices)); // Pobranie ustawien sklepu formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%ssettings` WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_login', 'license_password')", TABLE_PREFIX); @@ -1687,11 +1698,12 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) { if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); // Sprawdzanie dostepnosci usług - new service_id[MAX_NAME+1], ids[512], ids_len = 0, ids_max = charsmax(ids); + new service_id[MAX_NAME+2+1], ids[512], ids_len = 0, ids_max = charsmax(ids); for(new i = 0; i < ArraySize(service_ids); ++i) { ArrayGetString(service_ids, i, service_id, charsmax(service_id)); + format(service_id, charsmax(service_id), " %s ", service_id); - if( SQL_FieldNameToNum(Query, service_id) > -1 && SQL_ReadResult(Query, SQL_FieldNameToNum(Query, service_id)) ) { + if( containi(szServices, service_id) != -1 ) { if( ids_len ) ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); From 96bb3d5d2dc368997036e06a25fe3b00411f1564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 16 Jul 2015 01:35:53 +0200 Subject: [PATCH 004/124] Bug fix: QuoteString does not work properly. --- sklep_sms.sma | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index 1eebe19..000a3dc 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -1633,7 +1633,7 @@ public log_to_sql(text[], text_len) { #endif format(text, text_len, "%s. Serwer: %d", text, server_id); - SQL_QuoteString(Empty_Handle, text, text_len, text); + escape(text, text_len); formatex(szTemp, charsmax(szTemp), "INSERT INTO `%slogs` (text) VALUES ('%s')", TABLE_PREFIX, text); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); @@ -1698,12 +1698,12 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) { if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); // Sprawdzanie dostepnosci usług - new service_id[MAX_NAME+2+1], ids[512], ids_len = 0, ids_max = charsmax(ids); + new service_id[MAX_NAME+1], service_id_space[MAX_NAME+2+1], ids[512], ids_len = 0, ids_max = charsmax(ids); for(new i = 0; i < ArraySize(service_ids); ++i) { ArrayGetString(service_ids, i, service_id, charsmax(service_id)); - format(service_id, charsmax(service_id), " %s ", service_id); + formatex(service_id_space, charsmax(service_id_space), " %s ", service_id); - if( containi(szServices, service_id) != -1 ) { + if( containi(szServices, service_id_space) != -1 ) { if( ids_len ) ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); From f0bb4230ee9ab94f7dec6cf63ded8b51e9f22f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 16 Jul 2015 23:50:50 +0200 Subject: [PATCH 005/124] Regression to 3.2.3 --- sklep_sms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index d42fd4d..5517f7f 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -1024,7 +1024,7 @@ public kodZwrotny(id) { StringURLEncode(ip, u_ip, charsmax(u_ip)); formatex(szUrl, charsmax(szUrl), - "%sservers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=engine_amxx&language=polish", + "%sservers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=cs16&language=polish", shop_url_add, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, server_id, u_sms_service, u_sms_code, price[pTARIFF], u_ip ); sendSocket(id, shop_url, szUrl, "purchase_service"); @@ -1620,7 +1620,7 @@ public log_to_sql(text[], text_len) { #endif format(text, text_len, "%s. Serwer: %d", text, server_id); - SQL_QuoteString(Empty_Handle, text, text_len, text); + escape(text, text_len); formatex(szTemp, charsmax(szTemp), "INSERT INTO `%slogs` (text) VALUES ('%s')", TABLE_PREFIX, text); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); From 6d75402d9e40609f94af35b25edb31989ab25ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 21 Jul 2015 14:51:39 +0200 Subject: [PATCH 006/124] Code improvements --- services/sklepsms_usluga_bf2_odznaki.sma | 30 ++++---- services/sklepsms_usluga_cod_exp.sma | 6 +- services/sklepsms_usluga_cod_exp2.sma | 6 +- services/sklepsms_usluga_cod_te.sma | 76 +++++++++---------- services/sklepsms_usluga_dodatkowe_flagi.sma | 4 +- services/sklepsms_usluga_gxm_bm.sma | 4 +- services/sklepsms_usluga_gxm_exp.sma | 4 +- services/sklepsms_usluga_rezerwacja_nicku.sma | 6 +- services/sklepsms_usluga_rezerwacja_slota.sma | 4 +- services/sklepsms_usluga_vip.sma | 4 +- services/sklepsms_usluga_vippro.sma | 4 +- services/sklepsms_usluga_zp_ap.sma | 4 +- sklep_sms.sma | 2 +- 13 files changed, 77 insertions(+), 77 deletions(-) diff --git a/services/sklepsms_usluga_bf2_odznaki.sma b/services/sklepsms_usluga_bf2_odznaki.sma index cd12fa3..0941b40 100644 --- a/services/sklepsms_usluga_bf2_odznaki.sma +++ b/services/sklepsms_usluga_bf2_odznaki.sma @@ -27,17 +27,17 @@ public plugin_cfg() { ss_register_service(service_id); } -public ss_service_chosen(id,amount) { - new menu = menu_create("Wybierz odznake:","menuHandler") +public ss_service_chosen(id, amount) { + new menu = menu_create("Wybierz odznake:", "menuHandler") new menu_callback = menu_makecallback("menuCallback"); new nazwa[64] for(new i = 0; i < bf2_get_maxbadges(); ++i) { - bf2_get_badge_name(i,amount,nazwa,charsmax(nazwa)) + bf2_get_badge_name(i, amount, nazwa, charsmax(nazwa)) new data[2] data[0] = i+1 - data[1] = bf2_get_user_badge(id,i) >= amount ? 0 : 1 + data[1] = bf2_get_user_badge(id, i) >= amount ? 0 : 1 - menu_additem(menu,nazwa,data,0,menu_callback) + menu_additem(menu, nazwa, data, 0, menu_callback) } menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); @@ -62,7 +62,7 @@ public ss_service_chosen(id,amount) { public menuCallback(id, menu, item) { new data[3], iName[2]; new zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data,charsmax(data), iName, charsmax(iName), callback); + menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); return data[1] ? ITEM_ENABLED : ITEM_DISABLED //return ITEM_ENABLED @@ -78,11 +78,11 @@ public wyswietlMenu(data[]) { new menu, newmenu, page player_menu_info(id, menu, newmenu, page) if(newmenu != data[1]) - menu_display(id,data[1],stronaP[id]) + menu_display(id, data[1], stronaP[id]) else stronaP[id] = page - set_task(0.1,"wyswietlMenu",TASK_MENU1+id, data, 2) + set_task(0.1, "wyswietlMenu", TASK_MENU1+id, data, 2) } } @@ -100,7 +100,7 @@ public menuHandler(id, menu, item) { new data[2], iName[2]; new zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data,charsmax(data), iName, charsmax(iName), callback); + menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); dane[id] = data[0]-1 @@ -111,20 +111,20 @@ public menuHandler(id, menu, item) { } } -public ss_service_bought(id,amount) { +public ss_service_bought(id, amount) { new badge_id = dane[id]; new badge_level = amount; - if( bf2_set_user_badge(id,badge_id,badge_level) == -1 ) + if( bf2_set_user_badge(id, badge_id, badge_level) == -1 ) return SS_ERROR; new szText[512]; - bf2_get_badge_name(badge_id,badge_level,szText,sizeof szText); - format(szText,sizeof szText,"


\ + bf2_get_badge_name(badge_id, badge_level, szText, charsmax(szText)); + format(szText, charsmax(szText), "


\

Kupiles/as odznake: %s

\ W razie problemow skontaktuj sie z nami.\ -

",szText); - show_motd(id,szText,"Informacje dotyczace uslugi"); +
", szText); + show_motd(id, szText, "Informacje dotyczace uslugi"); return SS_OK; } diff --git a/services/sklepsms_usluga_cod_exp.sma b/services/sklepsms_usluga_cod_exp.sma index 971fc4a..463248c 100644 --- a/services/sklepsms_usluga_cod_exp.sma +++ b/services/sklepsms_usluga_cod_exp.sma @@ -23,15 +23,15 @@ public plugin_cfg() { public ss_service_chosen(id) { if( !cod_get_user_class(id) ) { - client_print_color(id,Red,"^4[%s] ^1Musisz ^3wybrac klase^1, aby moc zakupic EXP.",PREFIX); + client_print_color(id, Red, "^4[%s] ^1Musisz ^3wybrac klase^1, aby moc zakupic EXP.", PREFIX); return SS_STOP; } return SS_OK; } -public ss_service_bought(id,amount) { - cod_set_user_xp(id,cod_get_user_xp(id)+amount); +public ss_service_bought(id, amount) { + cod_set_user_xp(id, cod_get_user_xp(id)+amount); } // Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji diff --git a/services/sklepsms_usluga_cod_exp2.sma b/services/sklepsms_usluga_cod_exp2.sma index 5768f9a..ecdddf2 100644 --- a/services/sklepsms_usluga_cod_exp2.sma +++ b/services/sklepsms_usluga_cod_exp2.sma @@ -21,12 +21,12 @@ public plugin_cfg() { } public ss_service_addingtolist(id) { - client_print(id,print_chat,"[%s] Musisz odczekac tydzien od restartu leveli, aby moc zakupic EXP.",PREFIX); + client_print(id, print_chat, "[%s] Musisz odczekac tydzien od restartu leveli, aby moc zakupic EXP.", PREFIX); return ITEM_DISABLED; } -public ss_service_bought(id,amount) { - cod_set_user_xp(id,cod_get_user_xp(id)+amount); +public ss_service_bought(id, amount) { + cod_set_user_xp(id, cod_get_user_xp(id)+amount); } // Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji diff --git a/services/sklepsms_usluga_cod_te.sma b/services/sklepsms_usluga_cod_te.sma index 6e47f91..73a238b 100644 --- a/services/sklepsms_usluga_cod_te.sma +++ b/services/sklepsms_usluga_cod_te.sma @@ -36,19 +36,19 @@ public ss_service_addingtolist(id) { public ss_service_chosen(id) { fromClass[id] = toClass[id] = currentClass[id] = fromClassExp[id] = 0; - new menu = menu_create("Z jakiej klasy?","fromClassMenu_handle") + new menu = menu_create("Z jakiej klasy?", "fromClassMenu_handle") for(new i = 1; i <= cod_get_classes_num(); ++i) { - new name[64] - cod_get_class_name(i,name,sizeof(name)) + new name[64+1]; + cod_get_class_name(i, name, charsmax(name)) - menu_additem(menu,name) + menu_additem(menu, name) } - menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); - menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); - menu_setprop(menu,MPROP_EXITNAME,"Wyjdz") + menu_setprop(menu, MPROP_BACKNAME, "Poprzednia"); + menu_setprop(menu, MPROP_NEXTNAME, "Nastepna"); + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz") - menu_display(id,menu); + menu_display(id, menu); return SS_STOP; } @@ -63,23 +63,23 @@ public fromClassMenu_handle(id, menu, item) { // +1 poniewaz klasy zaczynaja sie od id: 1 fromClass[id] = item+1; - new menu2 = menu_create("Na jaka klase?","toClassMenu_handle") + new menu2 = menu_create("Na jaka klase?", "toClassMenu_handle") new menu_callback = menu_makecallback("toClassMenu_callback"); for(new i = 1; i <= cod_get_classes_num(); ++i) { - new name[64] - cod_get_class_name(i,name,sizeof(name)) + new name[64+1] + cod_get_class_name(i, name, charsmax(name)) - menu_additem(menu2,name,"",0,menu_callback) + menu_additem(menu2, name, "", 0, menu_callback) } - menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia strona"); - menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna strona"); - menu_setprop(menu2,MPROP_EXITNAME,"Wyjdz") + menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia"); + menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna"); + menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz") // Niszczymy poprzednie menu menu_destroy(menu) - menu_display(id,menu2); + menu_display(id, menu2); } public toClassMenu_callback(id, menu, item) { @@ -101,21 +101,21 @@ public toClassMenu_handle(id, menu, item) { currentClass[id] = cod_get_user_class(id); // Sprawdzamy czy pierwsza klasa jest dostepna ( nie jest np. klasa VIP ) - cod_set_user_class(id,fromClass[id],1); + cod_set_user_class(id, fromClass[id], 1); chosen_checkFirstClass(TASK_CHECK_FIRST+id) } public chosen_checkFirstClass(id) { id -= TASK_CHECK_FIRST; if( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase - cod_set_user_class(id,toClass[id],1); + cod_set_user_class(id, toClass[id], 1); chosen_checkSecondClass(TASK_CHECK_SECOND+id) } else if ( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2,"chosen_checkFirstClass",TASK_CHECK_FIRST+id); + set_task(0.2, "chosen_checkFirstClass", TASK_CHECK_FIRST+id); } else if( !cod_get_user_class(id) ) { - client_print_color(id,Red,"^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy z ktorej chcesz przeniesc EXP.",PREFIX); + client_print_color(id, Red, "^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy z ktorej chcesz przeniesc EXP.", PREFIX); } } @@ -123,20 +123,20 @@ public chosen_checkSecondClass(id) { id -= TASK_CHECK_SECOND; if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase // Ustawiamy klase ktora mial gracz przed zakupem - cod_set_user_class(id,currentClass[id],1); + cod_set_user_class(id, currentClass[id], 1); ss_show_sms_info(id); } else if ( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2,"chosen_checkSecondClass",TASK_CHECK_SECOND+id); + set_task(0.2, "chosen_checkSecondClass", TASK_CHECK_SECOND+id); } else if( !cod_get_user_class(id) ) { - client_print_color(id,Red,"^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy na ktora chcesz przeniesc EXP.",PREFIX); + client_print_color(id, Red, "^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy na ktora chcesz przeniesc EXP.", PREFIX); } } -public ss_service_bought(id,amount) { +public ss_service_bought(id, amount) { // Ustawiamy pierwsza klase - cod_set_user_class(id,fromClass[id],1); + cod_set_user_class(id, fromClass[id], 1); // Sprawdzamy czy pierwsza klasa sie prawidlowo zaladowala bought_checkFirstClass(TASK_CHECK_FIRST+id); @@ -149,18 +149,18 @@ public bought_checkFirstClass(id) { fromClassExp[id] = cod_get_user_xp(id); // Zerujemy EXP pierwszej klasy - cod_set_user_xp(id,0); + cod_set_user_xp(id, 0); - new name[32]; get_user_name(id,name,sizeof name); - new class1[64]; cod_get_class_name(fromClass[id],class1,sizeof class1); - ss_log("Zabrano graczowi %s %d EXPa z klasy %s",name,fromClassExp[id],class1); + new name[32+1]; get_user_name(id, name, charsmax(name)); + new class1[64+1]; cod_get_class_name(fromClass[id], class1, charsmax(class1)); + ss_log("Zabrano graczowi %s %d EXPa z klasy %s", name, fromClassExp[id], class1); // Ustawiamy druga klase - cod_set_user_class(id,toClass[id],1); + cod_set_user_class(id, toClass[id], 1); bought_checkSecondClass(TASK_CHECK_SECOND+id) } else if( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2,"bought_checkFirstClass",TASK_CHECK_FIRST+id); + set_task(0.2, "bought_checkFirstClass", TASK_CHECK_FIRST+id); } } @@ -168,18 +168,18 @@ public bought_checkSecondClass(id) { id -= TASK_CHECK_SECOND; if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase // Ustawiamy EXP na drugiej klasie - cod_set_user_xp(id,cod_get_user_xp(id)+fromClassExp[id]); + cod_set_user_xp(id, cod_get_user_xp(id)+fromClassExp[id]); // Ustawiamy klase ktora mial gracz przed zakupem - cod_set_user_class(id,currentClass[id],1); + cod_set_user_class(id, currentClass[id], 1); - new name[32]; get_user_name(id,name,sizeof name); - new class1[64]; cod_get_class_name(fromClass[id],class1,sizeof class1); - new class2[64]; cod_get_class_name(toClass[id],class2,sizeof class2); - ss_log("Przeniesiono graczowi %s %d EXPa z klasy %s na klase %s",name,fromClassExp[id],class1,class2) + new name[32+1]; get_user_name(id, name, charsmax(name)); + new class1[64+1]; cod_get_class_name(fromClass[id], class1, charsmax(class1)); + new class2[64+1]; cod_get_class_name(toClass[id], class2, charsmax(class2)); + ss_log("Przeniesiono graczowi %s %d EXPa z klasy %s na klase %s", name, fromClassExp[id], class1, class2) } else if( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2,"bought_checkSecondClass",TASK_CHECK_SECOND+id); + set_task(0.2, "bought_checkSecondClass", TASK_CHECK_SECOND+id); } } diff --git a/services/sklepsms_usluga_dodatkowe_flagi.sma b/services/sklepsms_usluga_dodatkowe_flagi.sma index ec97a32..a60fc2e 100644 --- a/services/sklepsms_usluga_dodatkowe_flagi.sma +++ b/services/sklepsms_usluga_dodatkowe_flagi.sma @@ -4,7 +4,7 @@ new const service_id[MAX_ID] = ""; #define PLUGIN "Sklep-SMS: Usluga Dodatkowe Flagi" -new szFlags[25]; +new szFlags[32+1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -15,7 +15,7 @@ public plugin_cfg() { } public ss_service_data(name[],flags[]) { - copy(szFlags,sizeof szFlags,flags); + copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { diff --git a/services/sklepsms_usluga_gxm_bm.sma b/services/sklepsms_usluga_gxm_bm.sma index 13a35c7..95b7175 100644 --- a/services/sklepsms_usluga_gxm_bm.sma +++ b/services/sklepsms_usluga_gxm_bm.sma @@ -19,8 +19,8 @@ public plugin_cfg() { ss_register_service(service_id) } -public ss_service_bought(id,amount) { - set_user_bm(id,get_user_bm(id)+amount); +public ss_service_bought(id, amount) { + set_user_bm(id, get_user_bm(id)+amount); } // Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji diff --git a/services/sklepsms_usluga_gxm_exp.sma b/services/sklepsms_usluga_gxm_exp.sma index 4d0eb20..8cdeda5 100644 --- a/services/sklepsms_usluga_gxm_exp.sma +++ b/services/sklepsms_usluga_gxm_exp.sma @@ -19,8 +19,8 @@ public plugin_cfg() { ss_register_service(service_id) } -public ss_service_bought(id,amount) { - set_user_xp(id,get_user_xp(id)+amount); +public ss_service_bought(id, amount) { + set_user_xp(id, get_user_xp(id)+amount); } // Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji diff --git a/services/sklepsms_usluga_rezerwacja_nicku.sma b/services/sklepsms_usluga_rezerwacja_nicku.sma index 7107fa3..ad4f94f 100644 --- a/services/sklepsms_usluga_rezerwacja_nicku.sma +++ b/services/sklepsms_usluga_rezerwacja_nicku.sma @@ -4,7 +4,7 @@ new const service_id[MAX_ID] = "resnick"; #define PLUGIN "Sklep-SMS: Usluga Rezerwacja Nicku" -new szFlags[25]; +new szFlags[32+1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -14,6 +14,6 @@ public plugin_cfg() { ss_register_service(service_id); } -public ss_service_data(name[],flags[]) { - copy(szFlags,sizeof szFlags,flags); +public ss_service_data(name[], flags[]) { + copy(szFlags, charsmax(szFlags), flags); } diff --git a/services/sklepsms_usluga_rezerwacja_slota.sma b/services/sklepsms_usluga_rezerwacja_slota.sma index c3ba547..f22555e 100644 --- a/services/sklepsms_usluga_rezerwacja_slota.sma +++ b/services/sklepsms_usluga_rezerwacja_slota.sma @@ -4,7 +4,7 @@ new const service_id[MAX_ID] = "resslot"; #define PLUGIN "Sklep-SMS: Usluga Rezerwacja Slota" -new szFlags[25]; +new szFlags[32+1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -15,7 +15,7 @@ public plugin_cfg() { } public ss_service_data(name[],flags[]) { - copy(szFlags,sizeof szFlags,flags); + copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { diff --git a/services/sklepsms_usluga_vip.sma b/services/sklepsms_usluga_vip.sma index 9279e0e..b409d5b 100644 --- a/services/sklepsms_usluga_vip.sma +++ b/services/sklepsms_usluga_vip.sma @@ -4,7 +4,7 @@ new const service_id[MAX_ID] = "vip"; #define PLUGIN "Sklep-SMS: Usluga VIP" -new szFlags[25]; +new szFlags[32+1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -15,7 +15,7 @@ public plugin_cfg() { } public ss_service_data(name[],flags[]) { - copy(szFlags,sizeof szFlags,flags); + copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { diff --git a/services/sklepsms_usluga_vippro.sma b/services/sklepsms_usluga_vippro.sma index f3d7ca8..bc6b210 100644 --- a/services/sklepsms_usluga_vippro.sma +++ b/services/sklepsms_usluga_vippro.sma @@ -4,7 +4,7 @@ new const service_id[MAX_ID] = "vippro"; #define PLUGIN "Sklep-SMS: Usluga VIP PRO" -new szFlags[25]; +new szFlags[32+1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -15,7 +15,7 @@ public plugin_cfg() { } public ss_service_data(name[],flags[]) { - copy(szFlags,sizeof szFlags,flags); + copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { diff --git a/services/sklepsms_usluga_zp_ap.sma b/services/sklepsms_usluga_zp_ap.sma index 2524c64..3c13966 100644 --- a/services/sklepsms_usluga_zp_ap.sma +++ b/services/sklepsms_usluga_zp_ap.sma @@ -19,8 +19,8 @@ public plugin_cfg() { ss_register_service(service_id) } -public ss_service_bought(id,amount) { - zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)+amount); +public ss_service_bought(id, amount) { + zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id)+amount); } // Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji diff --git a/sklep_sms.sma b/sklep_sms.sma index 79e270a..b6ca831 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -1179,7 +1179,7 @@ _showPlayerServices(id) { OR (ps.type = '%d' AND ps.auth_data = '%s'))", TABLE_PREFIX, TABLE_PREFIX, server_id, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid ); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayerServices", szTemp, data, sizeof(data)); + if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayerServices", szTemp, data, sizeof data); } public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { From 4998301e6d3d97eaa6e37967df5c5a639b847fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 24 Jul 2015 00:15:07 +0200 Subject: [PATCH 007/124] Changed cs16 to engine_amxx --- sklep_sms.sma | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index 00d6330..115b353 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -87,7 +87,7 @@ new which_service[33], b_types[33]; //CVARy -new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip; +new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; new sklep_komenda[MAX_KOMENDA+1], przeladuj_komenda[MAX_KOMENDA+1], uslugi_komenda[MAX_KOMENDA+1], show_info; // Sciezka do pliku konfiguracyjnego @@ -141,6 +141,7 @@ new bool:is_amxbans = false; public plugin_natives() { register_library("shop_sms"); register_native("ss_register_service", "registerService"); + register_native("ss_show_service_purchase", "native_showServicePurchase"); register_native("ss_show_sms_info", "native_infoSMS"); register_native("ss_add_code", "native_addCode"); register_native("ss_log", "dodajLog"); @@ -175,6 +176,9 @@ public plugin_precache() { iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_uslugi_komenda ^"/uslugi^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Czy po uzyciu powyzszych komend wyswietla sie one w chacie^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_ciche_komendy ^"0^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Wyswietlac informacje o sklepie na chacie?^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_info ^"1^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); @@ -207,6 +211,7 @@ public plugin_precache() { cvar_pass = register_cvar("sklepsms_pass", ""); cvar_db = register_cvar("sklepsms_db", ""); cvar_server_ip = register_cvar("sklepsms_server_ip", ""); + cvar_silent_command = register_cvar("sklepsms_ciche_komendy", "0"); // Wczytywanie confingu if(file_exists(config_path)) { @@ -387,17 +392,27 @@ public sayHook(id) { client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepiku z powodu bledow ze sklepem.", PREFIX); else sklepMenu(id); + + if( get_pcvar_num(cvar_silent_command) ) + return PLUGIN_HANDLED; } else if(equali(tekst, przeladuj_komenda)) { pre_usersReload(id); + + if( get_pcvar_num(cvar_silent_command) ) + return PLUGIN_HANDLED; } else if(equali(tekst, uslugi_komenda)) { _showPlayerServices(id); + + if( get_pcvar_num(cvar_silent_command) ) + return PLUGIN_HANDLED; } #if defined TRACE_FILE log_to_file(TRACE_FILE, "end1: sayHook"); #endif + return PLUGIN_CONTINUE; } /* Menu sklepu */ @@ -1031,7 +1046,7 @@ public kodZwrotny(id) { StringURLEncode(ip, u_ip, charsmax(u_ip)); formatex(szUrl, charsmax(szUrl), - "%sservers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=cs16&language=polish", + "%sservers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=engine_amxx&language=polish", shop_url_add, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, server_id, u_sms_service, u_sms_code, price[pTARIFF], u_ip ); sendSocket(id, shop_url, szUrl, "purchase_service"); @@ -2092,6 +2107,19 @@ public dodajLog(plugin, params) { #endif } +public native_showServicePurchase(plugin, params) { + if(params != 2) { + return SS_ERROR; + } + + new service_id[MAX_ID+1]; + new id = get_param(1); + get_string(2, service_id, charsmax(service_id)); + + wyborMenu(id, _getServiceByID(service_id)); + return SS_OK; +} + public native_infoSMS(plugin, params) { #if defined TRACE_FILE log_to_file(TRACE_FILE, "start: native_infoSMS"); @@ -2473,7 +2501,7 @@ _getServicePluginByID( id[] ) { return -1; } -/*_getServiceByID( id[] ) { +_getServiceByID( id[] ) { new service[e_Service]; for(new i = 0; i < ArraySize(services); ++i) { ArrayGetArray(services, i, service); @@ -2482,7 +2510,7 @@ _getServicePluginByID( id[] ) { } } return -1; -}*/ +} _getNumberByTariff( tariff, number[], len ) { #if defined TRACE_FILE From 2f94cef5aaa3e6a518813961e2b9b984d689ae6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 24 Aug 2015 08:30:27 +0200 Subject: [PATCH 008/124] Players Services change --- sklep_sms.sma | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index 5d42197..826ffe6 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -1014,8 +1014,8 @@ public kodZwrotny(id) { // ############# ZAKUP USLUGI ############### - new service[e_Service], auth_data[32], price[e_Price], ip[32]; - new u_service_id[65], u_auth_data[64], u_password[65], u_sms_service[65], u_sms_code[MAX_CODE*2+1], u_ip[64]; + new service[e_Service], auth_data[32+1], price[e_Price], ip[32]; + new u_service_id[64+1], u_auth_data[64+1], u_password[64+1], u_sms_service[64+1], u_sms_code[MAX_CODE*2+1], u_ip[64+1]; // Pobieramy dane o usludze ArrayGetArray(services, which_service[id], service); @@ -1193,13 +1193,14 @@ _showPlayerServices(id) { new data[1]; data[0] = id; formatex(szTemp, charsmax(szTemp), - "SELECT s.name AS `service`, FROM_UNIXTIME(ps.expire) AS `expire`, ps.expire AS `expire_num` FROM `%splayers_services` AS ps \ - LEFT JOIN `%sservices` AS s ON ps.service = s.id \ - WHERE ps.server = '%d' \ - AND ((ps.type = '%d' AND ps.auth_data = '%s') \ - OR (ps.type = '%d' AND ps.auth_data = '%s') \ - OR (ps.type = '%d' AND ps.auth_data = '%s'))", - TABLE_PREFIX, TABLE_PREFIX, server_id, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid + "SELECT s.name AS `service`, FROM_UNIXTIME(us.expire) AS `expire`, us.expire AS `expire_num` FROM `%suser_service` AS us \ + LEFT JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ + LEFT JOIN `%sservices` AS s ON us.service = s.id \ + WHERE usef.server = '%d' \ + AND ((usef.type = '%d' AND usef.auth_data = '%s') \ + OR (usef.type = '%d' AND usef.auth_data = '%s') \ + OR (usef.type = '%d' AND usef.auth_data = '%s'))", + TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, server_id, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid ); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayerServices", szTemp, data, sizeof data); } From 4aaa36ca422a510e2646dda1bd1c2ed034eaf637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 26 Aug 2015 00:40:50 +0200 Subject: [PATCH 009/124] Version 3.2.2 --- sklep_sms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index 826ffe6..1f683ee 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -1194,8 +1194,8 @@ _showPlayerServices(id) { new data[1]; data[0] = id; formatex(szTemp, charsmax(szTemp), "SELECT s.name AS `service`, FROM_UNIXTIME(us.expire) AS `expire`, us.expire AS `expire_num` FROM `%suser_service` AS us \ - LEFT JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ - LEFT JOIN `%sservices` AS s ON us.service = s.id \ + INNER JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ + INNER JOIN `%sservices` AS s ON us.service = s.id \ WHERE usef.server = '%d' \ AND ((usef.type = '%d' AND usef.auth_data = '%s') \ OR (usef.type = '%d' AND usef.auth_data = '%s') \ From 99311325fbd45a829bf8730b161398679c8d5987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 26 Aug 2015 23:09:54 +0200 Subject: [PATCH 010/124] Fixed kicking with message: Bad Password --- sklep_sms.sma | 853 ++++++-------------------------------------------- 1 file changed, 97 insertions(+), 756 deletions(-) diff --git a/sklep_sms.sma b/sklep_sms.sma index 1f683ee..f5fd61f 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -35,7 +35,7 @@ forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); #define DEBUG "sklep_sms_debug.log" #define CFG_FILE "sklep_sms.cfg" #define LOG_FILE "sklep_sms.log" -//#define TRACE_FILE "sklep_sms_trace.log" +//#define FOLLOW_RELOAD_FLAGS "shopsms_follow_reload_flags.log" // Stale const MAX_KOMENDA = 32; @@ -149,9 +149,6 @@ public plugin_natives() { } public plugin_precache() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: plugin_precache"); - #endif get_configsdir(config_path, charsmax(config_path)); // Tworzenie pliku sklep_sms.cfg @@ -225,17 +222,9 @@ public plugin_precache() { smses = ArrayCreate(e_SMS); services = ArrayCreate(e_Service); pricelist = ArrayCreate(e_Price); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: plugin_precache"); - #endif } -public plugin_init() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: plugin_init"); - #endif - +public plugin_init() { register_plugin("Sklep SMS", VERSION, "SeeK"); register_menucmd(register_menuid("SMS_Info"), KEYS, "infoSMS_handler"); @@ -250,17 +239,9 @@ public plugin_init() { if( show_info ) set_task(137.0, "reklama", _, _, _, "b"); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: plugin_init"); - #endif } public loadCvars() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: loadCvar"); - #endif - //Pobieranie wartosci cvarow get_pcvar_string(cvar_sklep, sklep_komenda, charsmax(sklep_komenda)); get_pcvar_string(cvar_przeladuj, przeladuj_komenda, charsmax(przeladuj_komenda)); @@ -271,30 +252,14 @@ public loadCvars() { get_pcvar_string(cvar_user, sql_user, charsmax(sql_user)); get_pcvar_string(cvar_pass, sql_pass, charsmax(sql_pass)); get_pcvar_string(cvar_db, sql_db, charsmax(sql_db)); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: loadCvar"); - #endif } -public plugin_end() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: plugin_end"); - #endif - +public plugin_end() { if( SqlTuple ) SqlTuple = Empty_Handle; - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: plugin_end"); - #endif } -public plugin_cfg() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: plugin_cfg"); - #endif - +public plugin_cfg() { // Blad przy tworzeniu ( brak uprawnien ) if( !file_exists(config_path) ) brakSciezki(0, config_path); @@ -333,57 +298,25 @@ public plugin_cfg() { ); //log_to_file(LOG_FILE, szTemp); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getServerData", szTemp); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: plugin_cfg"); - #endif } -public checkLoadedServices() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: checkLoadedServices"); - #endif - +public checkLoadedServices() { if( !ArraySize(services) ) { log_amx("Nie zaladowano zadnych uslug."); } else { log_amx("Zaladowano %d uslug.", ArraySize(services)); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: checkLoadedServices"); - #endif } -public client_authorized(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: client_authorized"); - #endif - +public client_authorized(id) { _usersCheckUser(id); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: client_authorized"); - #endif } -public client_putinserver(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: client_putinserver"); - #endif - +public client_putinserver(id) { _usersCheckUser(id); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: client_putinserver"); - #endif } -public sayHook(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: sayHook"); - #endif - +public sayHook(id) { new tekst[32]; read_argv(1, tekst, charsmax(tekst)); @@ -409,54 +342,28 @@ public sayHook(id) { return PLUGIN_HANDLED; } - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: sayHook"); - #endif return PLUGIN_CONTINUE; } /* Menu sklepu */ public sklepMenu(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: sklepMenu"); - #endif - if( !is_user_connected(id) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: sklepMenu"); - #endif return; } if(!get_pcvar_num(cvar_on)) { client_print_color(id, Red, "^4[%s] ^1Sklep jest obecnie ^3wylaczony^1.", PREFIX); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: sklepMenu"); - #endif return; } if( !sql_connected ) { client_print_color(id, Red, "^4[%s] ^1Nie polaczono z baza danych.", PREFIX); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end4: sklepMenu"); - #endif return; } if(!ArraySize(services)) { client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end3: sklepMenu"); - #endif return; } if( !shop_registered ) { client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end5: sklepMenu"); - #endif return; } @@ -502,37 +409,18 @@ public sklepMenu(id) { client_print_color(id, Red, "^4[%s] ^1W razie problemow mozesz sie z nami skontaktowac", PREFIX); client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, st_contact); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end6: sklepMenu"); - #endif } -public sklepMenu_callback(id, menu, item) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: sklepMenu_callback"); - #endif - +public sklepMenu_callback(id, menu, item) { new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: sklepMenu_callback"); - #endif return data[1] == ITEM_DISABLED ? ITEM_DISABLED : ITEM_ENABLED; } public sklepMenu_handler(id, menu, item) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: sklepMenu_handler"); - #endif - if( !is_user_connected(id) || item == MENU_EXIT ) { menu_destroy(menu); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: sklepMenu_handler"); - #endif return; } @@ -541,23 +429,12 @@ public sklepMenu_handler(id, menu, item) { wyborMenu(id, data[0]-1); menu_destroy(menu); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: sklepMenu_handler"); - #endif } /* Konie menu sklepu */ /* Menu wyboru */ -public wyborMenu(id, service_id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: wyborMenu"); - #endif - +public wyborMenu(id, service_id) { if( !is_user_connected(id) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: wyborMenu"); - #endif return; } @@ -616,23 +493,11 @@ public wyborMenu(id, service_id) { } else // Zero client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: wyborMenu"); - #endif } -public wyborMenu_handler(id, menu, item) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: wyborMenu_handler"); - #endif - +public wyborMenu_handler(id, menu, item) { if(!is_user_connected(id) || item == MENU_EXIT) { menu_destroy(menu); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: wyborMenu_handler"); - #endif return; } @@ -644,19 +509,11 @@ public wyborMenu_handler(id, menu, item) { prev_infoSMS(id); menu_destroy(menu); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: wyborMenu_handler"); - #endif } /* Koniec menu wyboru */ /* Informacje dot SMSa */ - public prev_infoSMS(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: prev_infoSMS"); - #endif new service[e_Service]; ArrayGetArray(services, which_service[id], service); @@ -678,19 +535,12 @@ public prev_infoSMS(id) { menuDisplayServiceTypes(data); } - else + else { _serviceChosen(id); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: prev_infoSMS"); - #endif + } } -public menuServiceType_callback(id, menu, item) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: menuServiceType_callback"); - #endif - +public menuServiceType_callback(id, menu, item) { new service[e_Service]; ArrayGetArray(services, which_service[id], service); @@ -703,18 +553,10 @@ public menuServiceType_callback(id, menu, item) { return ITEM_DISABLED; } -public menuDisplayServiceTypes(data[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: menuDisplayServiceTypes"); - #endif - +public menuDisplayServiceTypes(data[]) { new id = data[0]; if( !is_user_connected(id) ) { menu_destroy(data[1]); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: menuDisplayServiceTypes"); - #endif return; } @@ -724,17 +566,9 @@ public menuDisplayServiceTypes(data[]) { menu_display(id, data[1]); set_task(0.1, "menuDisplayServiceTypes", TASK_SHOW_MENU_SERVICE_TYPES+id, data, 2); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: menuDisplayServiceTypes"); - #endif } -public menuServiceType_handler(id, menu, item) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: menuServiceType_handler"); - #endif - +public menuServiceType_handler(id, menu, item) { switch(item) { case 0: { client_cmd(id, "messagemode ssnick_Podaj_Haslo"); @@ -751,83 +585,41 @@ public menuServiceType_handler(id, menu, item) { remove_task(TASK_SHOW_MENU_SERVICE_TYPES+id); menu_destroy(menu); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: menuServiceType_handler"); - #endif } -public menuServiceType_nick(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: menuServiceType_nick"); - #endif - +public menuServiceType_nick(id) { new szPassword[65]; read_argv(1, szPassword, charsmax(szPassword)); - if( !_menuServiceType_checkPass(id, TYPE_NICK, szPassword) ) + if( !_menuServiceType_checkPass(id, TYPE_NICK, szPassword) ) { client_cmd(id, "messagemode ssnick_Podaj_Haslo"); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: menuServiceType_nick"); - #endif + } } public menuServiceType_ip(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: menuServiceType_ip"); - #endif - new szPassword[65]; read_argv(1, szPassword, charsmax(szPassword)); if( !_menuServiceType_checkPass(id, TYPE_IP, szPassword) ) client_cmd(id, "messagemode ssip_Podaj_Haslo"); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: menuServiceType_ip"); - #endif } bool:_menuServiceType_checkPass(id, type, szPassword[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _menuServiceType_checkPass"); - #endif - if( strlen(szPassword) > 30 ) { client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _menuServiceType_checkPass"); - #endif return false; } else if( !strlen(szPassword) ) { client_print(id, print_center, "Haslo nie zostalo wprowadzone. Wprowadz je."); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: _menuServiceType_checkPass"); - #endif return false; } _serviceChosen(id, type, szPassword); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end3: _menuServiceType_checkPass"); - #endif return true; } public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: checkServicePassword"); - #endif - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: checkServicePassword"); - #endif return; } @@ -849,17 +641,9 @@ public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], client_cmd(id, "messagemode ssip_Podaj_Haslo"); } } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: checkServicePassword"); - #endif } -_serviceChosen(id, type=0, szPassword[] = "") { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _serviceChosen"); - #endif - +_serviceChosen(id, type=0, szPassword[] = "") { new service[e_Service], price[e_Price]; ArrayGetArray(services, which_service[id], service); ArrayGetArray(pricelist, which_price[id], price); @@ -874,21 +658,10 @@ _serviceChosen(id, type=0, szPassword[] = "") { if( ret != SS_STOP ) { infoSMS(id); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _serviceChosen"); - #endif } -public infoSMS(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: infoSMS"); - #endif - +public infoSMS(id) { if( !is_user_connected(id) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: infoSMS"); - #endif return; } @@ -917,44 +690,22 @@ public infoSMS(id) { //Wyswietlane caly czas menu zakupu infoSMS_wyswietl(szText, id+TASK_WYSWIETL); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: infoSMS"); - #endif } -public infoSMS_wyswietl(info[], id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: infoSMS_wyswietl"); - #endif - +public infoSMS_wyswietl(info[], id) { id -= TASK_WYSWIETL; if( !is_user_connected(id) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: infoSMS_wyswietl"); - #endif return; } show_menu(id, KEYS, info, 1, "SMS_Info"); set_task(0.9, "infoSMS_wyswietl", id+TASK_WYSWIETL, info, strlen(info)); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: infoSMS_wyswietl"); - #endif } -public infoSMS_handler(id, key) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: infoSMS_handler"); - #endif - +public infoSMS_handler(id, key) { if(task_exists(id+TASK_WYSWIETL)) remove_task(id+TASK_WYSWIETL); if( !is_user_connected(id) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: infoSMS_handler"); - #endif return; } @@ -964,22 +715,11 @@ public infoSMS_handler(id, key) { else if(key == 9) { client_print_color(id, Red, "^4[%s] ^1Transakcja zostala ^3przerwana^1.", PREFIX); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: infoSMS_handler"); - #endif } // Wprowadzanie kodu zwrotnego -public kodZwrotny(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: kodZwrotny"); - #endif - +public kodZwrotny(id) { if( !is_user_connected(id) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: kodZwrotny"); - #endif return; } @@ -989,23 +729,14 @@ public kodZwrotny(id) { dodajLog2(id, "Wprowadzono kod: %s", sms_code); if(!strlen(sms_code)) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: kodZwrotny"); - #endif client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); return; } else if(containi(sms_code, " ") != -1) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end3: kodZwrotny"); - #endif client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1.", PREFIX); return; } else if(strlen(sms_code) == 1 && containi(sms_code, "0") == 0) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end4: kodZwrotny"); - #endif client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1byc rowny^3 0^1.", PREFIX); return; } @@ -1050,17 +781,9 @@ public kodZwrotny(id) { shop_url_add, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, server_id, u_sms_service, u_sms_code, price[pTARIFF], u_ip ); sendSocket(id, shop_url, szUrl, "purchase_service"); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end4: kodZwrotny"); - #endif } -public purchaseService_callback(id, return_value[], szText[], positive, bsid, szWarnings[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: purchaseService_callback"); - #endif - +public purchaseService_callback(id, return_value[], szText[], positive, bsid, szWarnings[]) { client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, szText); if( strlen(szWarnings) ) { @@ -1079,9 +802,6 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz // Wystapil jakis blad, wiec przerywamy if( positive != 1 ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: purchaseService_callback"); - #endif return; } @@ -1108,16 +828,9 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz dodajLog2(id, "Wystapil blad podczas kupowania %s - %s; Taryfa: %d", service[sNAME], amount, price[pTARIFF]); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: purchaseService_callback"); - #endif return; } - // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy - if( service[FLAGS] ) - usersReloadData(); - // Info w przypadku usługi na haslo if( b_types[id] & (TYPE_NICK|TYPE_IP) ) { // Ustawienie hasla @@ -1147,8 +860,9 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz } new amount[32+1]; - if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + if( price[AMOUNT] == -1 ) {// Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); + } else { groupDigits(price[AMOUNT], amount, charsmax(amount)); format(amount, charsmax(amount), "%s %s", amount, service[TAG]); @@ -1156,24 +870,22 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], amount); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end3: purchaseService_callback"); - #endif + // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy + if( service[FLAGS] ) { + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 1"); + #endif + // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo + set_task(2.0, "usersReloadData"); + } } // Dodanie kodu do bazy kodow -public addCode(sms_code[], sms_tariff, free) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: addCode"); - #endif - +public addCode(sms_code[], sms_tariff, free) { formatex(szTemp, charsmax(szTemp), "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) VALUES ('%s', '%d', '%d')", TABLE_PREFIX, sms_code, sms_tariff, free); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); dodajLog2(0, "Dodano SMSa do tabeli kodow do wykorzystania. Kod: %s Taryfa: %d", sms_code, sms_tariff); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: addCode"); - #endif return SS_OK; } @@ -1243,64 +955,46 @@ public showPlayerServices_handler(id, menu, item) { // Funkcje dotyczace flag graczy -public pre_usersReload(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: pre_usersReload"); - #endif - +public pre_usersReload(id) { if(ostatnie_przeladowanie+10 > get_systime()) { client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: pre_usersReload"); - #endif return; } ostatnie_przeladowanie = get_systime(); _usersReload(id); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: pre_usersReload"); - #endif } _usersReload(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _usersReload"); + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 9"); #endif - for(new i = 1; i <= get_maxplayers(); ++i) { if( !is_user_connected(i) ) continue; _usersCheckUser(i); } - if( id ) + if( id ) { client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _usersReload"); + } + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 10"); #endif } // Funkcja wczytujaca z bazy ponownie dane graczy -public usersReloadData() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: usersReloadData"); +public usersReloadData() { + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 2"); #endif - // Wczytywanie danych graczy _usersLoad(true); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: usersReloadData"); - #endif } _usersLoad(bool:reload) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _usersLoad"); + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 3"); #endif - // Czyscimy dotychczasowe dane ArrayClear(players_flags); players_loaded = false; @@ -1320,21 +1014,13 @@ _usersLoad(bool:reload) { new data[1]; data[0] = reload; // Przeladuj liste adminow w amxbans if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayersData", szTemp, data, sizeof data); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _usersLoad"); - #endif } public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getPlayersData"); + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 4"); #endif - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: getPlayersData"); - #endif return; } @@ -1370,6 +1056,9 @@ public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_ players_loaded = true; + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 5"); + #endif if( data[0] && is_amxbans ) {// Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien server_cmd("amx_reloadadmins"); } @@ -1377,38 +1066,25 @@ public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_ // Sprawdzamy uprawnienia graczy _usersReload(0); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getPlayersData"); - #endif } -public amxbans_sql_initialized() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: amxbans_sql_initialized"); +public amxbans_sql_initialized() { + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 6"); #endif - is_amxbans = true; addUsersToGlobalArray(); // Sprawdzamy uprawnienia graczy _usersReload(0); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: amxbans_sql_initialized"); - #endif } // Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy -public addUsersToGlobalArray() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: addUsersToGlobalArray"); +public addUsersToGlobalArray() { + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 7"); #endif - if( !players_loaded ) { // Dane uzytkownikow nie zostaly jeszcze zaladowane set_task(0.1, "addUsersToGlobalArray"); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: addUsersToGlobalArray"); - #endif return; } @@ -1476,17 +1152,12 @@ public addUsersToGlobalArray() { ArrayGetArray(users, i, player_flags); admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: addUsersToGlobalArray"); + #if defined FOLLOW_RELOAD_FLAGS + log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 8"); #endif } -_getOrderOfType(type) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _getOrderOfType"); - #endif - +_getOrderOfType(type) { switch(type) { case FLAG_IP: return 1; case FLAG_NICK : return 2; @@ -1497,29 +1168,14 @@ _getOrderOfType(type) { } public usersCheckUser_task(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: sersCheckUser_task"); - #endif - _usersCheckUser(id-TASK_CHECK_USER); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: sersCheckUser_task"); - #endif } -public _usersCheckUser(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _usersCheckUser"); - #endif - +public _usersCheckUser(id) { if( !players_loaded ) { if( !task_exists(TASK_CHECK_USER+id) ) set_task(0.1, "usersCheckUser_task", TASK_CHECK_USER+id); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _usersCheckUser"); - #endif return; } @@ -1572,11 +1228,8 @@ public _usersCheckUser(id) { if( !(player_flags[pfTYPE]&FLAG_KICK) ) // Nie kickuj gracza, tylko mu nie przydziel flag continue; - server_cmd("kick #%d ^"Bledne haslo^"", get_user_userid(id)); + server_cmd("kick #%d ^"Nieprawidlowe haslo^"", get_user_userid(id)); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: _usersCheckUser"); - #endif return; } } @@ -1586,46 +1239,22 @@ public _usersCheckUser(id) { set_user_flags(id, player_flags[pfFLAGS]); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end3: _usersCheckUser"); - #endif } -public brakSciezki(id, path[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: brakSciezki"); - #endif - +public brakSciezki(id, path[]) { dodajLog2(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); if( id ) client_print_color(id, Blue, "^4[%s] ^1Wystapil ^3blad ^1przy zapisywaniu ustawien. Prawdopodobnie ^4brak uprawnien^1.", PREFIX); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: brakSciezki"); - #endif } -public reklama() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: reklama"); - #endif - +public reklama() { if(get_playersnum()>1) { client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, sklep_komenda); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: reklama"); - #endif } -public dodajLog2(id, const szFormat[], any:...) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: dodajLog2"); - #endif - +public dodajLog2(id, const szFormat[], any:...) { #if defined LOGING new szText[256], name[33], ip[22], sid[22]; vformat(szText, charsmax(szText), szFormat, 3); @@ -1637,33 +1266,17 @@ public dodajLog2(id, const szFormat[], any:...) { log_to_sql(szText, charsmax(szText)); #endif - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: dodajLog2"); - #endif } -public log_to_sql(text[], text_len) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: log_to_sql"); - #endif - +public log_to_sql(text[], text_len) { format(text, text_len, "%s. Serwer: %d", text, server_id); escape(text, text_len); formatex(szTemp, charsmax(szTemp), "INSERT INTO `%slogs` (text) VALUES ('%s')", TABLE_PREFIX, text); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: log_to_sql"); - #endif } -public getServerData(FailState, Handle:Query, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getServerData"); - #endif - +public getServerData(FailState, Handle:Query, Error[], Errorcode) { sql_connected = true; if(FailState != TQUERY_SUCCESS) { log_to_file(LOG_FILE, "Tresc bledu ( %d ): %s", Errorcode, Error ); @@ -1679,9 +1292,6 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) { sql_connected = false; _error41(Errorcode, Error); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getServerData"); - #endif return; } @@ -1741,20 +1351,12 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) { formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%sservices` WHERE `id` IN(%s) ORDER BY `order` ASC", TABLE_PREFIX, ids); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getServicesData", szTemp); } - else - // Sprawdz zaladowane uslugi - checkLoadedServices(); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: getServerData"); - #endif + else { + checkLoadedServices(); // Sprawdz zaladowane uslugi + } } -public getServicesData(FailState, Handle:Query, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getServicesData"); - #endif - +public getServicesData(FailState, Handle:Query, Error[], Errorcode) { if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { _error12(); } @@ -1802,21 +1404,10 @@ public getServicesData(FailState, Handle:Query, Error[], Errorcode) { ); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPriceList", szTemp); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getServicesData"); - #endif } -public getPriceList(FailState, Handle:Query, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getPriceList"); - #endif - +public getPriceList(FailState, Handle:Query, Error[], Errorcode) { if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getPriceList"); - #endif return; } @@ -1832,21 +1423,10 @@ public getPriceList(FailState, Handle:Query, Error[], Errorcode) { SQL_NextRow(Query); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: getPriceList"); - #endif } -public getSettings(FailState, Handle:Query, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getSettings"); - #endif - +public getSettings(FailState, Handle:Query, Error[], Errorcode) { if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getSettings"); - #endif return; } @@ -1908,18 +1488,10 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) { // Pobranie danych o serwisie transakcyjnym formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%stransaction_services` WHERE `id` = '%s'", TABLE_PREFIX, st_sms_service); if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getTransactionServiceData", szTemp); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: getSettings"); - #endif } // Funkcja ktora wysyla zapytanie do serwera o sprawdzenie czy licencja jest prawidlowa -public validateLicense() { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: validateLicense"); - #endif - +public validateLicense() { // Sprawdzenie licencji new szUrl[512], szName[128]; get_cvar_string("hostname", server_name, charsmax(server_name)); @@ -1930,21 +1502,10 @@ public validateLicense() { license, license_password, server_ip, VERSION, szName ); sendSocket(0, "license.sklep-sms.pl", szUrl, "validate_license"); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: validateLicense"); - #endif } -public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getTransactionServiceData"); - #endif - +public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) { if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getTransactionServiceData"); - #endif return; } @@ -1962,21 +1523,10 @@ public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) { SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "data"), data, charsmax(data)); if( !json_decode(data, "sms_text", transaction_service[SMS_TEXT], MAX_SMS_TEXT) ) log_to_file(LOG_FILE, "Nie udalo sie pobrac kodu sms."); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: getTransactionServiceData"); - #endif } -public getSMSesData(FailState, Handle:Query, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getSMSesData"); - #endif - +public getSMSesData(FailState, Handle:Query, Error[], Errorcode) { if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getSMSesData"); - #endif return; } @@ -1989,17 +1539,9 @@ public getSMSesData(FailState, Handle:Query, Error[], Errorcode) { SQL_NextRow(Query); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: getSMSesData"); - #endif } -_checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _checkForSQLErrors"); - #endif - +_checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { sql_connected = true; if(FailState != TQUERY_SUCCESS) { if(FailState == TQUERY_QUERY_FAILED) @@ -2014,27 +1556,14 @@ _checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { SQL_GetQueryString(Query, szTemp, charsmax(szTemp)); log_to_file(LOG_FILE, "Zapytanie: %s", szTemp); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _checkForSQLErrors"); - #endif return PLUGIN_HANDLED; } - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: _checkForSQLErrors"); - #endif return PLUGIN_CONTINUE; } -public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: IgnoreHandle"); - #endif - +public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { _checkForSQLErrors(Query, FailState, Error, Errorcode); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: IgnoreHandle"); - #endif } /* ######################################################################################################################### @@ -2042,16 +1571,9 @@ public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { * ######################################################################################################################### */ -public registerService(plugin, params) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: registerService"); - #endif - +public registerService(plugin, params) { if(params != 1) { log_to_file(LOG_FILE, "Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: registerService"); - #endif return SS_ERROR; } @@ -2062,22 +1584,12 @@ public registerService(plugin, params) { ArrayPushCell(service_plugins, plugin); ArrayPushString(service_ids, id); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: registerService"); - #endif return SS_OK; } // Dodawanie kodu do listy kodow do wykorzystania -public native_addCode(plugin, params) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: native_addCode"); - #endif - +public native_addCode(plugin, params) { if( params != 2 ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: native_addCode"); - #endif return; } @@ -2085,27 +1597,15 @@ public native_addCode(plugin, params) { get_string(1, sms_code, charsmax(sms_code)); tariff = get_param(2); addCode(sms_code, tariff, 1); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: native_addCode"); - #endif } // Logowanie danych z pluginow zewnetrznych -public dodajLog(plugin, params) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: dodajLog"); - #endif - +public dodajLog(plugin, params) { #if defined LOGING new text[1024]; vdformat(text, charsmax(text), 1, 2); log_to_sql(text, charsmax(text)); #endif - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: dodajLog"); - #endif } public native_showServicePurchase(plugin, params) { @@ -2121,60 +1621,30 @@ public native_showServicePurchase(plugin, params) { return SS_OK; } -public native_infoSMS(plugin, params) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: native_infoSMS"); - #endif - +public native_infoSMS(plugin, params) { if(params != 1) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: native_infoSMS"); - #endif return SS_ERROR; } infoSMS( get_param(1) ); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: native_infoSMS"); - #endif return SS_OK; } -public bool:native_is_steam(plugin, params) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: native_is_steam"); - #endif - +public bool:native_is_steam(plugin, params) { if(params != 1) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: native_is_steam"); - #endif return false; } - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: native_is_steam"); - #endif return is_steam( get_param(1) ); } -bool:is_steam(id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: is_steam"); - #endif - +bool:is_steam(id) { new auth[32]; get_user_authid(id, auth, charsmax(auth)); if(contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: is_steam"); - #endif return true; } - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: is_steam"); - #endif return false; } @@ -2288,11 +1758,7 @@ _make_error(informacja[]) { /* ############# Koniec: Licencja ################## */ // ######### Sockets ######### -public socket_polacz(id, szHost[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: socket_polacz"); - #endif - +public socket_polacz(id, szHost[]) { new error; if( sockets[id] ) { closeSocket(id); @@ -2306,28 +1772,15 @@ public socket_polacz(id, szHost[]) { #if defined LOG_FILE log_to_file(LOG_FILE, "Nie mozna polaczyc sie z hostem: %s. ID bledu: %d.", szHost, error); #endif - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: socket_polacz"); - #endif return 0; } - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: socket_polacz"); - #endif return 1; } -public socket_CheckData(szAction[], id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: socket_CheckData"); - #endif - +public socket_CheckData(szAction[], id) { id -= TASK_CHECK_SOCKET; if(!socket_change(sockets[id])) { set_task(0.6, "socket_CheckData", TASK_CHECK_SOCKET+id, szAction, strlen(szAction)); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: socket_CheckData"); - #endif return; } @@ -2340,9 +1793,6 @@ public socket_CheckData(szAction[], id) { log_to_file(DEBUG, "Nie znaleziono pliku. Akcja: %s", szAction); #endif closeSocket(id); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: socket_CheckData"); - #endif return; } @@ -2404,20 +1854,10 @@ public socket_CheckData(szAction[], id) { } closeSocket(id); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end3: socket_CheckData"); - #endif } public sendSocket(id, szHost[], szUrl[], szAction[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: sendSocket"); - #endif - if( !socket_polacz(id, szHost) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: sendSocket"); - #endif return; } @@ -2429,17 +1869,9 @@ public sendSocket(id, szHost[], szUrl[], szAction[]) { //Utworzenie nowego pseudo watku oczekujacego na odpowiedz set_task(0.6, "socket_CheckData", TASK_CHECK_SOCKET+id, szAction, strlen(szAction)); set_task(10.0, "socket_TimeOut", TASK_TIME_OUT+id, szText, strlen(szText)); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: sendSocket"); - #endif } -public socket_TimeOut(szData[], id) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: socket_TimeOut"); - #endif - +public socket_TimeOut(szData[], id) { id -= TASK_TIME_OUT; new szAction[32], szText[512]; @@ -2458,47 +1890,25 @@ public socket_TimeOut(szData[], id) { log_to_file(LOG_FILE, "Nie udalo sie przeprowadzic walidacji licencji o numerze identyfikacyjnym: %s", license); shop_registered = false; } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: closeSocket"); - #endif } -public closeSocket(socketID) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: closeSocket"); - #endif - +public closeSocket(socketID) { socket_close(sockets[socketID]); sockets[socketID] = 0; remove_task(TASK_CHECK_SOCKET+socketID); remove_task(TASK_TIME_OUT+socketID); - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: closeSocket"); - #endif } // ######### Koniec Socketow ######### _getServicePluginByID( id[] ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _getServicePluginByID"); - #endif - new temp[MAX_NAME+1]; for(new i = 0; i < ArraySize(service_ids); ++i) { ArrayGetString(service_ids, i, temp, charsmax(temp)); if( equali(id, temp) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _getServicePluginByID"); - #endif return ArrayGetCell(service_plugins, i); } } - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: _getServicePluginByID"); - #endif return -1; } @@ -2513,38 +1923,20 @@ _getServiceByID( id[] ) { return -1; } -_getNumberByTariff( tariff, number[], len ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: _getNumberByTariff"); - #endif - +_getNumberByTariff( tariff, number[], len ) { new sms[e_SMS]; for(new i = 0; i < ArraySize(smses); ++i) { ArrayGetArray(smses, i, sms); if( tariff == sms[sTARIFF] ) { copy(number, len, sms[NUMBER]); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: _getNumberByTariff"); - #endif return; } } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: _getNumberByTariff"); - #endif } /* Stocki */ -stock usunPusteLinie(sciezka[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: usunPusteLinie"); - #endif - +stock usunPusteLinie(sciezka[]) { if( !file_exists(sciezka) ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: usunPusteLinie"); - #endif return; } @@ -2570,73 +1962,38 @@ stock usunPusteLinie(sciezka[]) { //Zmienia nazwe tymczasowego pliku na stary plik rename_file(zastepcza, sciezka, 1); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: usunPusteLinie"); - #endif } -stock escape(string[], string_len=64) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: escape"); - #endif - +stock escape(string[], string_len=64) { replace_all(string, string_len, "'", "\'"); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: escape"); - #endif return 1; } -stock get_sms_cost(szNumber[]) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: get_sms_cost"); - #endif - +stock get_sms_cost(szNumber[]) { if(strlen(szNumber) < 4) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: get_sms_cost"); - #endif return 0; } else if(szNumber[0] == '7') { new temp[4]; formatex(temp, charsmax(temp), "%c", szNumber[1]); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end2: get_sms_cost"); - #endif return szNumber[1] == '0' ? 50 : str_to_num(temp)*100; } else if(szNumber[0] == '9') { new temp[4]; formatex(temp, charsmax(temp), "%c%c", szNumber[1], szNumber[2]); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end3: get_sms_cost"); - #endif return str_to_num(temp)*100; } - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end4: get_sms_cost"); - #endif return 0; } -stock two_number_value(value) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: two_number_value"); - #endif - +stock two_number_value(value) { new temp[17]; if( value < 10 ) formatex(temp, charsmax(temp), "0%d", value); else formatex(temp, charsmax(temp), "%d", value); - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: two_number_value"); - #endif - return temp; } @@ -2653,11 +2010,7 @@ stock groupDigits(a, output[], len) { } } -stock getXMLValue(szText[], tag[], output[], len) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: getXMLValue"); - #endif - +stock getXMLValue(szText[], tag[], output[], len) { new temp[64], textStart, textEnd; formatex(temp, charsmax(temp), "<%s>", tag); @@ -2671,17 +2024,9 @@ stock getXMLValue(szText[], tag[], output[], len) { new tag_len = 2 + strlen(tag); copy(output, min(len, textEnd - textStart - tag_len), szText[textStart + tag_len]); } - - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: getXMLValue"); - #endif } -stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen ) { - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "start: StringURLEncode"); - #endif - +stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen ) { static const HEXCHARS[ 16 ] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 @@ -2720,10 +2065,6 @@ stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen ) { szOutput[ iFLen ] = 0; - #if defined TRACE_FILE - log_to_file(TRACE_FILE, "end1: StringURLEncode"); - #endif - return iFLen; } From 69c9c006975ae69df726cd62cf16996daebf5ae5 Mon Sep 17 00:00:00 2001 From: seek Date: Mon, 1 Feb 2016 01:51:19 +0100 Subject: [PATCH 011/124] Improved error handling. Improved code quality. Added little bit of documentation. Improved sockets work. --- services/sklepsms_usluga_bf2_odznaki.amxx | Bin 3215 -> 3203 bytes sklep_sms.sma | 1664 ++++++++++++--------- 2 files changed, 957 insertions(+), 707 deletions(-) diff --git a/services/sklepsms_usluga_bf2_odznaki.amxx b/services/sklepsms_usluga_bf2_odznaki.amxx index a96292b59949e2c7f65d1facfd2a82055f4fd9ff..7918a5735967065d42813e0ec9c71ec6ce3d6948 100644 GIT binary patch literal 3203 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 literal 3215 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 Bgd+d| diff --git a/sklep_sms.sma b/sklep_sms.sma index f5fd61f..4cf1881 100644 --- a/sklep_sms.sma +++ b/sklep_sms.sma @@ -31,17 +31,20 @@ forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); #define KEYS2 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 1234567890 // Logowanie danych -#define LOGING -#define DEBUG "sklep_sms_debug.log" +#define LOG_SQL #define CFG_FILE "sklep_sms.cfg" -#define LOG_FILE "sklep_sms.log" -//#define FOLLOW_RELOAD_FLAGS "shopsms_follow_reload_flags.log" +new const DEBUG_FILE[] = "sklep_sms_debug.log"; +new const LOG_FILE[] = "sklep_sms.log"; -// Stale const MAX_KOMENDA = 32; const MAX_KONTAKT = 64; -//Rejestracja uslug +enum e_KeyValue { + kvKEY[128], + kvVALUE[128] +}; + +// Rejestracja uslug enum e_Service { sID[MAX_ID+1], PLUGIN, @@ -53,7 +56,7 @@ enum e_Service { TYPES }; -new Array:service_plugins, +new Array:service_plugins, Array:service_ids, Array:services; @@ -72,7 +75,7 @@ enum e_SMS { }; new Array:smses; -// Lista cen ( taryf ) dla usług +// Lista cen (taryf) dla usług enum e_Price { pSERVICE[MAX_ID+1], pTARIFF, @@ -81,13 +84,14 @@ enum e_Price { new Array:pricelist; //Dodatkowe zmienne -new which_service[33], +new which_service[33], which_price[33], b_passwords[33][MAX_PASSWORD+1], b_types[33]; //CVARy new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; +new cvar_debug; new sklep_komenda[MAX_KOMENDA+1], przeladuj_komenda[MAX_KOMENDA+1], uslugi_komenda[MAX_KOMENDA+1], show_info; // Sciezka do pliku konfiguracyjnego @@ -95,19 +99,19 @@ new config_path[128]; //Licencja new license[32], license_password[33]; -new bool:footer = true; -new server_ip[32]; -new server_name[128]; -new bool:blocked = false; +new bool:g_footer = true; +new g_serverIp[32]; +new g_serverName[128]; +new bool:g_blocked = false; // MySQL new const TABLE_PREFIX[] = "ss_"; new Handle:SqlTuple; -new bool:sql_connected = false; +new bool:g_sqlConnected = false; new sql_host[64], sql_user[32], sql_pass[32], sql_db[32]; -new server_id; +new g_serverId; new const all_flags[] = "abcdefghijklmnopqrstuyvwxz"; -new szTemp[4096]; +new g_szTemp[4096]; // Flagi graczy enum e_PlayerFlags { @@ -117,15 +121,19 @@ enum e_PlayerFlags { pfTYPE }; new Array:players_flags; -new bool:players_loaded = false; -new ostatnie_przeladowanie; +new bool:g_playersLoaded = false; +new g_lastReload; // Sockets -new sockets[33]; +#define SOCKET_OK -1 +#define SOCKET_TIMEOUT -2 + +const MAX_SOCKETS = 40; +new g_sockets[MAX_SOCKETS]; +new g_socketCounter = 0; // Settings -new st_currency[16], - st_shop_url[128], +new st_currency[16], st_signature[128], st_sms_service[65], st_contact[MAX_KONTAKT+1], @@ -133,12 +141,14 @@ new st_currency[16], st_random_key_md5[34], Float:st_vat; -new shop_url[128], shop_url_add[128]; +new g_shopPageUrl[256]; +new g_shopPagePort = 80; -new bool:shop_registered = false; -new bool:is_amxbans = false; +new bool:g_shopRegistered = false; +new bool:g_AmxbansExists = false; -public plugin_natives() { +public plugin_natives() +{ register_library("shop_sms"); register_native("ss_register_service", "registerService"); register_native("ss_show_service_purchase", "native_showServicePurchase"); @@ -148,12 +158,13 @@ public plugin_natives() { register_native("ss_is_steam", "native_is_steam"); } -public plugin_precache() { +public plugin_precache() +{ get_configsdir(config_path, charsmax(config_path)); // Tworzenie pliku sklep_sms.cfg format(config_path, charsmax(config_path), "%s/%s", config_path, CFG_FILE); - if(!file_exists(config_path)) { + if (!file_exists(config_path)) { new szText[1024], iLen=0, iMax=charsmax(szText); iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); iLen += formatex(szText[iLen], iMax-iLen, "// SKLEP SMS: - Plik Konfiguracyjny^n"); @@ -209,9 +220,10 @@ public plugin_precache() { cvar_db = register_cvar("sklepsms_db", ""); cvar_server_ip = register_cvar("sklepsms_server_ip", ""); cvar_silent_command = register_cvar("sklepsms_ciche_komendy", "0"); + cvar_debug = register_cvar("sklepsms_debug", "0"); // Wczytywanie confingu - if(file_exists(config_path)) { + if (file_exists(config_path)) { server_cmd("exec %s", config_path); } @@ -224,7 +236,8 @@ public plugin_precache() { pricelist = ArrayCreate(e_Price); } -public plugin_init() { +public plugin_init() +{ register_plugin("Sklep SMS", VERSION, "SeeK"); register_menucmd(register_menuid("SMS_Info"), KEYS, "infoSMS_handler"); @@ -237,11 +250,13 @@ public plugin_init() { register_clcmd("say", "sayHook"); register_clcmd("say_team", "sayHook"); - if( show_info ) + if (show_info) { set_task(137.0, "reklama", _, _, _, "b"); + } } -public loadCvars() { +public loadCvars() +{ //Pobieranie wartosci cvarow get_pcvar_string(cvar_sklep, sklep_komenda, charsmax(sklep_komenda)); get_pcvar_string(cvar_przeladuj, przeladuj_komenda, charsmax(przeladuj_komenda)); @@ -254,143 +269,155 @@ public loadCvars() { get_pcvar_string(cvar_db, sql_db, charsmax(sql_db)); } -public plugin_end() { - if( SqlTuple ) +public plugin_end() +{ + if (SqlTuple) { SqlTuple = Empty_Handle; + } } public plugin_cfg() { - // Blad przy tworzeniu ( brak uprawnien ) - if( !file_exists(config_path) ) + // Blad przy tworzeniu (brak uprawnien) + if (!file_exists(config_path)) { brakSciezki(0, config_path); + } // Ponowne wczytywanie confingu - if( file_exists(config_path) ) { + if (file_exists(config_path)) { server_cmd("exec %s", config_path); server_exec(); } // Pobieranie ip serwera - get_pcvar_string(cvar_server_ip, server_ip, charsmax(server_ip)); - if( !strlen(server_ip) ) // Brak ip w cvarach - get_user_ip(0, server_ip, charsmax(server_ip)); + get_pcvar_string(cvar_server_ip, g_serverIp, charsmax(g_serverIp)); + if (!strlen(g_serverIp)) { // Brak ip w cvarach + get_user_ip(0, g_serverIp, charsmax(g_serverIp)); + } // Ladownaie cvarow loadCvars(); // Łaczenie z baza SqlTuple = SQL_MakeDbTuple(sql_host, sql_user, sql_pass, sql_db); - if( !SqlTuple ) _error42("plugin_cfg"); + if (! SqlTuple) { + _error51(); + } // Zaladuj flagi _usersLoad(false); - new ip[22], port[10]; - split(server_ip, ip, charsmax(ip), port, charsmax(port), ":"); + if (SqlTuple) { + new ip[22], port[10]; + split(g_serverIp, ip, charsmax(ip), port, charsmax(port), ":"); + + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT s.id, s.name, s.sms_service, CONCAT(' ', GROUP_CONCAT( ss.service_id SEPARATOR ' ' ), ' ') AS `services` \ + FROM `%sservers` AS s \ + LEFT JOIN `%sservers_services` AS ss ON ss.server_id = s.id \ + WHERE s.ip = '%s' AND s.port = '%s' \ + GROUP BY s.id", + TABLE_PREFIX, TABLE_PREFIX, ip, port + ); - formatex(szTemp, charsmax(szTemp), - "SELECT s.id, s.name, s.sms_service, CONCAT(' ', GROUP_CONCAT( ss.service_id SEPARATOR ' ' ), ' ') AS `services` \ - FROM `%sservers` AS s \ - LEFT JOIN `%sservers_services` AS ss ON ss.server_id = s.id \ - WHERE s.ip = '%s' AND s.port = '%s' \ - GROUP BY s.id", - TABLE_PREFIX, TABLE_PREFIX, ip, port - ); - //log_to_file(LOG_FILE, szTemp); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getServerData", szTemp); + SQL_ThreadQuery(SqlTuple, "getServerData", g_szTemp); + } } -public checkLoadedServices() { - if( !ArraySize(services) ) { +public checkLoadedServices() +{ + if (!ArraySize(services)) { log_amx("Nie zaladowano zadnych uslug."); } else { log_amx("Zaladowano %d uslug.", ArraySize(services)); } } -public client_authorized(id) { +public client_authorized(id) +{ _usersCheckUser(id); } -public client_putinserver(id) { +public client_putinserver(id) +{ _usersCheckUser(id); } -public sayHook(id) { +public sayHook(id) +{ new tekst[32]; read_argv(1, tekst, charsmax(tekst)); - if(equali(tekst, sklep_komenda)) { - if(blocked) - client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepiku z powodu bledow ze sklepem.", PREFIX); - else - sklepMenu(id); - - if( get_pcvar_num(cvar_silent_command) ) - return PLUGIN_HANDLED; + if (equali(tekst, sklep_komenda)) { + sklepMenu(id); } - else if(equali(tekst, przeladuj_komenda)) { + else if (equali(tekst, przeladuj_komenda)) { pre_usersReload(id); - - if( get_pcvar_num(cvar_silent_command) ) - return PLUGIN_HANDLED; } - else if(equali(tekst, uslugi_komenda)) { + else if (equali(tekst, uslugi_komenda)) { _showPlayerServices(id); - - if( get_pcvar_num(cvar_silent_command) ) - return PLUGIN_HANDLED; } - return PLUGIN_CONTINUE; + return get_pcvar_num(cvar_silent_command) ? PLUGIN_HANDLED : PLUGIN_CONTINUE; } /* Menu sklepu */ -public sklepMenu(id) { - if( !is_user_connected(id) ) { +public sklepMenu(id) +{ + if (!is_user_connected(id)) { return; } - if(!get_pcvar_num(cvar_on)) { + + if (!get_pcvar_num(cvar_on)) { client_print_color(id, Red, "^4[%s] ^1Sklep jest obecnie ^3wylaczony^1.", PREFIX); return; } - if( !sql_connected ) { + + if (g_blocked) { + client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepu z powodu bledow ze sklepem. Zobacz logi.", PREFIX); + } + + if (!g_sqlConnected) { client_print_color(id, Red, "^4[%s] ^1Nie polaczono z baza danych.", PREFIX); return; } - if(!ArraySize(services)) { + + if (!ArraySize(services)) { client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); return; } - if( !shop_registered ) { + if (!g_shopRegistered) { client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); return; } new menu; - if(footer) + if (g_footer) { menu = menu_create("\rSklep SMS\d napedzany przez\w sklep-sms.pl^n\yWybierz usluge:", "sklepMenu_handler"); - else - menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "sklepMenu_handler"); + } else { + menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "sklepMenu_handler"); + } new menu_callback = menu_makecallback("sklepMenu_callback"); new szText[64], service[e_Service]; - for(new i = 0; i < ArraySize(services); ++i) { + for (new i = 0; i < ArraySize(services); ++i) { new data[4]; data[0] = i+1; // Pobierz dane o usludze ArrayGetArray(services, i, service); // Usluga wymaga posiadania grupy, TODO zakodzic to - /*if( strlen(service[GROUPS]) ) - continue;*/ + // if (strlen(service[GROUPS])) { + // continue; + // } // Sforamtuj punkt w menu - if( service[DESCRIPTION] ) + if (service[DESCRIPTION]) { formatex(szText, charsmax(szText), "Kup %s \d(%s)", service[sNAME], service[DESCRIPTION]); - else + } + else { formatex(szText, charsmax(szText), "Kup %s", service[sNAME]); + } new ret; new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_addingtolist", FP_CELL); @@ -399,11 +426,12 @@ public sklepMenu(id) { data[1] = ret; - if(data[1] != ITEM_OFF) + if (data[1] != ITEM_OFF) { menu_additem(menu, szText, data, 0, menu_callback); + } } - //Wyjdz zamiast Exit + // Wyjdz zamiast Exit menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(id, menu); @@ -411,15 +439,17 @@ public sklepMenu(id) { client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, st_contact); } -public sklepMenu_callback(id, menu, item) { +public sklepMenu_callback(id, menu, item) +{ new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); return data[1] == ITEM_DISABLED ? ITEM_DISABLED : ITEM_ENABLED; } -public sklepMenu_handler(id, menu, item) { - if( !is_user_connected(id) || item == MENU_EXIT ) { +public sklepMenu_handler(id, menu, item) +{ + if (!is_user_connected(id) || item == MENU_EXIT) { menu_destroy(menu); return; } @@ -433,8 +463,9 @@ public sklepMenu_handler(id, menu, item) { /* Konie menu sklepu */ /* Menu wyboru */ -public wyborMenu(id, service_id) { - if( !is_user_connected(id) ) { +public wyborMenu(id, service_id) +{ + if (!is_user_connected(id)) { return; } @@ -448,24 +479,26 @@ public wyborMenu(id, service_id) { new menu = menu_create(szText, "wyborMenu_handler"); new price[e_Price], number[MAX_NUMBER+1]; - for(new i = 0; i < ArraySize( pricelist ); ++i) { + for (new i = 0; i < ArraySize(pricelist); ++i) { ArrayGetArray(pricelist, i, price); // ID usługi jest inne - if( !equali(price[pSERVICE], service[sID]) ) + if (!equali(price[pSERVICE], service[sID])) { continue; + } // Pobranie numeru na ktory trzeba wyslac SMSa setc(number, strlen(number), 0); _getNumberByTariff(price[pTARIFF], number, charsmax(number)); // Przy danej metodzie płatności nie można użyć danej taryfy - if( !strlen(number) ) + if (!strlen(number)) { continue; + } new amount[32+1]; - if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); - else { + } else { groupDigits(price[AMOUNT], amount, charsmax(amount)); format(amount, charsmax(amount), "%s %s", amount, service[TAG]); } @@ -484,19 +517,20 @@ public wyborMenu(id, service_id) { // Wyjdz zamiast Exit menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - if( menu_items(menu) > 1 ) + if (menu_items(menu) > 1) { menu_display(id, menu); - else if(menu_items(menu) == 1) { // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie + } else if (menu_items(menu) == 1) { // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie which_service[id] = service_id; which_price[id] = data[1]+data[2]; prev_infoSMS(id); - } - else // Zero + } else { // Zero client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); + } } -public wyborMenu_handler(id, menu, item) { - if(!is_user_connected(id) || item == MENU_EXIT) { +public wyborMenu_handler(id, menu, item) +{ + if (!is_user_connected(id) || item == MENU_EXIT) { menu_destroy(menu); return; } @@ -513,12 +547,13 @@ public wyborMenu_handler(id, menu, item) { /* Koniec menu wyboru */ /* Informacje dot SMSa */ -public prev_infoSMS(id) { +public prev_infoSMS(id) +{ new service[e_Service]; ArrayGetArray(services, which_service[id], service); - if( service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID) ) { + if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { // Wyswietlamy menu z wyborem na co chcemy kupic usluge new menu = menu_create("Wybierz typ uslugi", "menuServiceType_handler"); new menu_callback = menu_makecallback("menuServiceType_callback"); @@ -540,11 +575,12 @@ public prev_infoSMS(id) { } } -public menuServiceType_callback(id, menu, item) { +public menuServiceType_callback(id, menu, item) +{ new service[e_Service]; ArrayGetArray(services, which_service[id], service); - switch( item ) { + switch (item) { case 0: return service[TYPES]&TYPE_NICK ? ITEM_ENABLED : ITEM_DISABLED; case 1: return service[TYPES]&TYPE_IP ? ITEM_ENABLED : ITEM_DISABLED; case 2: return service[TYPES]&TYPE_SID && is_steam(id) ? ITEM_ENABLED : ITEM_DISABLED; @@ -553,23 +589,25 @@ public menuServiceType_callback(id, menu, item) { return ITEM_DISABLED; } -public menuDisplayServiceTypes(data[]) { +public menuDisplayServiceTypes(data[]) +{ new id = data[0]; - if( !is_user_connected(id) ) { + if (!is_user_connected(id)) { menu_destroy(data[1]); return; } new menu, newmenu; player_menu_info(id, menu, newmenu); - if(newmenu != data[1]) + if (newmenu != data[1]) menu_display(id, data[1]); set_task(0.1, "menuDisplayServiceTypes", TASK_SHOW_MENU_SERVICE_TYPES+id, data, 2); } -public menuServiceType_handler(id, menu, item) { - switch(item) { +public menuServiceType_handler(id, menu, item) +{ + switch (item) { case 0: { client_cmd(id, "messagemode ssnick_Podaj_Haslo"); } @@ -581,35 +619,39 @@ public menuServiceType_handler(id, menu, item) { } } - if( 0 <= item <= 2) { + if (0 <= item <= 2) { remove_task(TASK_SHOW_MENU_SERVICE_TYPES+id); menu_destroy(menu); } } -public menuServiceType_nick(id) { +public menuServiceType_nick(id) +{ new szPassword[65]; read_argv(1, szPassword, charsmax(szPassword)); - if( !_menuServiceType_checkPass(id, TYPE_NICK, szPassword) ) { + if (!_menuServiceType_checkPass(id, TYPE_NICK, szPassword)) { client_cmd(id, "messagemode ssnick_Podaj_Haslo"); } } -public menuServiceType_ip(id) { +public menuServiceType_ip(id) +{ new szPassword[65]; read_argv(1, szPassword, charsmax(szPassword)); - if( !_menuServiceType_checkPass(id, TYPE_IP, szPassword) ) + if (! _menuServiceType_checkPass(id, TYPE_IP, szPassword)) { client_cmd(id, "messagemode ssip_Podaj_Haslo"); + } } -bool:_menuServiceType_checkPass(id, type, szPassword[]) { - if( strlen(szPassword) > 30 ) { +bool:_menuServiceType_checkPass(id, type, szPassword[]) +{ + if (strlen(szPassword) > 30) { client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); return false; } - else if( !strlen(szPassword) ) { + else if (!strlen(szPassword)) { client_print(id, print_center, "Haslo nie zostalo wprowadzone. Wprowadz je."); return false; } @@ -618,32 +660,34 @@ bool:_menuServiceType_checkPass(id, type, szPassword[]) { return true; } -public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { +public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], data_size) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } new id = data[0]; new type = data[1]; // Haslo takie jak do innych uslug - if( SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "equal")) ) { + if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "equal"))) { new szPassword[33]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), szPassword, charsmax(szPassword)); _serviceChosen(id, type, szPassword); } else { - if( type == TYPE_NICK ) { + if (type == TYPE_NICK) { client_print_color(id, Red, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3nick^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); client_cmd(id, "messagemode ssnick_Podaj_Haslo"); } - else if( type == TYPE_IP ) { + else if (type == TYPE_IP) { client_print_color(id, Blue, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3adres IP^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); client_cmd(id, "messagemode ssip_Podaj_Haslo"); } } } -_serviceChosen(id, type=0, szPassword[] = "") { +_serviceChosen(id, type=0, szPassword[] = "") +{ new service[e_Service], price[e_Price]; ArrayGetArray(services, which_service[id], service); ArrayGetArray(pricelist, which_price[id], price); @@ -655,46 +699,48 @@ _serviceChosen(id, type=0, szPassword[] = "") { ExecuteForward(forward_handle, ret, id, price[AMOUNT]); DestroyForward(forward_handle); - if( ret != SS_STOP ) { + if (ret != SS_STOP) { infoSMS(id); } } -public infoSMS(id) { - if( !is_user_connected(id) ) { +public infoSMS(id) +{ + if (!is_user_connected(id)) { return; } - new service[e_Service], price[e_Price], number[MAX_NUMBER+1], szText[512]; + new service[e_Service], price[e_Price], number[MAX_NUMBER+1]; ArrayGetArray(services, which_service[id], service); ArrayGetArray(pricelist, which_price[id], price); _getNumberByTariff(price[pTARIFF], number, charsmax(number)); new amount[32+1]; - if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); - else { + } else { groupDigits(price[AMOUNT], amount, charsmax(amount)); format(amount, charsmax(amount), "%s %s", amount, service[TAG]); } - formatex(szText, charsmax(szText), "\rSklep SMS^n^n"); - format(szText, charsmax(szText), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", szText, service[sNAME], amount); + formatex(g_szTemp, charsmax(g_szTemp), "\rSklep SMS^n^n"); + format(g_szTemp, charsmax(g_szTemp), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", g_szTemp, service[sNAME], amount); new temp_cost = get_sms_cost(number); - format(szText, charsmax(szText), + format(g_szTemp, charsmax(g_szTemp), "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", - szText, transaction_service[SMS_TEXT], number, temp_cost/100, two_number_value(temp_cost%100), st_currency, floatround(temp_cost*st_vat)/100, + g_szTemp, transaction_service[SMS_TEXT], number, temp_cost/100, two_number_value(temp_cost%100), st_currency, floatround(temp_cost*st_vat)/100, two_number_value(floatround(temp_cost*st_vat)%100), st_currency ); - format(szText, charsmax(szText), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", szText); + format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); //Wyswietlane caly czas menu zakupu - infoSMS_wyswietl(szText, id+TASK_WYSWIETL); + infoSMS_wyswietl(g_szTemp, id+TASK_WYSWIETL); } -public infoSMS_wyswietl(info[], id) { +public infoSMS_wyswietl(info[], id) +{ id -= TASK_WYSWIETL; - if( !is_user_connected(id) ) { + if (!is_user_connected(id)) { return; } @@ -702,41 +748,46 @@ public infoSMS_wyswietl(info[], id) { set_task(0.9, "infoSMS_wyswietl", id+TASK_WYSWIETL, info, strlen(info)); } -public infoSMS_handler(id, key) { - if(task_exists(id+TASK_WYSWIETL)) remove_task(id+TASK_WYSWIETL); +public infoSMS_handler(id, key) +{ + if (task_exists(id+TASK_WYSWIETL)) { + remove_task(id+TASK_WYSWIETL); + } - if( !is_user_connected(id) ) { + if (!is_user_connected(id)) { return; } - if(key == 0) { + if (key == 0) { client_cmd(id, "messagemode Podaj_Kod_Zwrotny"); - } - else if(key == 9) { + } else if (key == 9) { client_print_color(id, Red, "^4[%s] ^1Transakcja zostala ^3przerwana^1.", PREFIX); } } // Wprowadzanie kodu zwrotnego -public kodZwrotny(id) { - if( !is_user_connected(id) ) { +public kodZwrotny(id) +{ + if (!is_user_connected(id)) { return; } - new sms_code[MAX_CODE+1], szUrl[512]; + new sms_code[MAX_CODE+1]; read_argv(1, sms_code, charsmax(sms_code)); dodajLog2(id, "Wprowadzono kod: %s", sms_code); - if(!strlen(sms_code)) { + if (!strlen(sms_code)) { client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); return; } - else if(containi(sms_code, " ") != -1) { + + if (containi(sms_code, " ") != -1) { client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1.", PREFIX); return; } - else if(strlen(sms_code) == 1 && containi(sms_code, "0") == 0) { + + if (strlen(sms_code) == 1 && containi(sms_code, "0") == 0) { client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1byc rowny^3 0^1.", PREFIX); return; } @@ -752,15 +803,16 @@ public kodZwrotny(id) { ArrayGetArray(services, which_service[id], service); // Pobieramy dane gracza Nick / IP / SID - switch( b_types[id] ) { + switch (b_types[id]) { case TYPE_IP: get_user_ip(id, auth_data, charsmax(auth_data), 1); case TYPE_SID: get_user_authid(id, auth_data, charsmax(auth_data)); case TYPE_NICK: get_user_name(id, auth_data, charsmax(auth_data)); } // Jezeli usluga nie jest wykupowana na nickpass, ippass, sid, to pobieramy nick - if( !strlen(auth_data) ) + if (!strlen(auth_data)) { get_user_name(id, auth_data, charsmax(auth_data)); + } // Pobieramy IP gracza get_user_ip(id, ip, charsmax(ip), 1); @@ -776,18 +828,46 @@ public kodZwrotny(id) { StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); StringURLEncode(ip, u_ip, charsmax(u_ip)); - formatex(szUrl, charsmax(szUrl), - "%sservers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=engine_amxx&language=polish", - shop_url_add, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, server_id, u_sms_service, u_sms_code, price[pTARIFF], u_ip + formatex(g_szTemp, charsmax(g_szTemp), + "%s/servers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=engine_amxx&language=polish", + g_shopPageUrl, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, g_serverId, u_sms_service, u_sms_code, price[pTARIFF], u_ip ); - sendSocket(id, shop_url, szUrl, "purchase_service"); + getWebPage(g_szTemp, g_shopPagePort, "getWebPagePurchaseService"); +} + +public getWebPagePurchaseService(const data[], const content[], playerId, status) +{ + switch (status) { + case SOCKET_OK: { + new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[1024]; + + getXMLValue(content, "return_value", return_value, charsmax(return_value)); + getXMLValue(content, "text", szText, charsmax(szText)); + getXMLValue(content, "positive", szPositive, charsmax(szPositive)); + getXMLValue(content, "bsid", szBsid, charsmax(szBsid)); + getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); + + purchaseServicePost(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); + } + + case SOCKET_TIMEOUT: { + log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z powodu przekroczenia limitu czasu polaczenia."); + client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z powodu przekroczenia limitu czasu polaczenia.", PREFIX); + } + + default: { + log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow."); + client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow.", PREFIX); + } + } } -public purchaseService_callback(id, return_value[], szText[], positive, bsid, szWarnings[]) { +public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarnings[]) +{ client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, szText); - if( strlen(szWarnings) ) { - format(szWarnings, 1023, + if (strlen(szWarnings)) { + format(g_szTemp, charsmax(g_szTemp), "\ \ \ @@ -797,11 +877,11 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz ", szWarnings ); - show_motd(id, szWarnings, "Bledy przy zakupie uslugi"); + show_motd(id, g_szTemp, "Bledy przy zakupie uslugi"); } // Wystapil jakis blad, wiec przerywamy - if( positive != 1 ) { + if (positive != 1) { return; } @@ -815,12 +895,13 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz DestroyForward(forward_handle); // Wystapil jakis blad - if( ret == SS_ERROR ) { + if (ret == SS_ERROR) { client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, st_contact); new amount[32+1]; - if( price[AMOUNT] == -1 ) // Jezeli -1 to usluga jest na zawsze + if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); + } else { groupDigits(price[AMOUNT], amount, charsmax(amount)); format(amount, charsmax(amount), "%s %s", amount, service[TAG]); @@ -832,12 +913,11 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz } // Info w przypadku usługi na haslo - if( b_types[id] & (TYPE_NICK|TYPE_IP) ) { + if (b_types[id] & (TYPE_NICK|TYPE_IP)) { // Ustawienie hasla client_cmd(id, "setinfo _ss ^"%s^"", b_passwords[id]); - new szText[512]; - formatex(szText, charsmax(szText), + formatex(g_szTemp, charsmax(g_szTemp), "


\

Wykupiles/as usluge: %s

\ Aby usluga dziala, dodaj wpis do pliku config.cfg: setinfo _ss ^"%s^"

\ @@ -845,22 +925,21 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz

", service[sNAME], b_passwords[id] ); - show_motd(id, szText, "Informacje dotyczace uslugi"); + show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } - else if( b_types[id]&TYPE_SID ) { - new szText[512]; - formatex(szText, charsmax(szText), + else if (b_types[id]&TYPE_SID) { + formatex(g_szTemp, charsmax(g_szTemp), "


\

Wykupiles/as usluge: %s

\ W razie problemow skontaktuj sie z nami.\

", service[sNAME] ); - show_motd(id, szText, "Informacje dotyczace uslugi"); + show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } new amount[32+1]; - if( price[AMOUNT] == -1 ) {// Jezeli -1 to usluga jest na zawsze + if (price[AMOUNT] == -1) {// Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); } else { @@ -871,69 +950,88 @@ public purchaseService_callback(id, return_value[], szText[], positive, bsid, sz client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], amount); // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy - if( service[FLAGS] ) { - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 1"); - #endif + if (service[FLAGS]) { // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo set_task(2.0, "usersReloadData"); } } -// Dodanie kodu do bazy kodow -public addCode(sms_code[], sms_tariff, free) { - formatex(szTemp, charsmax(szTemp), "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) VALUES ('%s', '%d', '%d')", TABLE_PREFIX, sms_code, sms_tariff, free); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); - dodajLog2(0, "Dodano SMSa do tabeli kodow do wykorzystania. Kod: %s Taryfa: %d", sms_code, sms_tariff); +/** + * Dodanie kodu do bazy kodow + * + * @param char[] sms_code + * @param int sms_tariff + * @param bool free + */ +addCode(sms_code[], sms_tariff, bool:free=true) +{ + formatex(g_szTemp, charsmax(g_szTemp), + "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) \ + VALUES ('%s', '%d', '%d')", + TABLE_PREFIX, sms_code, sms_tariff, free + ); + + if (!SqlTuple) { + return SS_ERROR; + } + SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); + dodajLog2(0, "Dodano SMSa do tabeli kodow do wykorzystania. Kod: %s Taryfa: %d", sms_code, sms_tariff); return SS_OK; } // Wyswietlenie obecnych uslug gracza -_showPlayerServices(id) { - if( !is_user_connected(id) ) +_showPlayerServices(id) +{ + if (!is_user_connected(id)) { return; + } new name[64+1], sid[64+1], ip[32+1]; get_user_name(id, name, charsmax(name)); - escape(name, charsmax(name)); + escapeQuotes(name, charsmax(name)); get_user_ip(id, ip, charsmax(ip), 1); - escape(ip, charsmax(ip)); + escapeQuotes(ip, charsmax(ip)); get_user_authid(id, sid, charsmax(sid)); - escape(sid, charsmax(sid)); - - new data[1]; data[0] = id; - formatex(szTemp, charsmax(szTemp), - "SELECT s.name AS `service`, FROM_UNIXTIME(us.expire) AS `expire`, us.expire AS `expire_num` FROM `%suser_service` AS us \ - INNER JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ - INNER JOIN `%sservices` AS s ON us.service = s.id \ - WHERE usef.server = '%d' \ - AND ((usef.type = '%d' AND usef.auth_data = '%s') \ - OR (usef.type = '%d' AND usef.auth_data = '%s') \ - OR (usef.type = '%d' AND usef.auth_data = '%s'))", - TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, server_id, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid - ); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayerServices", szTemp, data, sizeof data); + escapeQuotes(sid, charsmax(sid)); + + if (SqlTuple) { + new data[1]; data[0] = id; + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT s.name AS `service`, FROM_UNIXTIME(us.expire) AS `expire`, us.expire AS `expire_num` FROM `%suser_service` AS us \ + INNER JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ + INNER JOIN `%sservices` AS s ON us.service = s.id \ + WHERE usef.server = '%d' \ + AND ((usef.type = '%d' AND usef.auth_data = '%s') \ + OR (usef.type = '%d' AND usef.auth_data = '%s') \ + OR (usef.type = '%d' AND usef.auth_data = '%s'))", + TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, g_serverId, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid + ); + + SQL_ThreadQuery(SqlTuple, "getPlayerServices", g_szTemp, data, sizeof data); + } } -public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { +public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], data_size) +{ new id = data[0]; - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { client_print_color(id, Red, "^4[%s] ^1Niestety, nie udalo sie pozyskac informacji o Twoich uslugach.", PREFIX); return; } new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); - while(SQL_MoreResults(Query)) { + while (SQL_MoreResults(Query)) { new service[MAX_ID+1], expire[32+1], item_text[128]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), service, charsmax(service)); - if( SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire_num")) == -1 ) + if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire_num")) == -1) { copy(expire, charsmax(expire), "Nigdy"); - else + } else { SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire"), expire, charsmax(expire)); + } formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service, expire); menu_additem(menu, item_text); @@ -941,125 +1039,115 @@ public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], da SQL_NextRow(Query); } - if( menu_items(menu) ) { + if (menu_items(menu)) { menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(id, menu); } - else + else { client_print_color(id, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); + } } -public showPlayerServices_handler(id, menu, item) { +public showPlayerServices_handler(id, menu, item) +{ menu_destroy(menu); } // Funkcje dotyczace flag graczy -public pre_usersReload(id) { - if(ostatnie_przeladowanie+10 > get_systime()) { +public pre_usersReload(id) +{ + if (g_lastReload+10 > get_systime()) { client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); return; } - ostatnie_przeladowanie = get_systime(); + g_lastReload = get_systime(); _usersReload(id); } -_usersReload(id) { - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 9"); - #endif - for(new i = 1; i <= get_maxplayers(); ++i) { - if( !is_user_connected(i) ) +_usersReload(id) +{ + for (new i = 1; i <= get_maxplayers(); ++i) { + if (! is_user_connected(i)) { continue; + } _usersCheckUser(i); } - if( id ) { + if (id) { client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); } - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 10"); - #endif } // Funkcja wczytujaca z bazy ponownie dane graczy public usersReloadData() { - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 2"); - #endif // Wczytywanie danych graczy _usersLoad(true); } _usersLoad(bool:reload) { - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 3"); - #endif // Czyscimy dotychczasowe dane ArrayClear(players_flags); - players_loaded = false; - - new ip[16], port[8]; - split(server_ip, ip, charsmax(ip), port, charsmax(port), ":"); - - formatex(szTemp, charsmax(szTemp), - "SELECT f.id, f.type, f.auth_data, f.password, f.a, f.b, f.c, f.d, f.e, f.f, f.g, f.h, f.i, f.j, f.k, f.l, f.m, f.n, f.o, f.p, f.q, f.r, f.s, f.t, f.u, f.y, f.v, f.w, f.x, f.z \ - FROM `%splayers_flags` AS f \ - JOIN `%sservers` AS s ON s.id = f.server \ - WHERE s.ip = '%s' \ - AND s.port = '%s' \ - ORDER BY f.auth_data, f.type DESC", - TABLE_PREFIX, TABLE_PREFIX, ip, port - ); + g_playersLoaded = false; + + if (SqlTuple) { + new ip[16], port[8]; + split(g_serverIp, ip, charsmax(ip), port, charsmax(port), ":"); + + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT f.id, f.type, f.auth_data, f.password, f.a, f.b, f.c, f.d, f.e, f.f, f.g, f.h, f.i, f.j, f.k, f.l, f.m, f.n, f.o, f.p, f.q, f.r, f.s, f.t, f.u, f.y, f.v, f.w, f.x, f.z \ + FROM `%splayers_flags` AS f \ + JOIN `%sservers` AS s ON s.id = f.server \ + WHERE s.ip = '%s' \ + AND s.port = '%s' \ + ORDER BY f.auth_data, f.type DESC", + TABLE_PREFIX, TABLE_PREFIX, ip, port + ); - new data[1]; data[0] = reload; // Przeladuj liste adminow w amxbans - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPlayersData", szTemp, data, sizeof data); + new data[1]; data[0] = reload; // Przeladuj liste adminow w amxbans + SQL_ThreadQuery(SqlTuple, "getPlayersData", g_szTemp, data, sizeof data); + } } -public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 4"); - #endif - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { +public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_size) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - while(SQL_MoreResults(Query)) + while (SQL_MoreResults(Query)) { new player_flags[e_PlayerFlags], type; type = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "type")); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "auth_data"), player_flags[pfPLAYER], 32); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), player_flags[pfPASSWORD], MAX_PASSWORD); - for(new i = 0; i < strlen(all_flags); ++i) { + for (new i = 0; i < strlen(all_flags); ++i) { new temp[4]; formatex(temp, charsmax(temp), "%c", all_flags[i]); new expire = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, temp)); - if( expire > get_systime() || expire == -1 ) + if (expire > get_systime() || expire == -1) { player_flags[pfFLAGS] |= read_flags(temp); + } } - if( type == TYPE_SID ) - player_flags[pfTYPE] = FLAG_AUTHID|FLAG_NOPASS; - else if( type == TYPE_IP ) - player_flags[pfTYPE] = FLAG_IP; - else - player_flags[pfTYPE] = FLAG_NICK|FLAG_KICK; - - //Dodanie do tablicy - if( player_flags[pfFLAGS] != 0 ) { + switch (type) { + case TYPE_SID: player_flags[pfTYPE] = FLAG_AUTHID|FLAG_NOPASS; + case TYPE_IP: player_flags[pfTYPE] = FLAG_IP; + default: player_flags[pfTYPE] = FLAG_NICK|FLAG_KICK; + } + + // Dodanie do tablicy + if (player_flags[pfFLAGS] != 0) { ArrayPushArray(players_flags, player_flags); } SQL_NextRow(Query); } - players_loaded = true; + g_playersLoaded = true; - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 5"); - #endif - if( data[0] && is_amxbans ) {// Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien + if (data[0] && g_AmxbansExists) { // Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien server_cmd("amx_reloadadmins"); } else { @@ -1068,22 +1156,18 @@ public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_ } } -public amxbans_sql_initialized() { - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 6"); - #endif - is_amxbans = true; +public amxbans_sql_initialized() +{ + g_AmxbansExists = true; addUsersToGlobalArray(); // Sprawdzamy uprawnienia graczy _usersReload(0); } // Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy -public addUsersToGlobalArray() { - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 7"); - #endif - if( !players_loaded ) { // Dane uzytkownikow nie zostaly jeszcze zaladowane +public addUsersToGlobalArray() +{ + if (!g_playersLoaded) { // Dane uzytkownikow nie zostaly jeszcze zaladowane set_task(0.1, "addUsersToGlobalArray"); return; } @@ -1093,13 +1177,13 @@ public addUsersToGlobalArray() { users = ArrayCreate(e_PlayerFlags); users2 = ArrayCreate(e_PlayerFlags); - for(new i = 0; i < ArraySize(players_flags); ++i) { + for (new i = 0; i < ArraySize(players_flags); ++i) { new player_flags[e_PlayerFlags]; ArrayGetArray(players_flags, i, player_flags); ArrayPushArray(users, player_flags); } - for(new i = 0; i < admins_num(); ++i) { + for (new i = 0; i < admins_num(); ++i) { new player_flags[e_PlayerFlags], name_bak[33]; admins_lookup(i, AdminProp_Auth, player_flags[pfPLAYER], 32); @@ -1112,23 +1196,23 @@ public addUsersToGlobalArray() { player_flags[pfFLAGS] = admins_lookup(i, AdminProp_Access); new l = 0, p = ArraySize(users)-1, s; - while(l <= p) { + while (l <= p) { new player_flags2[e_PlayerFlags]; s = (l + p) / 2; ArrayGetArray(users, s, player_flags2); strtolower(player_flags2[pfPLAYER]); - if( equali(name_bak, player_flags2[pfPLAYER]) && player_flags[pfTYPE] == player_flags2[pfTYPE] ) { + if (equali(name_bak, player_flags2[pfPLAYER]) && player_flags[pfTYPE] == player_flags2[pfTYPE]) { // Zostawiamy haslo AMXBansa player_flags[pfFLAGS] |= player_flags2[pfFLAGS]; ArrayPushArray(users2, player_flags); ArrayDeleteItem(users, s); break; } - else if( strcmp(name_bak, player_flags2[pfPLAYER]) > 0 ) { + else if (strcmp(name_bak, player_flags2[pfPLAYER]) > 0) { l = s + 1; } - else if( equali(name_bak, player_flags2[pfPLAYER]) && _getOrderOfType(player_flags[pfTYPE]) > _getOrderOfType(player_flags2[pfTYPE]) ) { + else if (equali(name_bak, player_flags2[pfPLAYER]) && _getOrderOfType(player_flags[pfTYPE]) > _getOrderOfType(player_flags2[pfTYPE])) { l = s + 1; } else { @@ -1136,29 +1220,27 @@ public addUsersToGlobalArray() { } } - if( p < l ) { + if (p < l) { ArrayPushArray(users2, player_flags); } } admins_flush(); - for(new i = 0; i < ArraySize(users2); ++i) { + for (new i = 0; i < ArraySize(users2); ++i) { new player_flags[e_PlayerFlags]; ArrayGetArray(users2, i, player_flags); admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } - for(new i = 0; i < ArraySize(users); ++i) { + for (new i = 0; i < ArraySize(users); ++i) { new player_flags[e_PlayerFlags]; ArrayGetArray(users, i, player_flags); admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } - #if defined FOLLOW_RELOAD_FLAGS - log_to_file(FOLLOW_RELOAD_FLAGS, "Krok 8"); - #endif } -_getOrderOfType(type) { - switch(type) { +_getOrderOfType(type) +{ + switch (type) { case FLAG_IP: return 1; case FLAG_NICK : return 2; case FLAG_AUTHID: return 3; @@ -1167,35 +1249,40 @@ _getOrderOfType(type) { return 0; } -public usersCheckUser_task(id) { +public usersCheckUser_task(id) +{ _usersCheckUser(id-TASK_CHECK_USER); } -public _usersCheckUser(id) { - if( !players_loaded ) { - if( !task_exists(TASK_CHECK_USER+id) ) +public _usersCheckUser(id) +{ + if (! g_playersLoaded) { + if (! task_exists(TASK_CHECK_USER+id)) { set_task(0.1, "usersCheckUser_task", TASK_CHECK_USER+id); + } return; } - for(new i = 0; i < ArraySize(players_flags); ++i) { + for (new i = 0; i < ArraySize(players_flags); ++i) { new player_flags[e_PlayerFlags]; ArrayGetArray(players_flags, i, player_flags); - if( player_flags[pfTYPE]&FLAG_NICK ) { + if (player_flags[pfTYPE]&FLAG_NICK) { new name[32]; get_user_name(id, name, charsmax(name)); - if( !equali(name, player_flags[pfPLAYER]) ) + if (! equali(name, player_flags[pfPLAYER])) { continue; + } } - else if( player_flags[pfTYPE]&FLAG_IP ) { + else if (player_flags[pfTYPE]&FLAG_IP) { new ip[32]; get_user_ip(id, ip, charsmax(ip), 1); - if( !equali(ip, player_flags[pfPLAYER]) ) + if (! equali(ip, player_flags[pfPLAYER])) { continue; + } } - else if( player_flags[pfTYPE]&FLAG_AUTHID ) { + else if (player_flags[pfTYPE]&FLAG_AUTHID) { new sid[32], arr_sid[32]; copy(arr_sid, charsmax(arr_sid), player_flags[pfPLAYER]); get_user_authid(id, sid, charsmax(sid)); @@ -1205,28 +1292,30 @@ public _usersCheckUser(id) { replace(sid, charsmax(sid), "steam_", ""); replace(arr_sid, charsmax(arr_sid), "steam_", ""); - if( !equali(sid, arr_sid) ) + if (! equali(sid, arr_sid)) { continue; + } } - if( strlen(player_flags[pfPASSWORD]) ) { + if (strlen(player_flags[pfPASSWORD])) { new password[33], password_md5[34]; get_user_info(id, "_pw", password, charsmax(password)); md5(password, password_md5); - if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { get_user_info(id, "_pw2", password, charsmax(password)); md5(password, password_md5); - if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { get_user_info(id, "_pw3", password, charsmax(password)); md5(password, password_md5); - if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { get_user_info(id, "_ss", password, charsmax(password)); md5(password, password_md5); - if( !equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD]) ) { - if( !(player_flags[pfTYPE]&FLAG_KICK) ) // Nie kickuj gracza, tylko mu nie przydziel flag + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { + if (! (player_flags[pfTYPE]&FLAG_KICK)) { // Nie kickuj gracza, tylko mu nie przydziel flag continue; + } server_cmd("kick #%d ^"Nieprawidlowe haslo^"", get_user_userid(id)); @@ -1241,97 +1330,116 @@ public _usersCheckUser(id) { } } -public brakSciezki(id, path[]) { +public brakSciezki(id, path[]) +{ dodajLog2(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); - if( id ) + + if (id) { client_print_color(id, Blue, "^4[%s] ^1Wystapil ^3blad ^1przy zapisywaniu ustawien. Prawdopodobnie ^4brak uprawnien^1.", PREFIX); + } } -public reklama() { - if(get_playersnum()>1) { +public reklama() +{ + if (get_playersnum()>1) { client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, sklep_komenda); } } -public dodajLog2(id, const szFormat[], any:...) { - #if defined LOGING - new szText[256], name[33], ip[22], sid[22]; - vformat(szText, charsmax(szText), szFormat, 3); +public dodajLog2(id, const szFormat[], any:...) +{ + #if defined LOG_SQL + new g_szTemp[256], name[33], ip[22], sid[22]; + vformat(g_szTemp, charsmax(g_szTemp), szFormat, 3); get_user_name(id, name, charsmax(name)); get_user_ip(id, ip, charsmax(ip), 1); get_user_authid(id, sid, charsmax(sid)); - if(id) format(szText, charsmax(szText), "%s; %s; %s. %s", name, ip, sid, szText); + if (id) { + format(g_szTemp, charsmax(g_szTemp), "%s; %s; %s. %s", name, ip, sid, g_szTemp); + } - log_to_sql(szText, charsmax(szText)); + log_to_sql(g_szTemp, charsmax(g_szTemp)); #endif } -public log_to_sql(text[], text_len) { - format(text, text_len, "%s. Serwer: %d", text, server_id); - escape(text, text_len); - - formatex(szTemp, charsmax(szTemp), "INSERT INTO `%slogs` (text) VALUES ('%s')", TABLE_PREFIX, text); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); +public log_to_sql(text[], text_len) +{ + if (SqlTuple) { + format(text, text_len, "%s. Serwer: %d", text, g_serverId); + escapeQuotes(text, text_len); + + // Cannot be formatex, because param text is probably g_szTemp + format(g_szTemp, charsmax(g_szTemp), + "INSERT INTO `%slogs` (text) \ + VALUES ('%s')", + TABLE_PREFIX, text + ); + SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); + } } -public getServerData(FailState, Handle:Query, Error[], Errorcode) { - sql_connected = true; - if(FailState != TQUERY_SUCCESS) { - log_to_file(LOG_FILE, "Tresc bledu ( %d ): %s", Errorcode, Error ); - - SQL_GetQueryString(Query, szTemp, charsmax(szTemp)); - log_to_file(LOG_FILE, "Zapytanie: %s", szTemp); +public getServerData(FailState, Handle:Query, Error[], Errorcode) +{ - if(FailState == TQUERY_QUERY_FAILED) { - if(containi(Error, "exist") != -1) _error22(Errorcode, Error); - else _error15("getServerData", Errorcode, Error); - } - else if( FailState == TQUERY_CONNECT_FAILED ) { - sql_connected = false; - _error41(Errorcode, Error); - - return; + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { + if (FailState == TQUERY_QUERY_FAILED) { + if (containi(Error, "exist") != -1) { + _error22(); + } } - _error40(); + g_blocked = true; } - if(SQL_NumResults(Query) <= 0) { + if (SQL_NumResults(Query) <= 0) { _error21(); } // Pobranie id serwera - server_id = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id")); + g_serverId = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id")); // Pobranie uslugi obslugujacej platnosci new sms_service[64]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms_service"), sms_service, charsmax(sms_service)); - if( strlen(sms_service) ) + if (strlen(sms_service)) { copy(st_sms_service, charsmax(st_sms_service), sms_service); + } // Pozyskanie uslug na serwerze new szServices[512]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "services"), szServices, charsmax(szServices)); - // Pobranie ustawien sklepu - formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%ssettings` WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_login', 'license_password')", TABLE_PREFIX); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getSettings", szTemp); - - // Aktualizacja informacji o serwerze - formatex(szTemp, charsmax(szTemp), "UPDATE `%sservers` SET `type` = 'amxx', `version` = '%s' WHERE `id` = '%d'", TABLE_PREFIX, VERSION, server_id); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "IgnoreHandle", szTemp); + if (SqlTuple) { + // Get shop settings + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%ssettings` \ + WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_login', 'license_password')", + TABLE_PREFIX + ); + SQL_ThreadQuery(SqlTuple, "getSettings", g_szTemp); + + // Update server info + formatex(g_szTemp, charsmax(g_szTemp), + "UPDATE `%sservers` \ + SET `type` = 'amxx', `version` = '%s' \ + WHERE `id` = '%d'", + TABLE_PREFIX, VERSION, g_serverId + ); + SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); + } // Sprawdzanie dostepnosci usług new service_id[MAX_NAME+1], service_id_space[MAX_NAME+2+1], ids[512], ids_len = 0, ids_max = charsmax(ids); - for(new i = 0; i < ArraySize(service_ids); ++i) { + for (new i = 0; i < ArraySize(service_ids); ++i) { ArrayGetString(service_ids, i, service_id, charsmax(service_id)); formatex(service_id_space, charsmax(service_id_space), " %s ", service_id); - if( containi(szServices, service_id_space) != -1 ) { - if( ids_len ) + if (containi(szServices, service_id_space) != -1) { + if (ids_len) { ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); + } ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service_id); } @@ -1347,23 +1455,30 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) { } // Jest chociaz jedna usluga, wiec pobieramy dane o uslugach - if( ids_len ) { - formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%sservices` WHERE `id` IN(%s) ORDER BY `order` ASC", TABLE_PREFIX, ids); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getServicesData", szTemp); - } - else { + if (ids_len) { + if (SqlTuple) { + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%sservices` \ + WHERE `id` IN(%s) \ + ORDER BY `order` ASC", + TABLE_PREFIX, ids + ); + + SQL_ThreadQuery(SqlTuple, "getServicesData", g_szTemp); + } + } else { checkLoadedServices(); // Sprawdz zaladowane uslugi } } -public getServicesData(FailState, Handle:Query, Error[], Errorcode) { - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { - _error12(); +public getServicesData(FailState, Handle:Query, Error[], Errorcode) { + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { + return; } new service[e_Service]; new ids[512], ids_len = 0, ids_max = charsmax(ids); - while(SQL_MoreResults(Query)) + while (SQL_MoreResults(Query)) { SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), service[sID], MAX_ID); service[PLUGIN] = _getServicePluginByID(service[sID]); @@ -1383,8 +1498,9 @@ public getServicesData(FailState, Handle:Query, Error[], Errorcode) { DestroyForward(forward_handle); // Przygotowywanie zapytania o priceliste - if( ids_len ) - ids_len += formatex(ids[ids_len], ids_max-ids_len, ",", szTemp); + if (ids_len) { + ids_len += formatex(ids[ids_len], ids_max-ids_len, ",", g_szTemp); + } ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service[sID]); @@ -1395,23 +1511,26 @@ public getServicesData(FailState, Handle:Query, Error[], Errorcode) { checkLoadedServices(); // Jest chociaz jedna usluga - if( ids_len ) { - formatex(szTemp, charsmax(szTemp), - "SELECT * FROM `%spricelist` \ - WHERE (`server`='%d' OR `server`='-1') AND `service` IN (%s) \ - ORDER BY `amount` ASC", - TABLE_PREFIX, server_id, ids - ); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getPriceList", szTemp); + if (ids_len) { + if (SqlTuple) { + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%spricelist` \ + WHERE (`server`='%d' OR `server`='-1') AND `service` IN (%s) \ + ORDER BY `amount` ASC", + TABLE_PREFIX, g_serverId, ids + ); + SQL_ThreadQuery(SqlTuple, "getPriceList", g_szTemp); + } } } -public getPriceList(FailState, Handle:Query, Error[], Errorcode) { - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { +public getPriceList(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - while(SQL_MoreResults(Query)) + while (SQL_MoreResults(Query)) { new price[e_Price]; @@ -1425,52 +1544,61 @@ public getPriceList(FailState, Handle:Query, Error[], Errorcode) { } } -public getSettings(FailState, Handle:Query, Error[], Errorcode) { - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { +public getSettings(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - new key[128], value[256]; - while( SQL_MoreResults(Query) ) { + while (SQL_MoreResults(Query)) { + new key[128], value[256]; + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "key"), key, charsmax(key)); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "value"), value, charsmax(value)); - if(equali(key, "currency")) + if (equali(key, "currency")) { copy(st_currency, charsmax(st_currency), value); - else if(equali(key, "shop_url")) { - copy(st_shop_url, charsmax(st_shop_url), value); - replace(st_shop_url, charsmax(st_shop_url), "http://www.", ""); - replace(st_shop_url, charsmax(st_shop_url), "http://", ""); + } + else if (equali(key, "shop_url")) { + copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); - if( strlen(st_shop_url) == 0 ) { - _error33(); + // TODO: implement https + if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "https://", "")) { + g_shopPagePort = 80; + } else if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "http://", "")) { + g_shopPagePort = 80; } - if(st_shop_url[strlen(st_shop_url)-1] != '/') - format(st_shop_url, charsmax(st_shop_url), "%s/", st_shop_url); - - split(st_shop_url, shop_url, charsmax(shop_url), shop_url_add, charsmax(shop_url_add), "/"); + // Remove trailing slash + if (g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { + g_shopPageUrl[strlen(g_shopPageUrl) - 1] = 0; + } - format(shop_url_add, charsmax(shop_url_add), "/%s", shop_url_add); + if (! strlen(g_shopPageUrl)) { + _error33(); + } } - else if(equali(key, "signature")) + else if (equali(key, "signature")) { copy(st_signature, charsmax(st_signature), value); - else if( equali(key, "sms_service") && !strlen(st_sms_service) ) + } + else if (equali(key, "sms_service") && !strlen(st_sms_service)) { copy(st_sms_service, charsmax(st_sms_service), value); - else if(equali(key, "contact")) + } + else if (equali(key, "contact")) { copy(st_contact, charsmax(st_contact), value); - else if(equali(key, "vat")) + } + else if (equali(key, "vat")) { st_vat = str_to_float(value); - else if(equali(key, "random_key")) { + } + else if (equali(key, "random_key")) { copy(st_random_key, charsmax(st_random_key), value); - // Hashujemy random key - md5(st_random_key, st_random_key_md5); + md5(st_random_key, st_random_key_md5); // Hashujemy random key } - else if(equali(key, "license_login")) { + else if (equali(key, "license_login")) { copy(license, charsmax(license), value); trim(license); } - else if(equali(key, "license_password")) { + else if (equali(key, "license_password")) { copy(license_password, charsmax(license_password), value); } @@ -1480,40 +1608,94 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) { // Sprawdzamy czy licencja jest prawidłowa validateLicense(); - // Pobranie numerow sms - escape(st_sms_service, charsmax(st_sms_service)); - formatex(szTemp, charsmax(szTemp), "SELECT `number`, `tariff` FROM `%ssms_numbers` WHERE `service` = '%s'", TABLE_PREFIX, st_sms_service); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getSMSesData", szTemp); + if (SqlTuple) { + // Pobranie numerow sms + escapeQuotes(st_sms_service, charsmax(st_sms_service)); + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT `number`, `tariff` \ + FROM `%ssms_numbers` \ + WHERE `service` = '%s'", + TABLE_PREFIX, st_sms_service + ); + SQL_ThreadQuery(SqlTuple, "getSMSesData", g_szTemp); - // Pobranie danych o serwisie transakcyjnym - formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%stransaction_services` WHERE `id` = '%s'", TABLE_PREFIX, st_sms_service); - if(SqlTuple) SQL_ThreadQuery(SqlTuple, "getTransactionServiceData", szTemp); + // Pobranie danych o serwisie transakcyjnym + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%stransaction_services` \ + WHERE `id` = '%s'", + TABLE_PREFIX, st_sms_service + ); + SQL_ThreadQuery(SqlTuple, "getTransactionServiceData", g_szTemp); + } } // Funkcja ktora wysyla zapytanie do serwera o sprawdzenie czy licencja jest prawidlowa -public validateLicense() { +public validateLicense() +{ // Sprawdzenie licencji - new szUrl[512], szName[128]; - get_cvar_string("hostname", server_name, charsmax(server_name)); - StringURLEncode(server_name, szName, charsmax(szName)); // Escaepowanie adresu url + new serverNameEscaped[128]; + get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); + StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); - formatex(szUrl, charsmax(szUrl), - "/license.php?action=login_server&type=engine_amxx&license_id=%s&license_password=%s&server_ip=%s&version=%s&name=%s", - license, license_password, server_ip, VERSION, szName + formatex(g_szTemp, charsmax(g_szTemp), + "license.sklep-sms.pl/license.php?action=login_server&type=engine_amxx&license_id=%s&license_password=%s&server_ip=%s&version=%s&name=%s", + license, license_password, g_serverIp, VERSION, serverNameEscaped ); - sendSocket(0, "license.sklep-sms.pl", szUrl, "validate_license"); + getWebPage(g_szTemp, _, "getWebPageValidateLicense"); +} + +public getWebPageValidateLicense(const data[], const content[], playerId, status) +{ + switch (status) { + case SOCKET_OK: { + new text[33]; + + getXMLValue(content, "text", text, charsmax(text)); + + if (equal(text, "updated")) { + g_shopRegistered = true; + + new footer[2]; + getXMLValue(content, "footer", footer, charsmax(footer)); + g_footer = str_to_num(footer) ? true : false; + + log_amx("Walidacja licencji o numerze identyfikacyjnym: %s zostala zakonczona pomyslnie", license); + } + else if (equal(text, "not_updated")) { + _error14(); + } + else if (equal(text, "not_logged_successfully")) { + _error13(); + } + else { + log_to_file(LOG_FILE, "%s", content); + _error10(); + } + } + + case SOCKET_TIMEOUT: { + g_shopRegistered = false; + log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z powodu przekroczenia limitu czasu polaczenia."); + } + + default: { + g_shopRegistered = false; + log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z nieznanych powodow."); + } + } } -public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) { - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { +public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - if( SQL_NumResults(Query) <= 0 ) { + if (SQL_NumResults(Query) <= 0) { _error31(); } - if( !SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms")) ) { + if (!SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms"))) { _error32(); } @@ -1521,17 +1703,20 @@ public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) { SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), transaction_service[tsID], MAX_ID); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), transaction_service[tsNAME], MAX_NAME); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "data"), data, charsmax(data)); - if( !json_decode(data, "sms_text", transaction_service[SMS_TEXT], MAX_SMS_TEXT) ) - log_to_file(LOG_FILE, "Nie udalo sie pobrac kodu sms."); + + if (! json_decode(data, "sms_text", transaction_service[SMS_TEXT], MAX_SMS_TEXT)) { + log_to_file(LOG_FILE, "Nie udalo sie pozyskac kodu sms.^nDane: %s", data); + } } -public getSMSesData(FailState, Handle:Query, Error[], Errorcode) { - if( _checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED ) { +public getSMSesData(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } new sms[e_SMS]; - while(SQL_MoreResults(Query)) + while (SQL_MoreResults(Query)) { SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "number"), sms[NUMBER], MAX_NUMBER); sms[sTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); @@ -1541,20 +1726,23 @@ public getSMSesData(FailState, Handle:Query, Error[], Errorcode) { } } -_checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { - sql_connected = true; - if(FailState != TQUERY_SUCCESS) { - if(FailState == TQUERY_QUERY_FAILED) - log_to_file(LOG_FILE, "Nie mozna podlaczyc sie do bazy danych."); - else if(FailState == TQUERY_CONNECT_FAILED) { +_checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) +{ + g_sqlConnected = true; + + if (FailState != TQUERY_SUCCESS) { + if (FailState == TQUERY_QUERY_FAILED) { + log_to_file(LOG_FILE, "Nie mozna polaczyc sie z baza danych."); + } + else if (FailState == TQUERY_CONNECT_FAILED) { log_to_file(LOG_FILE, "Zapytanie anulowane."); - sql_connected = false; + g_sqlConnected = false; } - log_to_file(LOG_FILE, "Tresc bledu ( %d ): %s", Errorcode, Error ); + log_to_file(LOG_FILE, "Tresc bledu (%d): %s", Errorcode, Error); - SQL_GetQueryString(Query, szTemp, charsmax(szTemp)); - log_to_file(LOG_FILE, "Zapytanie: %s", szTemp); + SQL_GetQueryString(Query, g_szTemp, charsmax(g_szTemp)); + log_to_file(LOG_FILE, "Zapytanie: %s", g_szTemp); return PLUGIN_HANDLED; } @@ -1562,7 +1750,8 @@ _checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { return PLUGIN_CONTINUE; } -public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { +public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) +{ _checkForSQLErrors(Query, FailState, Error, Errorcode); } @@ -1571,10 +1760,11 @@ public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { * ######################################################################################################################### */ -public registerService(plugin, params) { - if(params != 1) { +public registerService(plugin, params) +{ + if (params != 1) { log_to_file(LOG_FILE, "Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); - return SS_ERROR; + return SS_BAD_ARGS; } new id[MAX_NAME+1]; @@ -1588,29 +1778,32 @@ public registerService(plugin, params) { } // Dodawanie kodu do listy kodow do wykorzystania -public native_addCode(plugin, params) { - if( params != 2 ) { - return; +public native_addCode(plugin, params) +{ + if (params != 2) { + return SS_BAD_ARGS; } new sms_code[MAX_CODE+1], tariff; get_string(1, sms_code, charsmax(sms_code)); tariff = get_param(2); - addCode(sms_code, tariff, 1); + + return addCode(sms_code, tariff); } // Logowanie danych z pluginow zewnetrznych -public dodajLog(plugin, params) { - #if defined LOGING - new text[1024]; - vdformat(text, charsmax(text), 1, 2); - log_to_sql(text, charsmax(text)); +public dodajLog(plugin, params) +{ + #if defined LOG_SQL + vdformat(g_szTemp, charsmax(g_szTemp), 1, 2); + log_to_sql(g_szTemp, charsmax(g_szTemp)); #endif } -public native_showServicePurchase(plugin, params) { - if(params != 2) { - return SS_ERROR; +public native_showServicePurchase(plugin, params) +{ + if (params != 2) { + return SS_BAD_ARGS; } new service_id[MAX_ID+1]; @@ -1621,290 +1814,315 @@ public native_showServicePurchase(plugin, params) { return SS_OK; } -public native_infoSMS(plugin, params) { - if(params != 1) { - return SS_ERROR; +public native_infoSMS(plugin, params) +{ + if (params != 1) { + return SS_BAD_ARGS; } - infoSMS( get_param(1) ); + infoSMS(get_param(1)); return SS_OK; } -public bool:native_is_steam(plugin, params) { - if(params != 1) { +public bool:native_is_steam(plugin, params) +{ + if (params != 1) { return false; } - return is_steam( get_param(1) ); + return is_steam(get_param(1)); } -bool:is_steam(id) { +bool:is_steam(id) +{ new auth[32]; get_user_authid(id, auth, charsmax(auth)); - if(contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1) { + if (contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1) { return true; } return false; } -/* ######################################################################################################################### - * ###################################################### LICENCJA ######################################################### - * ######################################################################################################################### - */ - -/* ############ Poczatek: Licencja ################ */ -public licenseUpdateActivity() { - /*new szUrl[256], szName[128] - get_user_name(0, server_name, charsmax(server_name)); - StringURLEncode(server_name, szName, charsmax(szName)); // Escaepowanie adresu url - formatex(szUrl, charsmax(szUrl), "%slicense.php?action=update_activity&license_id=%s&server_ip=%s&version=%s&name=%s", shop_url_add, license, server_ip, VERSION, szName); - sendSocket(0, "license.sklep-sms.pl", szUrl, "update_activity"); - - set_task(300.0, "licenseUpdateActivity");*/ -} - // ######### TYPY BŁĘDÓW ########## // ## 1 - licencja -// ## 2 - server w bazie +// ## 2 - problem z baza // ## 3 - metody płatnosci // ## 4 - sklep ogolnie +// ## 5 - probem z serwerem // ################################ _error10() { - _make_error("Error 10 - Wystapil blad"); -} - -_error12() { - _make_error("Error 12 - Blad ladowania licencji"); + _make_error("Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); } _error13() { - new szText[128]; - formatex(szText, charsmax(szText), "Error 13 - Brak licencji o numerze identyfikacyjnym: %s lub bledne haslo.", license); - _make_error(szText); + formatex(g_szTemp, charsmax(g_szTemp), "Error 13 - Brak licencji o numerze identyfikacyjnym: %s lub bledne haslo.", license); + _make_error(g_szTemp); } _error14() { log_to_file(LOG_FILE, "Error 14 - Nie udalo sie zaktualizowac aktywnosci serwera."); - blocked = true; -} - -// Problemy programistyczne -_error15(details[], errorcode, error[]) { - #if defined DEBUG - if(errorcode) log_to_file(DEBUG, "%d: %s", errorcode, error); - log_to_file(DEBUG, "Error 15 - Zglos ten blad: seek@sklep-sms.pl lub GG: 8930366. Szczegoly: %s", details); - #endif + g_blocked = true; } -// Problemy z serwerem w bazie _error21() { _make_error("Error 21 - Serwer nie znajduje sie nie liscie serwerow na stronie WWW."); } -_error22(errorcode, error[]) { - #if defined DEBUG - if(errorcode) log_to_file(DEBUG, "%d: %s", errorcode, error); - #endif +_error22() { _make_error("Error 22 - Brak tabeli ss_servers w bazie."); } -// Metody Płatnosci _error31() { - #if defined DEBUG - log_to_file(DEBUG, "Error 31 - Brak danej metody platnosci."); - #endif - blocked = true; + log_to_file(LOG_FILE, "Error 31 - Wybrana metoda platnosci nie istnieje w bazie danych."); + g_blocked = true; } _error32() { - #if defined DEBUG - log_to_file(DEBUG, "Error 32 - Wybrana metoda platnosci nie obsluguje platnosci SMS."); - #endif - blocked = true; + log_to_file(LOG_FILE, "Error 32 - Wybrana metoda platnosci nie obsluguje platnosci SMS."); + g_blocked = true; } _error33() { - #if defined DEBUG - log_to_file(DEBUG, "Error 33 - Brak podanego adresu sklepu w ustawieniach."); - #endif - blocked = true; + log_to_file(LOG_FILE, "Error 33 - Nie podano adresu sklepu w ustawieniach."); + g_blocked = true; } -// Niesprecyzowany blad -_error40() { - #if defined DEBUG - log_to_file(DEBUG, "Error 40 - Wystapil nieznany blad przy polaczeniu z baza sklepu."); - #endif - blocked = true; +_error51() { + _make_error("Error 51 - Nie udalo sie utworzyc uchwytu do bazy danych."); } -_error41(errorcode, error[]) { - #if defined DEBUG - if(errorcode) log_to_file(DEBUG, "%d: %s", errorcode, error); - #endif - log_to_file(LOG_FILE, "Error 41 - Nie mozna polaczyc sie z baza danych sklepu."); - blocked = true; -} - -_error42(details[]) { - log_to_file(DEBUG, "Error 42 - Zglos ten blad: seek@sklep-sms.pl lub GG: 8930366. Szczegoly: %s", details); -} - -_make_error(informacja[]) { - set_fail_state(informacja); +_make_error(message[]) { + set_fail_state(message); } /* ############# Koniec: Licencja ################## */ -// ######### Sockets ######### -public socket_polacz(id, szHost[]) { - new error; - if( sockets[id] ) { - closeSocket(id); - } - - sockets[id] = socket_open(szHost, 80, SOCKET_TCP, error); - //error = 3; - if( error ) { - if(is_user_connected(id)) - client_print_color(id, Red, "^4[%s] ^1Nie mozna polaczyc sie z serwerem.", PREFIX); - #if defined LOG_FILE - log_to_file(LOG_FILE, "Nie mozna polaczyc sie z hostem: %s. ID bledu: %d.", szHost, error); - #endif - return 0; - } - return 1; -} - -public socket_CheckData(szAction[], id) { - id -= TASK_CHECK_SOCKET; - if(!socket_change(sockets[id])) { - set_task(0.6, "socket_CheckData", TASK_CHECK_SOCKET+id, szAction, strlen(szAction)); - return; +/** + * Get page content + * + * @param const char[] path path (eg. example.com/shop/ddd) + * @param int port eg. 80 + * @param const char[] function callback function + * @param const char[] functionData callback function data + * @param int playerId id of the player + * + * @return bool + */ +bool:getWebPage(const url[], port = 80, const function[] = "", const functionData[] = "", playerId = 0) +{ + new host[128], path[256]; + split(url, host, charsmax(host), path, charsmax(path), "/"); + + new socketId = mySocketOpen(host, port, playerId); + if (socketId == SS_ERROR) { + return false; } - new szData[1024]; + new httpRequest[512]; + formatex(httpRequest, charsmax(httpRequest), + "GET /%s HTTP/1.1^r^n\ + Host: %s^r^n^r^n", + path, host + ); + socket_send(g_sockets[socketId], httpRequest, strlen(httpRequest)); + + /* + * Utworzenie nowego pseudo watku oczekujacego na odpowiedz + */ + new requestData[1024]; - socket_recv(sockets[id], szData, charsmax(szData)); + if (true) { // pseudo deleting variables + new functionEscaped[256], functionDataEscaped[512]; - if(contain(szData, "Status: 404") >= 0) { - #if defined DEBUG - log_to_file(DEBUG, "Nie znaleziono pliku. Akcja: %s", szAction); - #endif - closeSocket(id); - return; + copy(functionEscaped, charsmax(functionEscaped), function); + copy(functionDataEscaped, charsmax(functionDataEscaped), functionData); + replace_all(httpRequest, charsmax(httpRequest), "^"", "^^^""); + replace_all(functionEscaped, charsmax(functionEscaped), "^"", "^^^""); + replace_all(functionDataEscaped, charsmax(functionDataEscaped), "^"", "^^^""); + + // "httpRequest" "function" "functionData" + formatex(requestData, charsmax(requestData), "%d ^"%s^" ^"%s^" ^"%s^"", playerId, httpRequest, function, functionData); } - //log_to_file(DEBUG, "%s", szData); + set_task(0.6, "mySocketCheckData", TASK_CHECK_SOCKET + socketId, requestData, strlen(requestData)); + set_task(10.0, "mySocketTimeout", TASK_TIME_OUT + socketId, requestData, strlen(requestData)); - if( equal(szAction, "purchase_service") ) { - new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[1024]; - - getXMLValue(szData, "return_value", return_value, charsmax(return_value)); - getXMLValue(szData, "text", szText, charsmax(szText)); - getXMLValue(szData, "positive", szPositive, charsmax(szPositive)); - getXMLValue(szData, "bsid", szBsid, charsmax(szBsid)); - getXMLValue(szData, "warnings", szWarnings, charsmax(szWarnings)); - - purchaseService_callback(id, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); + return true; +} + +// -------------------------------------------------------- Sockets ------------------------------------------------------------ + +/** + * Open a new socket + * + * @param const char[] host host name + * @param int port + * @param int playerId id of the player + * + * @return int id of opened socket + */ +mySocketOpen(const host[], port = 80, playerId = 0) +{ + new socketId = ++g_socketCounter % MAX_SOCKETS; + if (g_sockets[socketId]) { + mySocketClose(socketId); } - else if( equal(szAction, "validate_license") ) { - new text[33]; - - getXMLValue(szData, "text", text, charsmax(text)); - - if( equal(text, "updated") ) { - new szFooter[2]; - getXMLValue(szData, "footer", szFooter, charsmax(szFooter)); - footer = str_to_num(szFooter) ? true : false; - - //set_task(300.0, "licenseUpdateActivity"); - log_amx("Walidacja licencji o numerze identyfikacyjnym: %s zostala zakonczona pomyslnie", license); - shop_registered = true; - } - else if( equal(text, "not_updated") ) { - _error14(); - } - else if( equal(text, "not_logged_successfully") ) { - _error13(); - } - else { - #if defined DEBUG - log_to_file(DEBUG, "%s", szData); - #endif - _error10(); + + new error; + g_sockets[socketId] = socket_open(host, port, SOCKET_TCP, error); + + if (error) { + if (is_user_connected(playerId)) { + client_print_color(playerId, Red, "^4[%s] ^1Nie udalo sie utworzyc socketu.", PREFIX); } - } - else if( equal(szAction, "update_activity") ) { - new text[33]; - getXMLValue(szData, "text", text, charsmax(text)); + log_to_file(LOG_FILE, "Nie mozna polaczyc sie z hostem: %s:%d. Blad: %d.", host, port, error); - if( equal(text, "updated") ) { - blocked = false; - } - else if( equal(text, "not_updated") ) { - _error14(); - } - else if( equal(text, "not_logged") ) { - // Probujemy sie ponownie zalogowac - set_task(0.1, "validateLicense"); - } + return SS_ERROR; } - - closeSocket(id); + + return socketId; } -public sendSocket(id, szHost[], szUrl[], szAction[]) { - if( !socket_polacz(id, szHost) ) { +public mySocketCheckData(const requestData[], socketId) +{ + socketId -= TASK_CHECK_SOCKET; + + if (! socket_change(g_sockets[socketId])) { + set_task(0.6, "mySocketCheckData", TASK_CHECK_SOCKET + socketId, requestData, strlen(requestData)); return; } - new szText[512]; - formatex(szText, charsmax(szText), "GET %s HTTP/1.1^r^nHost: %s^r^n^r^n", szUrl, szHost); - socket_send(sockets[id], szText, strlen(szText)); + new receiveDataContent[1024], statusCode, statusMessage[64]; + statusCode = mySocketReceiveData(socketId, receiveDataContent, charsmax(receiveDataContent), statusMessage, charsmax(statusMessage)); - format(szText, charsmax(szText), "%s|%s", szAction, szText); - //Utworzenie nowego pseudo watku oczekujacego na odpowiedz - set_task(0.6, "socket_CheckData", TASK_CHECK_SOCKET+id, szAction, strlen(szAction)); - set_task(10.0, "socket_TimeOut", TASK_TIME_OUT+id, szText, strlen(szText)); + // Parse request data + new httpRequest[512], szPlayerId[4], function[256], functionData[512], playerId; + parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function), functionData, charsmax(functionData)); + playerId = str_to_num(szPlayerId); + + if (!statusCode || statusCode >= 300) { + log_to_file(LOG_FILE, "Zapytanie zwrocilo blad: %d %s^n%s", statusCode, statusMessage, httpRequest); + } + + mySocketCallCallback(function, functionData, receiveDataContent, playerId, statusCode < 300 ? SOCKET_OK : statusCode); +} + +/** + * + * @return int status code + */ +mySocketReceiveData(socketId, receiveDataContent[], receiveDataContentLen, statusMessage[], statusMessageLen) +{ + new receiveData[1024], receiveDataHeader[128]; + + socket_recv(g_sockets[socketId], receiveData, charsmax(receiveData)); + mySocketClose(socketId); + + // Parse received data + new headerFirstLine[128], httpInfo[16], status[64], szStatusCode[4]; + + // Split header from content + split(receiveData, receiveDataHeader, charsmax(receiveDataHeader), receiveDataContent, receiveDataContentLen, "^r^n^r^n"); + + // Extract first line of header + split(receiveDataHeader, headerFirstLine, charsmax(headerFirstLine), receiveDataHeader, charsmax(receiveDataHeader), "^r^n"); + + // Split first line: httpInfo status + split(headerFirstLine, httpInfo, charsmax(httpInfo), status, charsmax(status), " "); + + // Split status: code message + split(status, szStatusCode, charsmax(szStatusCode), statusMessage, statusMessageLen, " "); + + return str_to_num(szStatusCode); } -public socket_TimeOut(szData[], id) { - id -= TASK_TIME_OUT; +/** + * Function called on socket connection timeout + * + * @param char[] requestData + * @param int socketId task id + */ +public mySocketTimeout(requestData[], socketId) +{ + socketId -= TASK_TIME_OUT; + mySocketClose(socketId); - new szAction[32], szText[512]; - split(szData, szAction, charsmax(szAction), szText, charsmax(szText), "|"); + // Parse request data + new httpRequest[512], szPlayerId[4], function[256], functionData[512], playerId; + parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function), functionData, charsmax(functionData)); + playerId = str_to_num(szPlayerId); - // Dodajemy szczegoly zapytania - log_to_file(DEBUG, "Wyslano zapytanie HTTP z akcja: %s, tresc: %s", szAction, szText); + log_to_file(LOG_FILE, "Przekroczono limit czasu zapytania HTTP^n%s", httpRequest); - if( is_user_connected(id) ) client_print_color(id, Red, "^4[%s] ^1Przekroczono limit czasu polaczenia z serwerem.", PREFIX); - #if defined LOG_FILE - log_to_file(LOG_FILE, "Przekroczono limit czasu polaczenia z serwerem."); - #endif - closeSocket(id); + if (is_user_connected(playerId)) { + client_print_color(playerId, Red, "^4[%s] ^1Przekroczono limit czasu zapytania HTTP.", PREFIX); + } - if( equal(szAction, "validate_license") ) { - log_to_file(LOG_FILE, "Nie udalo sie przeprowadzic walidacji licencji o numerze identyfikacyjnym: %s", license); - shop_registered = false; + mySocketCallCallback(function, functionData, "", playerId, SOCKET_TIMEOUT); +} + +mySocketCallCallback(const function[], const functionData[], const receiveDataContent[], playerId, status) +{ + if (! strlen(function)) { + return; + } + + if (callfunc_begin(function) == 1) { + callfunc_push_str(functionData); // function data + callfunc_push_str(receiveDataContent); + callfunc_push_int(playerId); // player id + callfunc_push_int(status); + callfunc_end(); + } else { + log_to_file(LOG_FILE, "Funkcja %s nie zostala prawidlowo wywolana.", function); } } -public closeSocket(socketID) { - socket_close(sockets[socketID]); - sockets[socketID] = 0; - remove_task(TASK_CHECK_SOCKET+socketID); - remove_task(TASK_TIME_OUT+socketID); +/*Array:mySocketParseHeader(const header[]) +{ + new Array:explodedHeader; + explodedHeader = ArrayCreate(e_KeyValue); + + new headerCopy[512]; + formatex(headerCopy, charsmax(headerCopy), "%s", header); + while (strlen(headerCopy)) { + new line[256], pair[e_KeyValue]; + + split(headerCopy, line, charsmax(line), headerCopy, charsmax(headerCopy), "^r^n"); + split(line, pair[kvKEY], 127, pair[kvVALUE], 127, ":"); + + trim(pair[kvKEY]); + trim(pair[kvVALUE]); + + ArrayPushArray(explodedHeader, pair); + } + + return explodedHeader; +}*/ + +/** + * Close socket + * + * @param int socketId + */ +public mySocketClose(socketID) +{ + socket_close(g_sockets[socketID]); + g_sockets[socketID] = 0; + remove_task(TASK_CHECK_SOCKET + socketID); + remove_task(TASK_TIME_OUT + socketID); } -// ######### Koniec Socketow ######### -_getServicePluginByID( id[] ) { +// ----------------------------------------------------- End of sockets -------------------------------------------------------- + +_getServicePluginByID( id[]) +{ new temp[MAX_NAME+1]; - for(new i = 0; i < ArraySize(service_ids); ++i) { + for (new i = 0; i < ArraySize(service_ids); ++i) { ArrayGetString(service_ids, i, temp, charsmax(temp)); - if( equali(id, temp) ) { + if (equali(id, temp)) { return ArrayGetCell(service_plugins, i); } } @@ -1912,31 +2130,39 @@ _getServicePluginByID( id[] ) { return -1; } -_getServiceByID( id[] ) { +_getServiceByID( id[]) +{ new service[e_Service]; - for(new i = 0; i < ArraySize(services); ++i) { + for (new i = 0; i < ArraySize(services); ++i) { ArrayGetArray(services, i, service); - if( equal(id, service[sID] ) ) { + if (equal(id, service[sID])) { return i; } } return -1; } -_getNumberByTariff( tariff, number[], len ) { +_getNumberByTariff( tariff, number[], len) +{ new sms[e_SMS]; - for(new i = 0; i < ArraySize(smses); ++i) { + for (new i = 0; i < ArraySize(smses); ++i) { ArrayGetArray(smses, i, sms); - if( tariff == sms[sTARIFF] ) { + if (tariff == sms[sTARIFF]) { copy(number, len, sms[NUMBER]); return; } } } -/* Stocki */ -stock usunPusteLinie(sciezka[]) { - if( !file_exists(sciezka) ) { +bool:isDebug() +{ + return bool:get_pcvar_num(cvar_debug); +} + +// --------------------------------------------------------- Stocks ------------------------------------------------------------ +stock deleteEmptyLines(sciezka[]) +{ + if (!file_exists(sciezka)) { return; } @@ -1944,10 +2170,10 @@ stock usunPusteLinie(sciezka[]) { do { formatex(zastepcza, charsmax(zastepcza), "%d", licznik); ++licznik; - } while( file_exists(zastepcza) ) + } while (file_exists(zastepcza)) new szLine[128], iLen; - for(new i=0; read_file(sciezka, i, szLine, charsmax(szLine), iLen); i++) { + for (new i=0; read_file(sciezka, i, szLine, charsmax(szLine), iLen); i++) { trim(szLine); // pusta linia if (!strlen(szLine)) @@ -1956,7 +2182,7 @@ stock usunPusteLinie(sciezka[]) { write_file(zastepcza, szLine, -1); } - if(file_size(zastepcza)>1) { + if (file_size(zastepcza)>1) { //Usuwa stary plik unlink(sciezka); //Zmienia nazwe tymczasowego pliku na stary plik @@ -1964,21 +2190,22 @@ stock usunPusteLinie(sciezka[]) { } } -stock escape(string[], string_len=64) { +stock escapeQuotes(string[], string_len=64) +{ replace_all(string, string_len, "'", "\'"); - return 1; } -stock get_sms_cost(szNumber[]) { - if(strlen(szNumber) < 4) { +stock get_sms_cost(szNumber[]) +{ + if (strlen(szNumber) < 4) { return 0; } - else if(szNumber[0] == '7') { + else if (szNumber[0] == '7') { new temp[4]; formatex(temp, charsmax(temp), "%c", szNumber[1]); return szNumber[1] == '0' ? 50 : str_to_num(temp)*100; } - else if(szNumber[0] == '9') { + else if (szNumber[0] == '9') { new temp[4]; formatex(temp, charsmax(temp), "%c%c", szNumber[1], szNumber[2]); return str_to_num(temp)*100; @@ -1987,31 +2214,35 @@ stock get_sms_cost(szNumber[]) { return 0; } -stock two_number_value(value) { +stock two_number_value(value) +{ new temp[17]; - if( value < 10 ) + if (value < 10) { formatex(temp, charsmax(temp), "0%d", value); - else + } else { formatex(temp, charsmax(temp), "%d", value); + } return temp; } -stock groupDigits(a, output[], len) { +stock groupDigits(a, output[], len) +{ setc(output, len, 0); new number[32]; num_to_str(a, number, charsmax(number)); - for(new i = 0; i < strlen(number); ++i) { - if(i && i % 3 == 0) + for (new i = 0; i < strlen(number); ++i) { + if (i && i % 3 == 0) format(output, len, " %s", output); format(output, len, "%c%s", number[strlen(number) - 1 - i], output); } } -stock getXMLValue(szText[], tag[], output[], len) { - new temp[64], textStart, textEnd; +stock getXMLValue(const szText[], const tag[], output[], len) +{ + static temp[64], textStart, textEnd; formatex(temp, charsmax(temp), "<%s>", tag); textStart = contain(szText, temp); @@ -2019,36 +2250,36 @@ stock getXMLValue(szText[], tag[], output[], len) { formatex(temp, charsmax(temp), "", tag); textEnd = contain(szText, temp); - if ( textStart >= 0 ) - { + if (textStart >= 0) { new tag_len = 2 + strlen(tag); copy(output, min(len, textEnd - textStart - tag_len), szText[textStart + tag_len]); } } -stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen ) { +stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen) +{ static const HEXCHARS[ 16 ] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 }; new iPos, cChar, iFLen; - while( ( cChar = szInput[ iPos ] ) && iFLen < iLen ) + while (( cChar = szInput[ iPos ] ) && iFLen < iLen ) { - if( cChar == 0x20 ) { + if (cChar == 0x20) { szOutput[ iFLen++ ] = 0x2B; } - else if( !( 0x41 <= cChar <= 0x5A ) + else if (!( 0x41 <= cChar <= 0x5A ) && !( 0x61 <= cChar <= 0x7A ) && !( 0x30 <= cChar <= 0x39 ) && cChar != 0x2D && cChar != 0x2E && cChar != 0x5F ) { - if( ( iFLen + 3 ) > iLen ) { + if (( iFLen + 3 ) > iLen) { break; } - else if( cChar > 0xFF || cChar < 0x00 ) { + else if (cChar > 0xFF || cChar < 0x00) { cChar = 0x2A; } @@ -2068,7 +2299,8 @@ stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen ) { return iFLen; } -stock bool:json_decode(const string[], const key[], output[], output_len) { +stock bool:json_decode(const string[], const key[], output[], output_len) +{ new pos = 0; new len = strlen(string); new key_start, key_len; @@ -2076,62 +2308,80 @@ stock bool:json_decode(const string[], const key[], output[], output_len) { new value_start, value_len; new escaped = false; - while( pos < len ) { + while (pos < len) { - while( string[pos] != '"' ) pos++; + while (string[pos] != '"') { + pos++; + } // Pozyskujemy nazwe klucza key_start = pos + 1; escaped = false; - while( ++pos < len ) { - if( pos == len ) + while (++pos < len) { + if (pos == len) { return false; + } - if( escaped ) + if (escaped) { escaped = false; - else if( string[ pos ] == '\' ) + } else if (string[ pos ] == '\') { escaped = true; - else if( string [ pos ] == '"' ) + } else if (string [ pos ] == '"') { break; + } + } + + if (pos == len) { + return false; } - if( pos == len ) return false; - if( !(key_len = pos - key_start) ) + if (!(key_len = pos - key_start)) { continue; + } copy(temp_key, min(charsmax(temp_key), key_len), string[key_start]); pos++; // Przechodzimy o jeden dalej, bo zatrzymalismy sie na znaku '"' - while( pos < len && isspace( string[pos] ) ) ++pos; - if( pos == len ) return false; + while (pos < len && isspace(string[pos])) ++pos; + if (pos == len) { + return false; + } - if( string[ pos ] != ':' ) + if (string[ pos ] != ':') { continue; + } pos++; // Przechodzimy o jeden dalej, bo zatrzymalismy sie na znaku ':' - while( pos < len && isspace( string[pos] ) ) ++pos; - if( pos == len ) return false; + while (pos < len && isspace(string[pos])) ++pos; + if (pos == len) { + return false; + } value_start = pos; pos--; // Wracamy o jeden, bo pozniej mamy pre inkrementacje - while( ++pos < len ) { - if( escaped ) + while (++pos < len) { + if (escaped) { escaped = false; - else if( string[ pos ] == '\' ) + } else if (string[ pos ] == '\') { escaped = true; - else if( string [ pos ] == ',' || string [ pos ] == '}' ) + } else if (string [ pos ] == ',' || string [ pos ] == '}') { break; + } + } + if (pos == len) { + return false; } - if( pos == len ) return false; - if( !(value_len = pos - value_start) ) + if (!(value_len = pos - value_start)) { continue; + } // Jezeli klucz jest inny niz ten w argumencie funkcji, to nie kopiuj jego value - if( !equal(temp_key, key) ) + if (!equal(temp_key, key)) { continue; + } copy(output, min(output_len, value_len), string[value_start]); trim(output); From 3781baac40442b4e62794e4445e216371cdd2992 Mon Sep 17 00:00:00 2001 From: seek Date: Thu, 4 Feb 2016 15:02:36 +0100 Subject: [PATCH 012/124] Changed folders structure --- .../amxmodx/configs/plugins-sklep_sms.ini | 11 ++ cstrike/addons/amxmodx/configs/sklep_sms.cfg | 34 ++++++ .../addons/amxmodx/scripting/amxbans_core.sma | 0 .../amxmodx/scripting/include/shop_sms.inc | 99 ++++++++++++++++++ .../scripting/include/shop_sms_const.inc | 31 ++++++ .../addons/amxmodx/scripting/sklep_sms.sma | 0 .../sklepsms_usluga_bf2_odznaki.sma | 0 .../scripting}/sklepsms_usluga_cod_exp.sma | 0 .../scripting}/sklepsms_usluga_cod_exp2.sma | 0 .../scripting}/sklepsms_usluga_cod_te.sma | 0 .../sklepsms_usluga_dodatkowe_flagi.sma | 0 .../scripting}/sklepsms_usluga_gxm_bm.sma | 0 .../scripting}/sklepsms_usluga_gxm_exp.sma | 0 .../sklepsms_usluga_rezerwacja_nicku.sma | 0 .../sklepsms_usluga_rezerwacja_slota.sma | 0 .../scripting}/sklepsms_usluga_vip.sma | 0 .../scripting}/sklepsms_usluga_vippro.sma | 0 .../scripting}/sklepsms_usluga_zp_ap.sma | 0 services/sklepsms_usluga_bf2_odznaki.amxx | Bin 3203 -> 0 bytes services/sklepsms_usluga_cod_exp.amxx | Bin 2872 -> 0 bytes services/sklepsms_usluga_cod_exp2.amxx | Bin 1351 -> 0 bytes services/sklepsms_usluga_cod_te.amxx | Bin 5615 -> 0 bytes services/sklepsms_usluga_dodatkowe_flagi.amxx | Bin 799 -> 0 bytes services/sklepsms_usluga_gxm_bm.amxx | Bin 1124 -> 0 bytes services/sklepsms_usluga_gxm_exp.amxx | Bin 1128 -> 0 bytes .../sklepsms_usluga_rezerwacja_nicku.amxx | Bin 710 -> 0 bytes .../sklepsms_usluga_rezerwacja_slota.amxx | Bin 814 -> 0 bytes services/sklepsms_usluga_vip.amxx | Bin 798 -> 0 bytes services/sklepsms_usluga_vippro.amxx | Bin 804 -> 0 bytes services/sklepsms_usluga_zp_ap.amxx | Bin 1127 -> 0 bytes 30 files changed, 175 insertions(+) create mode 100644 cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini create mode 100644 cstrike/addons/amxmodx/configs/sklep_sms.cfg rename amxbans_core.sma => cstrike/addons/amxmodx/scripting/amxbans_core.sma (100%) create mode 100644 cstrike/addons/amxmodx/scripting/include/shop_sms.inc create mode 100644 cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc rename sklep_sms.sma => cstrike/addons/amxmodx/scripting/sklep_sms.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_bf2_odznaki.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_cod_exp.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_cod_exp2.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_cod_te.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_dodatkowe_flagi.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_gxm_bm.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_gxm_exp.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_rezerwacja_nicku.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_rezerwacja_slota.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_vip.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_vippro.sma (100%) rename {services => cstrike/addons/amxmodx/scripting}/sklepsms_usluga_zp_ap.sma (100%) delete mode 100644 services/sklepsms_usluga_bf2_odznaki.amxx delete mode 100644 services/sklepsms_usluga_cod_exp.amxx delete mode 100644 services/sklepsms_usluga_cod_exp2.amxx delete mode 100644 services/sklepsms_usluga_cod_te.amxx delete mode 100644 services/sklepsms_usluga_dodatkowe_flagi.amxx delete mode 100644 services/sklepsms_usluga_gxm_bm.amxx delete mode 100644 services/sklepsms_usluga_gxm_exp.amxx delete mode 100644 services/sklepsms_usluga_rezerwacja_nicku.amxx delete mode 100644 services/sklepsms_usluga_rezerwacja_slota.amxx delete mode 100644 services/sklepsms_usluga_vip.amxx delete mode 100644 services/sklepsms_usluga_vippro.amxx delete mode 100644 services/sklepsms_usluga_zp_ap.amxx diff --git a/cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini b/cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini new file mode 100644 index 0000000..1961750 --- /dev/null +++ b/cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini @@ -0,0 +1,11 @@ +; Uslugi +sklepsms_usluga_bf2_odznaki.amxx +sklepsms_usluga_cod_exp.amxx +sklepsms_usluga_cod_te.amxx +sklepsms_usluga_gxm_bm.amxx +sklepsms_usluga_gxm_exp.amxx +sklepsms_usluga_rezerwacja_nicku.amxx +sklepsms_usluga_rezerwacja_slota.amxx +sklepsms_usluga_vippro.amxx +sklepsms_usluga_vip.amxx +sklepsms_usluga_zp_ap.amxx diff --git a/cstrike/addons/amxmodx/configs/sklep_sms.cfg b/cstrike/addons/amxmodx/configs/sklep_sms.cfg new file mode 100644 index 0000000..eb546b6 --- /dev/null +++ b/cstrike/addons/amxmodx/configs/sklep_sms.cfg @@ -0,0 +1,34 @@ +// ---------------------------------- +// SKLEP SMS: - Plik Konfiguracyjny +// ---------------------------------- + +// Wlacza / Wylacza sklepik +// 1 - wlaczony +// 0 - wylaczony +sklepsms_on "1" + +// Komenda, ktora nalezy wpisac na chacie w celu wyswietlenia menu sklepiku +sklepsms_sklep_komenda "/sklepsms" + +// Komenda, ktora nalezy wpisac na chacie w celu przeladowania flag wykupionych w sklepiku +sklepsms_przeladuj_komenda "/przeladuj" + +// Wyswietlac informacje o sklepie na chacie? +sklepsms_info "1" + + +// ######################### +// ### Dane Bazy MySQL ### +// ######################### + +// Adres IP +sklepsms_host "" + +// Uzytkownik +sklepsms_user "" + +// Haslo +sklepsms_pass "" + +// Nazwa bazy danych +sklepsms_db "" diff --git a/amxbans_core.sma b/cstrike/addons/amxmodx/scripting/amxbans_core.sma similarity index 100% rename from amxbans_core.sma rename to cstrike/addons/amxmodx/scripting/amxbans_core.sma diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc new file mode 100644 index 0000000..0a36e47 --- /dev/null +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc @@ -0,0 +1,99 @@ +#if defined _shop_sms_included + #endinput +#endif +#define _shop_sms_included + +#pragma library "shop_sms" + +#include + +native ss_register_service(const service_id[]); +/*------------------------------ + * Rejestruje usluge, ktora bedzie pozniej dostepna w sklepie + * --------------------------- + * service_id[] - id uslugi +------------------------------*/ + +native ss_add_code(sms_code[], tariff); +/*------------------------------ + * Dodaje kod do listy kodow do wykorzystania + * --------------------------- + * sms_code[] - kod SMS + * tariff - taryfa kodu ( wartosc ) +------------------------------*/ + +native ss_show_sms_info(id); +/*------------------------------ + * Kontynuuje proces zakupu po zwroceniu wartosci SS_STOP w forwardzie ss_service_chosen + * --------------------------- + * id - index gracza dokonujacego zakupu +------------------------------*/ + +native ss_show_service_purchase(id, const service_id[]); +/*------------------------------ + * Wyswietla menu z zakupem danej uslugi + * --------------------------- + * id - index gracza dokonujacego zakupu + * service_id[] - id uslugi do zakupienia +------------------------------*/ + +native ss_log(const message[], any:...); +/*------------------------------ + * Dodaje informacje do logw. +------------------------------*/ + +native bool:ss_is_steam(id); +/*------------------------------ + * Sprawdza, czy gracz ma steama + * --------------------------- + * id - index gracza dokonujacego zakupu +------------------------------*/ + +forward ss_service_data(name[], flags[]); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) + * w momencie pobrania danych o usludze. + * --------------------------- + * name[] - nazwa uslugi + * flags[] - flagi danej uslugi + * --------------------------- + */ + +forward ss_service_addingtolist(id); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) + * w momencie dodawania uslugi do menu z uslugami. + * Funkcja powinna zwraca jedn z dwoch wartosci: + * ITEM_ENABLED - usluga ma byc dostepna + * ITEM_DISABLED - usluga ma byc niedostepna + * --------------------------- + * id - index gracza dokonujacego zakupu +------------------------------*/ + +forward ss_service_chosen(id, amount); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) + * w momencie wybrania uslugi. + * Funkcja powinna zwraca jedna z dwoch wartosci: + * SS_OK + * SS_STOP - gdy chcemy na pewien czas zatrzyma proces wykupowania usugi. + * Potem musimy go wznowi za pomoca natywu ss_show_sms_info. + * --------------------------- + * id - index gracza dokonujacego zakupu + * amount - wybrana ilosc ( opcja ) +------------------------------*/ + +forward ss_service_bought(id, amount); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) w momencie zakupu uslugi. + * Mozna zwrocic wartosc SS_ERROR w przypadku wystapienia bledu przy dodawaniu uslugi. + * --------------------------- + * id - index gracza dokonujacego zakupu + * amount - ilosc wykupionej uslugi +------------------------------*/ + +stock pause_plugin() { + static szFile[32]; + get_plugin(-1, szFile, sizeof szFile); + pause("ad",szFile); +} diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc new file mode 100644 index 0000000..bc0594e --- /dev/null +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -0,0 +1,31 @@ +#if defined _shop_sms_const_included + #endinput +#endif +#define _shop_sms_const_included + +#pragma library "shop_sms_const" + +#define VERSION "3.3.5" + +#define PREFIX "SKLEP-SMS" + +#define SS_OK -1 +#define SS_ERROR -2 +#define SS_STOP -3 +#define SS_BAD_ARGS -4 + +#define MAX_SMS_TEXT 32 +#define MAX_SERVICE_TAG 16 +#define MAX_NAME 32 +#define MAX_ID 32 +#define MAX_PASSWORD 32 +#define MAX_DESCRIPTION 28 +#define MAX_CODE 16 +#define MAX_CONFIG 512 +#define MAX_NUMBER 16 + +#define ITEM_OFF 3 + +#define TYPE_NICK 1<<0 +#define TYPE_IP 1<<1 +#define TYPE_SID 1<<2 diff --git a/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma similarity index 100% rename from sklep_sms.sma rename to cstrike/addons/amxmodx/scripting/sklep_sms.sma diff --git a/services/sklepsms_usluga_bf2_odznaki.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma similarity index 100% rename from services/sklepsms_usluga_bf2_odznaki.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma diff --git a/services/sklepsms_usluga_cod_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma similarity index 100% rename from services/sklepsms_usluga_cod_exp.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma diff --git a/services/sklepsms_usluga_cod_exp2.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp2.sma similarity index 100% rename from services/sklepsms_usluga_cod_exp2.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp2.sma diff --git a/services/sklepsms_usluga_cod_te.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma similarity index 100% rename from services/sklepsms_usluga_cod_te.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma diff --git a/services/sklepsms_usluga_dodatkowe_flagi.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma similarity index 100% rename from services/sklepsms_usluga_dodatkowe_flagi.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma diff --git a/services/sklepsms_usluga_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma similarity index 100% rename from services/sklepsms_usluga_gxm_bm.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma diff --git a/services/sklepsms_usluga_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma similarity index 100% rename from services/sklepsms_usluga_gxm_exp.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma diff --git a/services/sklepsms_usluga_rezerwacja_nicku.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma similarity index 100% rename from services/sklepsms_usluga_rezerwacja_nicku.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma diff --git a/services/sklepsms_usluga_rezerwacja_slota.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma similarity index 100% rename from services/sklepsms_usluga_rezerwacja_slota.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma diff --git a/services/sklepsms_usluga_vip.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma similarity index 100% rename from services/sklepsms_usluga_vip.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma diff --git a/services/sklepsms_usluga_vippro.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma similarity index 100% rename from services/sklepsms_usluga_vippro.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma diff --git a/services/sklepsms_usluga_zp_ap.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma similarity index 100% rename from services/sklepsms_usluga_zp_ap.sma rename to cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma diff --git a/services/sklepsms_usluga_bf2_odznaki.amxx b/services/sklepsms_usluga_bf2_odznaki.amxx deleted file mode 100644 index 7918a5735967065d42813e0ec9c71ec6ce3d6948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3203 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 diff --git a/services/sklepsms_usluga_cod_exp.amxx b/services/sklepsms_usluga_cod_exp.amxx deleted file mode 100644 index 1e3b4ddb90848365de6be1ff71fe680c79613ec4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2872 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 diff --git a/services/sklepsms_usluga_cod_exp2.amxx b/services/sklepsms_usluga_cod_exp2.amxx deleted file mode 100644 index 307e85b98144489b8e41f9ec236b728c7641d0ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1351 zcmV-N1-SZHSWQ6y0|5jt1polp4FCYtNB{sB0001ZoXu80Y}`~Be|MLLJ9E$q3RD6K zLkkGei+qo{p z-?%ObA$p*1K;JTb585pX@dI!hHa`J3fxiIffxiOBApf0gf#cxOb&l~om@Q0p*QHdzG<&?)zJ0bM2$1uSj4dz%V^EDrD-{i z>vxmDbK@k>?*xNxFA-gtn3=H%twAhB495PDk?g`&MoJG(_E_vq*q$qWc#2#<5q991 zg3yfnvAE_1RwBfDwrnv8+RD-UpbMbKsV1NasyArB_!7(WdY_+A z@9qipK08K_&P)7l-p0J3$`h(kS-BTplI%SK>UB?=$TC z6#G7#^Huzp7zgcDZsWP!R2=gC2I%GyvCC}x7~58lSXYVjx&tynEs#?h<@sH1&0pun zM(Oz4Z?TN7I_IN&7B~;}JsINByDX5Co7i+MV)eaLzn>_c+x@;-E~kK`B$ z`-ylwU>#L6RcnuZUSv7hbT}r>`y4~%v%xy6>@#G0CC}GzGFL0A(G8Z9?BISWy+?6h z$8gyFfu4p=xM##^@kIKy)7M|?1$|kIrChDuih^!r^@C3=-<7p1?TNX?<>i_k^h4LP zk|3(NzU>VhX!Bor5{$IH`A;W{!AFp?({;quXgdo0>jgduybC-H{2BNZa0mD_EfnYav%o6wIr0TON2Lco zPum210r;SpmHW41_Uopz^JTzg;CbK@AFp&2zbe#4*}a8GrD8$E8`oS<@~&00+848) zuK*R-N!OGycA1H44bTf!4+)@sHf0hcEM?3jvO;!}XS=>5*V%{Sk3qlo{5>q$>qSSlVhnps~;&+WoKVcL4mr&4-u?w6`&^uACE zlv)Wdsp>&pbwZ34^ED+OM|H5hV!oaSG`Xjxle!=}LEz!Tu>2unu282LVMiRZFOy#2 z;D>MdT~GD{N1|!SI?-`)!|f~$Ly2GcoYQxGy!RoBwiH=@ydZ~&*AAj&G4r5_xhS%R zcvt6xn?Z6L&2ts1uG$je$H^o*V!hEYv`RRLdoG>@@Y|v^#El^3+_Y@+T_?kCaw=1MI-OQQL zWJ5-QN_3>JY4dYSbI`GE%^CDVz17gCJNmS(Pq*|LL!WYp(@dWYOP@0I7WfTPm}%+L zGkRtyq9wbOUwLr=;F6(r29pnURqOYth~8V5Vv9rG@s}cdnvN J{{Z(r?)}~Js>c8T diff --git a/services/sklepsms_usluga_cod_te.amxx b/services/sklepsms_usluga_cod_te.amxx deleted file mode 100644 index 7d04147406f58340c84fe625dec01ca9f59c7554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5615 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 J{{uONU}Y=iTHgQw diff --git a/services/sklepsms_usluga_dodatkowe_flagi.amxx b/services/sklepsms_usluga_dodatkowe_flagi.amxx deleted file mode 100644 index 196fc2b72d06184bea8670f0cdd4fbe68ff4ca28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmV+)1K|8vSWQ6y0|5jF0{{T02LJ$EL;wI70001ZoaL0iZ__{&$6tN`v1uicDo_VR zhDr?3{NRVw(uImr356g~QmI9i%r(BcZXBPn9om#70|RUkVqigH<C$%Xkb=Mn zr2p7%Nkf>X?OLI7>|ji8icpX*Er_LWB+ik3U&MygQeKZN85&(kj7>*a0sMr?%V0}+ zM$idp*-;`S+U0yp;5l;=JVm}Uymm&`pD0;h02AN|`(Fa5z#6C=5|2jw^6ZykzrqoI zIgXj0Jw3ASACgD*4|%MyPmX<3{{s8x*ni@PbJD!?BY9s0_y5w~0N21E^Xva)Ip1`j z;r;(G8lVjvAb|&FSzhP)Iw*n_5U_0*SU|82Wlaj0EDJeqB-`QGk=-);3--4;k1LeC zm-OAtkK`wr8p~>UEML%DqMOo5qsjQjq8l!6sg5iMQnt(Yd}aBfqjrRA%ks^}>|%X& zwOm)*(6=4wmAgSy$jJspX~cVBmWq}PwlyUo`eQgvkhd-HiJ=^3f8;%_r1vsi_4#qP7%`)zy{e#EtE%Uce$2tSD z4W%4ZrEq&N*^HW{uez>jbY!@tOw_b+Ek|~gDbe4PW_q0N*c;8BC+P$&njPE4{d+j5 z=?gcg$sV$4C_k(x5p-JgebGa;FR8mKTnQw8Y}2>Xzf4zkEeJ)cU7XW3PkANbgt{gl z>Du<5^o!M&t}V>ST~F6G(BIqILa{nm(Y2OxgRtcJcJcDQfiFW>cS_Zk7Fo?#MqK8{ dT&m+Py54Bk8n++ZDpo6%icbG#`~-}260>ifhaCU_ diff --git a/services/sklepsms_usluga_gxm_bm.amxx b/services/sklepsms_usluga_gxm_bm.amxx deleted file mode 100644 index 4e5f3c417ab0107949b4a307f78b24abc029d862..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1124 zcmV-q1e^OSx?cJ95McQ8Tp+aL9Mh3a(6Ao6QO2ap{s5&ezv z8WG(BeFfSR`Wm!dA^HZm51(&=JHYROi@+a%HRyjOJq`u`6f_Ktj|sjgI4^ib@Lk|J zqBqxo&r@h;-j=e~JwHFyr$M_V`T#Tq zdKmNt=n~fqG!T42^kuux&uDk|jCOZUuw%Vh;;F>*zF__(&?}%%MbCU&VjjX~SM2Zo zN1QK(=QxuR$B;M|B-i$RwafD|Mt(K%tB7Cy1izn+(c0gY_%-8r9@R7Cu}8=AsGX8W zRo1xQ?_9}mO6+*;mqFJ{va)Yod?&#KwZ+p;ywJzs1`R${J|-8*%cj+ z8Of)JX-FQ$UT@QbH*Anwn)gYc*MM}Ldcyx-Bb1!@yWxShKuU617nv`5mM7x30@@TE z%VW}KkmbvQuaiE{H$kb`@|o|;nyh;pv?e}0e@l2C9nyQM*jxO6&z9C#LRTN)oIb;0 z`yIWGzZMtiJbt`OdDpf!qCmA$r8ZkPlBl29LG+0oda8A0< z0(=&D2z-vKR@H^qgR^)85vvu0(%Va(ujGHZkgK`t^UZ)eJYIhgX8C)JD?B$3qXm;y zEzA--mLO%Z7rJU&VifWk6w2QJ7}aapIY?-FCAP57G^uH5-?w zVmoOzoFn~=a{fi13mg-wbeJaUWAGjDneA+vGi^3g+i|neOO(CYxNOe4&XEtaj_vzq z`JX%Pu-+a^;>aLTS=jWaXPgGCI_>tzC7;|@NmL{{vTrsQ7giTwGv8~vgCI7$9doW{ q&N=2>*PL%7J(j$hKRdQL+cvw9ci3RQYtGG^+G}pcoc#w}<)RUag)p)J diff --git a/services/sklepsms_usluga_gxm_exp.amxx b/services/sklepsms_usluga_gxm_exp.amxx deleted file mode 100644 index e6b3bbc5ad436c87af4b456daab4b9652ff86542..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmV-u1eg0*SWQ6y0|5k31ONbZ3jhH0MgRa90001ZoXu9vZ`@Q6AMb9%u1QfT9|t~- zh{OSs-DJDjigF-o2uN*8rKGTMaUJ_**Q~#=y&)+%^w0y5IB?|9Lym~QfFlyuNO0g- zA^rn`lpB@cH}*K|G?3(k>ecu+Z@%8V+4ubBV1nrPKkM}h)# zBDxLw7PKq$9cZ&c^gVD7K0g4rfjEDXG3b2G{!9P)!OG7~?cB`>s6u9K{J2DDS6Pe4rnzRIk>G2hFWY@}M!S1ww7YwP9qWw}PbHrB1@mu!-U59odgfaab00Q4Vt@ZX z;(Q}K$C;Ekn#8#vxwamuU6z+N_N$3sMf~a~_&w0ZbN^W4d)o0ls%OY!myYLAJ0*{* z%<-t-xsuI+P2Gb)=P2ElT|UDRtQq9Y3>@ zPZ3j-Jc_;EqQ~#CKu&4gr~JJ7l-EhgIQpOR2_z@}Zn&Tg$$@iO7nvt|mdE0^0vd`= zNxst}Ulx3u^7DKPl!z^#`M%7_y7xgn@!|1%GQKJEv?|e6Ey(61w)7=XDo{ z?ho8~{MEQf=kep+%DcBY2z}K|lo~c~#$i9U{O}7aa8>i_%Jjl=uh+CgKXN@Q4dbR8 z*xty2wS4ktAjq!2Q-dsrpFuzLRMZ?Le8=Pi#4xk5W%f6HQ*A~wiEm{m?<2}j+{cuk zWM2J4%1_n@n6d%94%B&d!1KU+z^8z}0G|f_3cSec#0h^6I0<|nxD9-P{eUk5?*m@~ zJ^;Q9+y}nGWvk}Z&mYd>9Ym~FG)nF)xt@|g=R&6D>z`W$zUs05QIKZqII3`+EKDw# ztmeWrwjv2q7Q2C?HYG+OuR$SKcVPKSGGp!7hAVUQdaq|z{9csGWsN{_+wWz~2fsPh zOg(NjwlgKa_p~F*toc~XwEW&asx8`)T`CMXwJNq<(Ve)Cl&@APSBYaB?_v0hpwU_w zdf32Lu!TtL+-}6Evt#-y9fS@p7Axp`$`2id%O!6|Cg{4mwz?H5dV&@l-wm)oBa~t_ zwu0oE+QNJ*VVo}K5p-IJV`~ea^TqH+nBGFOGzn9;C^SW}Ys_^n>y2oX3}!IW8&{?x zE7lu!7$hl6jM??pzvwf8ZPUmX`}M|JtgK<&W6pnEg3b^})JR%`5%4eqEoED{~t>-yrt>H=)Kw(gAl$mq0< u`88wSHs(7%l5Gz9@O}r3Hf+rqq=58l@o7>%4c6LqfY|>Z=77;9jprW0nl^`}2HX?}FTBHzL zV-*|G@9e%iHYWN9IPlpwGjHb2+c)n`t)FP?yJhu}MW2c2b&05kx!M%bFSLu8n*&V{ zF>9a-I=}*Vzy`Qad3(z81Rb=Zx)3mQdLhPq$}*v$-gn4uduuXPJl(qV`0{&zy*SJ*LZ)2rHS1t>rKp73TtO+cPvx(NmDtfRuQ_s43s1BGUX4) z0lMnd7uu1;jZHd%7vhE@9JCONP|wIVyqQ;VQpqhGqRBWGZPe`*HLH?EEfKbb*z1PL zH1m$mecZIn?H?P=^Jne-re(bPSL+*sj_^Fr%|DZwUj&2TDaT(1r@#`Z98%l>p_RW)TrOWCO0OO&68rrHou zAS<`(qmy%si7IQ$PZ;xc@mA@bk*ZD8!XSa zV@W4y(rX403LwTo^NEP`jBF#Dx=PYHvx7~ONg~>K_EYMvN*A=m#m*-|_m*kB?3S+C zmQID+D2>@xtm3i=Q`?g3wzY;5Db-xtni!Frv287***C0-Qf;hiTds<9T8@*TbY;&W sk!fUy<(g|{UgOnV$aqgktvAHB>+>`9I}dM{YSn7hrhh+v0q`~$NFm9iMgRZ+ diff --git a/services/sklepsms_usluga_vip.amxx b/services/sklepsms_usluga_vip.amxx deleted file mode 100644 index 301200a246c9278b2e1abdcd07d2a096af5f7555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798 zcmV+(1L6EwSWQ6y0|5jE0{{ST2LJ#tL;wI70001ZoZXbqYZE~f$6wm2*|i0QqVyo< z5b&T)HvWLt3RrZ)A`quz>m@FIBi&k+0v{0}O4@FpI- zc+u}>UTR`nM7%lh;my8Z^LBnbXMkw$Yd+scc`D|J-uDqX&^c2?KQP9KXbJ3qXUs0^ zUVuD!4feoWw!I@WKCt}A@*B(VEUlc8!;r^_Zk>ZXPjT4vgUGF|`kiSI1u1FmYME>X zHR%e^3nD*NVW4~To=62H(uZ0mt_jZU`zm&%nu=TG%hYW`QXkbKk?H^6Z@j>{hr*UvdS zYmaozcMhqe?+b4)+SbmH?I-_P-bN37GSd!VcCi{SoW`n%v7*v|-P{!q^ z&K{@vz(aG}-@@Gt;*xHN_T|b_W|!0gkH}oO$6yG&WZNrnn#_Y62A{zhu!EY;lDRx1 z>}y)n9vH~w$UJm21`k*x(U3jH%6S^X$-NY_~Dmw`TeJ zv3s5Fg}mm7_Ij4g5**e0c6%!S&9mJNcMdMMJX~*j7zNIxWRXP`JGBkjON$!&0SYWnSY>SIBrz cNToN#wyO)X)tQHP3Khq3Z2Fh+6S~h4dYhn`2><{9 diff --git a/services/sklepsms_usluga_vippro.amxx b/services/sklepsms_usluga_vippro.amxx deleted file mode 100644 index c222ed02ee9662188c2054bd78b90b3d76b90d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 804 zcmV+<1Ka#qSWQ6y0|5jK0{{Sm2LJ#-L;wI70001ZoZXbaYZO5g$KNGUZ`TM4qNEV7 z2w151BPt}ONi+(QM57la5n-L&PWIN@+u6+Q#awJsY8S-9MzHnI5c~)H4 zNl*BG7ze3}Ler=BMJh$WTa83u5GQ<|nz~9n(=>EF zQX(bV;ChST8FLuaQST_v=X&NJ$vwoiCWl#Wjfnnbk2!LSQJ#Ygo@H&%sz%AbA0@?e}y%!ZQ z)>DIIW?6Ry7veMeM|K)6Idr6RD%mNP>Z&PAM#@HML90NErg|*mP?oM%&ri=UEtTfg zBiI{}OiC@2JyyHG!}B_8;jM>BqE*o}Md!X{S+jfVfCpsn;6rc(ykOf)aE$C5JPtmA z6JQHvog{moM%dSOs~s?u%aMKib`1Y!jYU)T88gFcB!i7YztazGSKQ_bd-_Ax}#E)InVfQbScAcbU>cv{&qU)Hp(Q=LFsi-vy<1nkF zD5BJL-Yg+o)l1lf{)Vx diff --git a/services/sklepsms_usluga_zp_ap.amxx b/services/sklepsms_usluga_zp_ap.amxx deleted file mode 100644 index bdc41e6158e945b23c1ab763d71bbf61677216c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmV-t1ep6+SWQ6y0|5k21ONbb3jhH4MgRa90001ZoXu7{Z{$=IKJ(ZxGi1@SJPMvh zM52IXW->d;iltyg6s@$IXr*K!(3l(hW@6$OwkISZLMgT&5(Op27AXNk29VGl2m9t`urWA*F8RSukSq`Bl`7^TCGeqN=ig~Rib0)j^~N~#&wg3 zJ_f!44g}u*u25J4r5QzA?qI8S7}%v9!4w4EpN{^>t!qP86y^ ztSN?KGob~qz_ZT zegPi>6Tp+eSHL9q5f})+CibG=mzVT=a7n+tbNtwD6l5yMJXctL19%JgT}#c}kM!n$+4l)w{H=(lD+nab=0CofG#{X*l+yg1k~XTSw&*bsW&y zI;t1cQIRoD$6YDJO^6?l{U)$j&=q5A5<4cb!TPd8(&H=6gNpdTqO_)PhZZoaoP*;`myXee16CTVg#w2ObAM58eg8z;WOg!4JVNfqw?S z3_b$C!cD7Wea|kg;vHnHluH!v%sZ}@zvWtL<^up95_q%6+YkICeUDLtW2b2{#dsxC zCXosyNm1?iw%(E)xxNa6Y~H@|v{c5{p$~Uvbc3&@UVNXE&ZS3ze7`?Tj~{&JQd9Hr zu(6vO`F>a$F{a0lxzx({-BD|PAUUAiflI4k(>9$Cmb0%f&8njw8lq^2z|CqPbcevjcr8veOG&dt+AD4M~^YO>#Qzshnk+Cp6xk4W@m_2EJw#k<+N(ng~_Ys9S*_C#*5r z`evgZp0=k7%di^tcsq{tr;t046P%Kac8lHgR@kVoMp|vuZyD3JbrJ)srCir2{#9oK z)>(`pSv(uW-#1$m)E|3+i3x7>rztZLW;FEqLxV`kNuv5c9n tG223UthtfiJIa`D8C~c*>@eFkW@e2nYNnl{{gBCsD;gbD;od+ From ca3a98e86b8ed952fae1ad4b412a217029daed31 Mon Sep 17 00:00:00 2001 From: seek Date: Fri, 5 Feb 2016 01:27:16 +0100 Subject: [PATCH 013/124] Sockets improvements --- .../addons/amxmodx/scripting/sklep_sms.amxx | Bin 0 -> 37208 bytes .../addons/amxmodx/scripting/sklep_sms.sma | 36 ++++++++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 cstrike/addons/amxmodx/scripting/sklep_sms.amxx diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.amxx b/cstrike/addons/amxmodx/scripting/sklep_sms.amxx new file mode 100644 index 0000000000000000000000000000000000000000..b8f575aa5bffd9881e519009fd7367bf80557969 GIT binary patch literal 37208 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 M8@2cTKm4woWZB*#?EnA( literal 0 HcmV?d00001 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 4cf1881..73f513b 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -835,10 +835,15 @@ public kodZwrotny(id) getWebPage(g_szTemp, g_shopPagePort, "getWebPagePurchaseService"); } -public getWebPagePurchaseService(const data[], const content[], playerId, status) +public getWebPagePurchaseService(const data[], const content[], playerId, status, statusCode) { switch (status) { case SOCKET_OK: { + if (statusCode >= 300) { + client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrociło bledny http code.", PREFIX); + return; + } + new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[1024]; getXMLValue(content, "return_value", return_value, charsmax(return_value)); @@ -881,7 +886,7 @@ public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarni } // Wystapil jakis blad, wiec przerywamy - if (positive != 1) { + if (! positive) { return; } @@ -1644,10 +1649,16 @@ public validateLicense() getWebPage(g_szTemp, _, "getWebPageValidateLicense"); } -public getWebPageValidateLicense(const data[], const content[], playerId, status) +public getWebPageValidateLicense(const data[], const content[], playerId, status, statusCode) { switch (status) { case SOCKET_OK: { + if (statusCode >= 300) { + g_shopRegistered = false; + log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z powodu blednego HTTP CODE."); + return; + } + new text[33]; getXMLValue(content, "text", text, charsmax(text)); @@ -1901,15 +1912,15 @@ _make_error(message[]) { /** * Get page content * - * @param const char[] path path (eg. example.com/shop/ddd) + * @param const char[] url path (eg. example.com/shop/ddd) * @param int port eg. 80 - * @param const char[] function callback function + * @param const char[] callback callback function * @param const char[] functionData callback function data * @param int playerId id of the player * * @return bool */ -bool:getWebPage(const url[], port = 80, const function[] = "", const functionData[] = "", playerId = 0) +bool:getWebPage(const url[], port = 80, const callback[] = "", const functionData[] = "", playerId = 0) { new host[128], path[256]; split(url, host, charsmax(host), path, charsmax(path), "/"); @@ -1933,16 +1944,16 @@ bool:getWebPage(const url[], port = 80, const function[] = "", const functionDat new requestData[1024]; if (true) { // pseudo deleting variables - new functionEscaped[256], functionDataEscaped[512]; + new callbackEscaped[256], functionDataEscaped[512]; - copy(functionEscaped, charsmax(functionEscaped), function); + copy(callbackEscaped, charsmax(callbackEscaped), callback); copy(functionDataEscaped, charsmax(functionDataEscaped), functionData); replace_all(httpRequest, charsmax(httpRequest), "^"", "^^^""); - replace_all(functionEscaped, charsmax(functionEscaped), "^"", "^^^""); + replace_all(callbackEscaped, charsmax(callbackEscaped), "^"", "^^^""); replace_all(functionDataEscaped, charsmax(functionDataEscaped), "^"", "^^^""); // "httpRequest" "function" "functionData" - formatex(requestData, charsmax(requestData), "%d ^"%s^" ^"%s^" ^"%s^"", playerId, httpRequest, function, functionData); + formatex(requestData, charsmax(requestData), "%d ^"%s^" ^"%s^" ^"%s^"", playerId, httpRequest, callbackEscaped, functionDataEscaped); } set_task(0.6, "mySocketCheckData", TASK_CHECK_SOCKET + socketId, requestData, strlen(requestData)); @@ -2006,7 +2017,7 @@ public mySocketCheckData(const requestData[], socketId) log_to_file(LOG_FILE, "Zapytanie zwrocilo blad: %d %s^n%s", statusCode, statusMessage, httpRequest); } - mySocketCallCallback(function, functionData, receiveDataContent, playerId, statusCode < 300 ? SOCKET_OK : statusCode); + mySocketCallCallback(function, functionData, receiveDataContent, playerId, SOCKET_OK, statusCode); } /** @@ -2063,7 +2074,7 @@ public mySocketTimeout(requestData[], socketId) mySocketCallCallback(function, functionData, "", playerId, SOCKET_TIMEOUT); } -mySocketCallCallback(const function[], const functionData[], const receiveDataContent[], playerId, status) +mySocketCallCallback(const function[], const functionData[], const receiveDataContent[], playerId, status, statusCode = 0) { if (! strlen(function)) { return; @@ -2074,6 +2085,7 @@ mySocketCallCallback(const function[], const functionData[], const receiveDataCo callfunc_push_str(receiveDataContent); callfunc_push_int(playerId); // player id callfunc_push_int(status); + callfunc_push_int(statusCode); callfunc_end(); } else { log_to_file(LOG_FILE, "Funkcja %s nie zostala prawidlowo wywolana.", function); From 0193b39487480c76980c8b2a3c5a66008f927128 Mon Sep 17 00:00:00 2001 From: seek Date: Mon, 8 Feb 2016 02:57:04 +0100 Subject: [PATCH 014/124] Added gitignore --- cstrike/addons/amxmodx/scripting/sklep_sms.amxx | Bin 37208 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cstrike/addons/amxmodx/scripting/sklep_sms.amxx diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.amxx b/cstrike/addons/amxmodx/scripting/sklep_sms.amxx deleted file mode 100644 index b8f575aa5bffd9881e519009fd7367bf80557969..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37208 zcmbrlXIK+k)HZz1v0w!ikq$>u5NXmo96>~>(nLx?ItU@sO9(kOI7*51o=EROdQViO zmjD4GHBv(hfdmpl+UxWD{=WCmdtI~FtXVUAuRTBZnzh$`&-3Tz5B@my=jne^{`f3{tp@W&s2MCR{8cw%PkjyRB?>8}mTii(Q#wrxkw+f)wR_m(#@DriW*MZb@tl3VC>Pv3MKpF#`4U78+-Aht(e zz_4QAn8wTbcswPl8{Un8=+WTdJx#)IfxtlKWa29p6>eO=WOe2x>2axK#vNPjz2-WB zqUa!VTNA#^RxfE*8#b?+ta)9nUuwMSlQ1c`WCn4lq`ZFeYyIn+QIl@rHm_9c>92~7 z8M!>pkala@AFZeC|LkoPEa2zcRbxf?u0f!s(dP8dU3aE?M!?Da?nl4<@Xu zZ95?*EK!XOU6XDTx^}u&bhh>I-!z-o;J@+ee@<(scbslJyQOeyFYi+ODW|f3d4A3L zr@uUt90%9>chJtH_H-ay7(PMS`8(pps@x~-iJoS|RbC-Z)qz72XX^N4pG%TN95}M9 zkD{84I}T5>_wRbJDk>zbDnHrwaJ63*IeBcCgr7Q=NJ38@m-O+gplX5!6vf1f4{j&* z3ibQv*Bm@bvJ-MriT!8QIthV2{KK^hq@ssBzzAup{(gS5UQDd|KqZObAJf>^>i54>itx=Z z5328j`7smw?1a!o2M?0)xMSg@PL=SNF%BLI6wS#V8&!CD(3`$t6_?V3MInN(bIF0e zO045*w-AZzJ0J`AN9up5Qzb>>r*2$Dd|mw)`WL(snS-5La8xhtsBEdX7|q8&!_9?z zK>(u*5vzGs$l5yr)d8rE`lx4Nt9-S!(+RdmT~vo@bD;A45>BJBu=3{g)5V{!>;bj8 z(~i0kj^>7ofDmEZ%M;mi&HyKS?OJ5m14DB_UW6sb-fD5CvuPEzDb-T%XBf+A z_13b%O>H@f&1LhuF@GLc0Fkw*ke8HvLsxmLkZo(er0IlhN1hb@(DK?YExQ7CD<4mp zT2tvJ!VhOzt$pa}n2Th>9%plG?t(3HJ-uYA906%BeFG;4HKuFB8t+vRrtC&QwUu>& z)mY2kG^f9_=C-eER8$(8+Ztkby0N41f#kLxINWSg|~<8_6AOpvKRz+83Ld^y2q zN*$MScZ+i-Ucm358d)TmIq9g*bv9(6W}marw;eTIRU18#zOm8%vF%WJ>84-HD6q!A zU5u=ZPrNW9XR!zJSGJi3hGe`@mD@Ozd0x(0rMg`e@S_kEzd8B{nNEvXVm`9NE~Hll z`dR}kXZkuMnez?jGG32Hs%bUW3wEX4zJC3|`q;zdvX0#Axi7HHsOj1-oHLDiP6WI1 zJj}?AI$&iJPg_GXxAO#~#Ks<1TJ}tR^oe@L&i0L{C-*j5r(GRzKQ~$Nx3{2kT_RiH z^{`*HQC7Lpxv!&uAwnKItqA2HZ^Ir2M}#f9s<#I|nFsoF(*HcWr+mB!FUYI3A5?2imHEo(~)XE7(5y8u z?o}YtKM$X6qE1q=GHRcF9_sY+zR73yg^&7&P~LOaHWK{ix!5Hw;4`t&4cpps_0U!q zH{ccrRN-&AxX^Xqyb5ULbU|K)1#t=ML=URYe7lQ{&R=}4TRz&Pv?zl!FaU0SKf*ma zuBOZVu&ZjXkGkpnE-*YPtg^%Zv1X*La@~6@Ch)W(yZk*$IM1}YoH`0W%4Qsve`_Qh za>RVT162I38csR;wbc53U+MOqw!VBz)(BH@bF?e;+U(>1{ytX%1U#Lv&3l$+i{NdfywdH8$-T)3U%-)T<%chCCT zr}<+wLY8h_I4{{+q~sS2d`aFlbe-@1^fal55Xc&|aS?f*h@l^^tx`Z*fb)81P6SJ3 zu5Vok?RaNlj4_d$3q_Z=wq}tfmB$5dZHkmrW>wDRJhDC$HO8ys`XAG0BWB+JA-Z5KA@elbz$AVNf5J?IxGlli0~c1@gGfmlO&;{ki(?B`wKRvc#^Y7E%FU^ z5-KxuY6yEm$5_MVQURC=CQNk00-P*CocjwM2;*fciw-%JyD#!#Dw~qwQGqMz0Yte{mYvUf~lz&Re=n zN&vsn65bmZTwiXv|FRA3>X^&Fq)-~&6)s0=*4R^}9y9(}(Ud;6toU4~^@t9!>-Lq= z?Qluoxa+3At8ITnXnufK=hFi1vieaO*j$Ltakn~)t!>aH>p~N7N{j^BsUh*+I+UXe-8pVxb(lpI zWmxnrOG)#_hd7f`anEknNlOVt0TXW4)hezvPv5LtmpWc=UU|2>mH{u<`o^?W2`{*! zC#H3cY}VSZ{Z_@Y#Wz@2niZ!#N}JPutLM{nVQl@?$yUfH4dSpN=c|Hm9T}AenXJiy zM&wCqDG`v&s5Ht54S6Z5=aBN}1JL>)J3A%Dc6ve*$mn|Ec;a$rFMdL}G)l{eqT;y! zH?}@0|6ahm`IXFs9|B#biQhU81-b?lp|m%GSx+6N{K^P3E>~7R@{hE+vvd>*$8QAq zyM7_w3Kb4#VEFw`kg-PF>ner(coCCxmNt23#VtFzZdxYfafw@szWr3b_h0~9lKHLQ zrvL9Xzn$NW@%NfEI&A--$^8ns>E#u&ZMIO1PObPm9iYfNov=~y7#%s6`^S;n0`GL> z95j9_Lch&C25_||9zD2k5%9}_?fr96_kLUDMBnLDcK&vl@Y~_e@3#2%lhlyP&&XVr zb5Z}>U-cimz7XG`8Q5sOumzeyy`N?=yB-Gmxe9PCI9zlVCE;)iFd~0ts zZF6*$YXMiA!Y?}ddyH=NiBA4OdArY0HpZlxEKERwUbW0B(uW_zBYfpqat4uECBSU3_Z{nm*t6mR)5bInkSi~YwF+2 z5IZcO%9`Ua;U9fW4;$+Z*uCP4VM1lYVue^Ti?^56yn>oq^d0rDRRUY+&XhuV}e zU2a8giAwKDnQQJ=M~&p!K46)*X=i7lXtJtQ&2NQh_4BN&@>a{S|GMkV2P)V;=#=YT z7>Hh3{HAl~77wx3IVy^&BtJ>>!xt~CqFvH$US!x*P!3$wIs>Ebwbi8^n)uXSet2?i z9jgBU82sVF$@O{e^`CDcLq_-9N$XD@Xep62Qq+l3_^SXZEqr2VlXvi!8ZU=TJ2lM? zS*^EnHL`oO)y!r|LkH6=;XE5DqkgW3AdF`*&q@%gZTUFoH|EKMtx78I8ro>@E0HYyMxyV|K;Jh zOXtYAaCZ%d*?;6fCtU}J=m!oh>iwZ()`d;S-W`%=z1tktUqT00=piGBl}x+xm%_0= zUjTOU>iBZ#txf+v87y+GbI_yi(xlMQ6AEOS9NBc6ln&~XdV6w@@1z00ZvVY5Tzm?g z#kskR<|9&W1Qx;t#V z39jKhnF0Uzkmi}vGGel`0$YdHlWD^F2sppwh_;;{;t;v7(mTT{9a^w#b#voNGm4&s zi9%nQ86Fs)04^K1tFaapH~Ae7HMv`k^k$;#GWX(p1#}UYX1Wap+h@tBhXZ-5Jog%( zXK5PbP<0I`-#cXY&QpW398Vgt^`aI}`?yQZ`LgXO0LBLQZ-puI|A79n4@#rJ(88{`c@PZT03z;&bMPXZRR4qV4V*a*>!26 zrDMdDhoK#L}q-_Qp1N?{Xpza}6z4$bTqVveDfKC_(jl{VX z>7)wM%Py=3^602P^tsocA-$uw*CsFPP3jn{6&DOK)BFX~e6$H}iCLlI!n>49`^8DS zyco$XAD!}Eug()};4;_~s?{4rHL`^csm$58`Mv9X&1)o{e=Y2JE55o%i4~9*`K%6+ zp?&;!ZZo4hGVtg~5?&0By3xQ?=NXiT%OF*P0j>B=l|=7s3opcA%T2$yq@Y>udC>mm zQ$Q9#yu<;mFCae9{>WZSo}|RLdn!RBDjQ!B`QLW;QOS>+IbJIXJL;^y7p%LZ?rs-5 zT`2*DhV-yozyij(sN~1Eq%xO0djW>|N3Cl>C;4E~lMYbjIi%e{mmBjZIY&eCs&BPv zO?IB2wFB5=UxbRh+sdCMKdBcMdTTK`yxW_K-K|oJ&6^V)1rBGw#QFD8O?|+?4QIYX z+?g5O6%ug>eb#jSrmYF~pRA|~@l>5;O}XDyFyc-KUoJPs2apFFG6h)u!09S+gE_(*`~w{^rxnU~YRG0{p;Mwr%cX;UaFf*i%I_G^itfMGARF=u_FSVV z!{Ie~J_E>b3mHAkyJfBC$JX;Wthd_K9ebYY*`|bsD$34cs7~Me?;j@i-`55mz}y}! z<_h<;_1&MH3oKK#gaYSOEm{yq{bgM4BN?OF(!%s$Kx59u^=$v1E6|b0!1%F?rZBwE zI~Z8)gW4iF=S2>+t(^JKD>it<=WRn10X@u}4Z(SFy#c9u-AXLfs^sg-H8%^w9 zRcXC+Wi&Noqth`*)O;_mXQjS4BM)B9NeBLn5-hv>U6PJ{rW%RWoj2& zHr4CfkXwqom+HNnlorr~sQJCR4}n$RrZP4`muBNNpU>T9tnjQfQj6^jYfS^uj zclb2XTkq43OBDi`@BsYZ=S8oHy*(*n%!AJL_{N~P)=$4ga-zB}0 zbu;`{RoCKhCp%oha#^&G8X(j%`U#*&vQ=;I^TABS_ukpk8abrtBK2f#y1vzi{XFq) zm1y}XbrRI^z0ZO1aA90-<*b7~Tmc-fMDd!$tew|#J1PmcDfMdTxF>*!ACwHx{o#WB zgo=E>-)m?)4!duDg5EXbFqcoK(6Z)R0AuSN)NHbbjBNNib;$;}8@O)L>biO`@A)8W zS4(qvP4uW8MF5;=(jsL?T7zQ)Z4L{N&x3P0+V+ zA2%5-vK#4f4xC{nO0Cj|@bwP|ew`aZ#N!x`k#0vTa9fAHu>QBzdTu@ur&pZ>UFU_p z&Lc78Wp^H&WWSy&7=(MIn1%XQkBqInO9(X9+9T|C1EO-(GK?s#b|xffU?Ln{jNg*f zvZ0)y`HRXGJG-w~5n=GbFg8_;qs8Ggw?rk9>nexwVs4$mvr;svuChQ{4ui^t`vKHm zr*pMS!tt{1vkGS+edo;Qky+i6DAX+8em<(_xPFJ<$2 zKey_Sdp>>#=l+ehJKHFwyx2yH?%ep~DcF$IZA$MCETuG-TS@wQ3Wqd}@N6f08B+Wf z5WoV^p(7N^j7kaBY58iIwa3HTM30J&UH(&ov1q^(G(%wsL*-n4C8Iq>nk#YQ##S zNTub}{;Y0YF|7rUO{H%>2|ptWKt$GKm^8*jgJLz`w0=WMyx9r4`p-zYQHD|Mzr#W{ zyakqXf6~v{LqApOki}cr0QzndqlWgUbId?TfR^%I%gVF>0&l74)1~IHzA~v1HN4bE zwq!t}A%nFRiJ)GbSA-DWZh-sW_QgsqY?Td?$hG>L6S87rVqB8~Z4J?}I_-LdtRm23)KC(b^~;7@8Eif}Z9m**P1Q{Rvmmf*5R5xp*JqJ7L`!qz&Zebp z&U*L5tCh;6V-Zz{niPhuytb>X`y`O3z2Davz33y5$N9J9=818$o?g<;H;)oNE8e>( zBylFm`hkc04V7rh=_JCXq)J7s7~9{&EzUohgLe5NKZY02FxKdQE#6xC=t$ZLPdozbK)QHHpP#pG zwHY7AHI;YzgaIheRsZ1QAVJbb9xfQ0iBK3oVa|*GD z`pfJ1tJXX-su;8hdIF(T?5TCa$YK1A6I30+RrR0DaHU+XhS31(bOUuWsVew;rxjYW zv*j!f$?(H7=3bLUW!`u71rR$)cR3hbe?)r!FU_Hd9|u>#MuN&eBHC#t+lj0GR7xuK z`a$epgV66%-*I2obaC_^BYj?s)#)tp7WMp?ESWgbLbFTS2JJL}wIDfQ^drKnh4rOT z73&cZ^k@-oDKK9co5iZG@&759KO7slQflV&Dj3kS-AX6K3Jxp&MLV^1@=}b^QPu>B zdh9IHz?qGmf&3kV(hB>#4bf<}*>F|`<3mRbo%_oC2VI23JoO#E4>W&gXgAII#=#z7$^|Hf zZh)V3y6SMyiICdJg(?37(4xot3RY*%Qm5ASwB0Km5FK9z72KdhT{-EbMwr>L+vC?| z78UP1%j{Mre*PUM2BGixRGzF#(^Fb-At_ z=`~khcCIrMe(V94A`Njq!aY6_f}c99Bb2)=PYML$FU*=~)etHuH;R`MzTnNx(5?3( ze<{~uLj=(3co}HctnsXmWL&qx6-lfa>1!z~Hp3paJoICY6g1xPV7v&G;ZD(X+z>_Z zdm#0*qk+us&gAfzYb`EmA7ClDoG-_pHusn@p{~76pJ6Oelm}+{gF1T~r%xQL_X{}2Hk`tt z_{@(UsUTy!8vAaMYK!x~Kc8#7Ims%>L-?>Z)D$@SxXf-;=!Ik|^twQA99bK9@!Rd8itm@-864Gw4y9nf`cqJL|I`2B^OY<5~T2>AJrh zCv{N4BP{mO;Uv0_d}kFg>C+8)G9o8-32C~YUoNMxu_c*Mo|kd(Ubg>mX=3^tJAF=q z=rtST`YHa_j&8iw8~KTOJ_*YQ;^h4Gfgb}kOT24n$O8sgT!Li_(|5Rc6Ty#yt z{j_8TYByQCc;)e+@IVR|Nj!s-C z5%h@;Af*k5+ZPR&b%46@q|Wc2B{SZcDIx?jn{Pqf!(M}iIqU8ihfxiId{ZCoPe)lE zL4*9X*BL{2uAwfqQ9;3t$i46qkIu-}FA4W!0rjvL9vNXa5K78>8>MtoGtebFw5Blx zSH=@JT^pC(9_vSaA%>qkScQJ?!!{62=vdYT^K$ZwahRRRAqH!~4}?w5ubvcL0V6`c z{$>^UK4JV4*mq3Gx|%CSs6BVUWu@nt>fu@p?60xO(W|LVzH*OF?S#V!Z(aYJrLktlga@lCTkP{-@ zMEDgBUBpPiQb143h=(Fa?26Rep>i1CyDBK#;bI+1+2 zrWIb780gu-nu4e;V?2cf94i%{9 z^T0d_knhY7L@sB{E-R^%=PUzZ2p;>5SOiAhh35~Wu3C=eoJc#3CGpT)$ATE~IGeFM z`29K=<66*D2NmiP;|p}b$nV1qViJL2Xs}0cpwR(pCl)#Z(4VVrM?Egitp{$L?7IQ_ z7baYy-*CEO!O41K8g(&-uZWdTq5q*`a6?D(+SnZ5i9r>YOEOa3an!Z1$>Lbjp8*41 zsL8B)2O7@;(YvmAaX0L6eKv8Fsx@a`n0bm6B*K#GfyHpOvR@p6HfMa=;~!JkofV!) z)hPIYrLV*w$AOLEZ#SHxIF_97jSl|*I;6ytTqD}crISUzQ&o=axs71li6Z3pA{vl% zkzF4!&#~9-9gkt(y49Fh)be0%En!9j4K%y{E=eN5A-+^1cIE=QVRz7%Wm+KawUti} z;G^T-kEb%@C!%2z5H+gJ%~0K!|KVe8Z~3Y>kS;kz{M}Lg&NYo9)jR`7gdYTCwG@^b zSUj;pJGxoU!!IGxPc#?32mRiafv~BpNpJ>K*0a^ze)r3;+pw}o@E9jhC%T!t`~5`P zYQh^*?m_QIanDRVQazhFq<*=E`5!zTpKd-oShsUo5}i!?Ukix63Z5NQfYO9bW1Ud? zU&s>C*0D}#@pM;Ps5w3G+To*%(7fxh3(1U93<@BKAUXEWLjfc@dm=W2O~eZg|QI?^Xw4o?)fd?gsHfG#LMmZo%LzX_v5WbqMl zQ(CjlvrTWA<(CVRpsIMx`ATq^t{JjU2Yw(L!LF5 zwPO?l>VyQ((uf~vlnpMAH@ys&;y1^Gn&m%R!RvBMqzZdt+p0er-+*t|8%lsre*0bl2%QcWT+1k- zUv2VH>)rY?O*&j}V?F1U?T;nPZUpkUKW?u~`7Q9jJyN8k@5Ppp?@Ol=hCI+5w=5aj z03XYIK(+@AQ{xF*3Y)9g>Yv4j-=;Pv(LdlfHYI3H{LCMlwG_~|U@v{%up1)S6vmB@ z+{g1`M9^cn*i`vpj@=MRd0p#FU0$h(7jf?@3R34}!J2J+*p&tlCzpOFRk~2Lr$$b7 z4-2=T%|CRf7_rt=$565B+1f4r@r>Ae%um1S%mn9KFiydvyd_>(InQDYu=ou(z2M=y zfFC)Jz2Y6zCZT-ng?%ZO5pijReJem5AOfu?i65}u6J58!M&2_FmNQ2ckZORqWw3l#{B`{qIO^)0BNawIb7x$ThwW?$qBG}gfq>dMGb{E5POg4 zyimUw%|SiZ(l<4Z?gkK2?pF*(C?A!p1dn>Wo2idMJ>F?>K11s;as6>5bItFkd;mN^ zGf*dy*}ev%WVu{qHg`g2v0EfpPsYM*4xM%dTW>!SI`2_7e;Hxr|~f2V@}1cd_AqMQTe$`v`ekBuaxQ#-p8o9=L3O>jOuCv zE5~sb&~dW!4uj#wmr#Hvf2-tO{*HI(0qO!wgJnPqIbghR8U^w61v^P@sq~BI2t;AS zX&oL@pnvCBlj&LC8KvZ`1(x-!=`0%88C{OHJfBd!26|@}!`|=Drh*24#tby?0;O*M zMdJ3Vx;W87dzdM{5nbxBBoM>r$k-|u{}c7meZTp~ivQ8oUprF*F$eT}@$PRWzS=9D zb#;=B0_wgYdcVDsrpuC@SB=X6TC|KF!p|6UyhyH1thth`H{cgiC{ItZaH>(6k1mEQ ztS9z8p{z8fXROA<<$Hj_NNeJFm`A%s=#NPxWye#CivNA8(0|NP>k((toLO5X{E5H! zzLx1r$)@GcF%03XOtk09MzEsACx|Ki?`4ItP6KAL#UN-wF}@bT2fftyJjQaSUo34n z(*NXQe1wSJcJJ}QjpdC?1X&(iGrPlw_sfPP$0`@RVv_TPe^E>`rHi>beEP+1=SeGw zxrpahx~BN}PEpgcG$7}Pza^(>aW{&10tU~n4jROpFpGcZ|_iCvSvhVSuhr`DEY zI>D3UHRHjBjf~3Q8F!u!)<}?-VFfRd9`2kka>K5MOW_nW3i2%-N}?J(65Jf&p?x!j zAqDK<<6*gH-g2f?@tmPwtlLM>^L?@auJ6F$KK;hVLHLzC=D(jce`henVhK~1OdURF z(8tuv<%Di+QOlfeZEbikuG(xyrl;fC^KLayhq@}X_r`k+ax61T)PdYE{4F6pr1n$D z3E*UQ*^4yTuxkfi2!4Daw>Rv7iC_YFbNZXPz4mv{c%j;oS(}SqXi`qA?4G%>geKIeQ+@=SQmw8ve(EdcYFm#;h z7Zl4-&+?o*3AB+%)ZQUFwzP%{M{71Nq-8E7hz4h&Ax#hWpB8=(lZG-Lzt4X^ax03Eh&{sPo2SVS$S5Mb^v1=ZR3T@lY7P z`hnwQ@|xaKsK|c6EA&-d!DN{B#?>{(?JoUsu})aDoES+7ahQa=%MqwQbbxj#Ejtuf z+m)YXoIPa-MA_Fai zH$b#L*J_p%6heAENFQ63raWzLE^bgIbp;w*20U#!BSB(J;d0!Hi5=W;^S z%{fmzN_F!0ieF=XI);>P89#p1Vz!Hifpi4cEL%R<5$3mf5Et!NM%S-q7J&}7?NFVW_+-ByPPUNBGHQoGKOE0WoP-1V6a+CZs) zY$utYQlS;-NimH`9O)sTHcF#^&R!0)EE6@zNj&}p{;K`n!YR6Or|us0jGy@R-?hLF z*E6lNeem$bHPGi*olh_k@5kjEe1{`6oE6al5e>Q+t8a=4A|ACo()zM$Zi_*}x+18X z+oG~m;Q)z6g%64bnb9Ww-rXDOZYRnXk1Ia!Zp+OMp2QQowP#kWGI?A2>%Lhjyp$4A ze>52U-zTpLndRUVG`Ou2$J}%KKqeLc^d%m-IRJ;OpY`7jiOW4yjkve!ze~;zge#%U zGv)eM))DvhhSm{n0Z-Ilc8wClkRNd_>s?p6>(U1|O5tkZw9!}x`xfr+p7VSESq5}w zXb4Bwj*z;FL62RDGn!Ug5r5TPoTE%$3Qk46?%R{s?5#wP?!-OPR|tx#h?Wz; z9hNeu>)HveYqNr;(Z!f&4!6c02Osg-SHBR>*SmdnKmmfe;uXU~!`Mb>4M!fu!X6px z`#oh%`XGqv4W@NbB-(J}LmYr=PKGb`;rvl0`SUz+{j$L>#kcgY&PxqI{s|WsY2Bq3 zH<0GnI{n>3{b6GkXHDb0vrr|!_V)o=yZhq>_nG_SqxzDlgEqM=k~%yQq5TX$vjZa0 zjT!x)g3(}10-JW?IU5e3J&C$~sqW$1sLM|HFW7o+VpwF3yzWMg61lKLev&?%!D!7d z<-p6CY;6Ed-in6a?BI7$lh`dHSh8t5kOoG9Yq(NND==>JCv)A2IT&Q{Pak?XU!TZ- zF)7*cg7Qv6zu=<#W#60uoYiLFsRliHp=u*khFc6%K0hu-emISZjcAW+u*gi48ls!- z>qfU=Ztry6*We!`tj((20@4)vxL(Z%XwK?q)m!e<>6ikg*^S!g`{8Yoxv{xnE%JJw)K5cgLTdWj{v>8B*ki5xXRYUFG>BFGrsj3tbp&6h?mT1>5uszz_tgs$VHpFtI1Lc&6k^e z9TM%>G+(c!FGv0koZnba1LY7TertmO9x3nEe~mqOp5AvpShmBx&B2s#Vlpr2Hc=;# zQ=m{!-{JG1cU%5<+&mmZx=wSjSJJ~fr0)-DsJrW2oj}HTBoW?%{hfimRGSh)fcpZi za$j@$3men#Qw}v-V_fd`VWA79AU`&s0^)A1(?^_h?7iu+6z@ROF{mkePuNsfe5%l2 zHlu~#OfXtCg*OUDd7M zg{f=e)DGEUvcXN$TCMnTQ(J#Z+^EI~%Q7Qm9FN`B{I%sp`S3^~Q~_hKfxd0pU86hr_p0*zbV6RB5hDpT@N3LFJO)REb%_=Q@2BMEWB~~xb zZQN4MY}y!QRhxQ_3WV5=({3nCNEJnU8w3-kn#4^@a38h?w@Sn0P(1<$3CXSx9zY>jlkZ&FLRqsJ0fIK6h%Y zwkw?g-hO|{a|A!V150z>DVOgU@u~b3LX%z+U|pNJdfYPnsyFRn`7=6Z<#O8a{KF`t zaxaCfziwvTjVg5?ka;Orr60zm~TI#sYa92zB(cuY3siFUyY{C9HRspCF3H)bzZzqxvK}!_0DQ`@~Df zxaVZEW=j-n0In5Gw1eyR-JJ_wONK=;WJu2ZL%^nHQf1&IEpp6zUh}+o_x8Eyh@;mo zey6)zk6w$7((K;r2=gBVlpUFEhcGlBAqogWf+TDdC0&0nRZYp5AR|vD1FC>;UYXas zx;m3wWb|wK<)kf+C!avAr6%`tCnw!Gx!1CcXqy0^_E^P5$OC#t8gr}wgy zlFpavwllv#>Z)*nB$=B&dFT}yr>oUy2yk-HF!?S-L}c3asZefS z-K5H+B=dLML92AOPr7=cnd=xUBLP~*TP`Lee{PSE;@3`^)tE_~eiH6+f$3p$4>3u+ zx|OX^g;BDyaCR8IvYrL_h3F(H5F5_`$Doy&#wWC?zP_|!>cyhm@wGImh+mRI|O}a_TZ7zJDYwVYQYbi zY|?@Z_1vW?jicX$fxrZES5-x5LQQCmsWj9nnJk!u_H}*L$^InopWaGHo#RVN6G~SP z{2Xpy%_&z6Egi{!Rmn!InWG`GjqHVrl#P(`EkY`>I~SXq!N@Jc zDqN#iT1d0Jdc<8S*7${{EsT)Xgska_j)0tGuVD_2+%GQv5x%zya2tEIfz#N)ES&bo;kCnOgZwt9kDLI zQ*^ZFFyv%d-W=tKD^m@2>?~6abF40Jbc$Ncn`!qGEtqNbW95y>7BL+;9E#}3Cv7IA# zV`bda`O5Vu4|C7*G39FS#u5*IkdB0iQAn&x}qfqa~0ji~*t@hCf@3 zuXM;x`sMzh(6toi|Lz}{-PA~Yq!xX-IOR!}y`z@z#Cp(TNxo1zx*!PbSb}YK*lGv7 zo4#48#BiDIHxd5|9AD>kZb?bf(-6n594ps|$!e#D`CZBh(Yb2p(_#vi9j_WDs7yX{ z0J*W_vAuq#X^rVQqf)~XvVpG#*YhRz2W1Z_(XEO7ypE7 z5!Z-9Hq&qe^>&YwF zqze)#8tU`0xs*oP)pYP%CAHrA^NWbmH!Xd!_+;G`^7HB~lckjnFQ_T5*I{kPRAg9b z=%Kzm }1ik3mXz3bI=EIrD#O#MJQGO98l)V~#6YBpbKB{>#Sx?}3}OepV2O4u=+ zVe7EA9-d|{2DY#nYgOCSnH}FTH8ZgH%RH*VhIxTgRW=n;tUO04Yw8^N7%MJZZ8GXA3BOV?7GHuDwP#Zb8 zMEQ!!p_@yu8Ui^6co6rX>)rrfJl5Gu#_NP1302ckvYa0JnZtyBR6?bN1(fGhE>N~} zHt%C(dB%ntQrXIB;_YSW}m5u=xs;uC+P zS0|1Y`EIOITyEm#!{F~OzzQSb@gAEcN+G$s#_c>lg6ox$I|k>!31@)nBwR|~C_3AU z1^`B}>x-q#5K9sMgDx3Z^=_1dlb8-yRMv$tqu_w=e%>FttRwQ#@x+HZG@2Fr%Pv|`&-0N$|dD-8;RlIw>mdE@P!=juh?fgs3_7ZIcm;8`U&5y%Qcw1f^Iww zgunH69aajkWw-P&gHR<(EmK7!Owsu?XQ@veL*5oLPTiwVy%ns>6gMwfiBpXimK=Ce z%S$e7@5`G@y&NUoT8AmO*OjXDgvAzNcK&QkuNRh=sazobJNYVq_Z}m9T|A;!kjqD+ z=i30(St~fO%8Jg?g!%j*j;;c#$?yFy7!wf?5s;QfQbIbE?iNtG;Y*Ef*c1h%Tcnik zPN^X!AxJkH-7tDc{rCHyo%fvWoV&Ao@AEvLxbMC1D)suRwCQFUSW;?oYF6(cR44qQ z?yDMs<`koD@r!;MDGQQK=B#J1A^{(D!(^@2x1shjf24n3m@XdGIJaooU#A62_P;0( zU0^r~7E^T6zVqn`rn)9?$sP`=QJism9wc#DQt2~tU3j7o>)_IC@uI72?7jPTtsf}) z$Hn=__wE`4^Z930hAb(^NrWk5zFC^=3sK2bGefRggefx8D@Fk(4|x8C{OB{r0fs6{ zTA1+tV#xLQXA}3>{iu!isnMP5|AhNxeM@0Eb7{>2Nw=5|{KoF$SD)@iHf(Dv?#AQR zW(sbXpF7kp&lawCn2Y5&PN2`nJJz!bKX|&xSD9S#8S`!oVnbrtOHf zkxCsF%{86=d##&K^SfowdFXJo?d(3zyK!QuorpI>gY&ZOqf~5tFr;9M|MYwitB_lx zobJD(xRFEhU~g!>4Y9}^uU}~H^yEr3wOQZa$#7rL)I+5d-8NwQfuf&5KLEUzwBqlFibFS*}FN+<$h0NyEV7XQJ%F<5b{kv1b4n>u;V^N zDtMA+?6Z-%<@GlY;q!lIQghM4{=~)a@;BO*!2EZ=?P!G;bJ^D%W3STjr5N~jbM)=h z9gn7LmJ8ZXGt<|z`akF^1s;Lp)DHMl)_t45kChJl?4Hx$S9&{M-2hWJKNrJ|I^ z{tKq-H>;@Wm0n`8#O(D}F!zu|N={y%Hak8yj1I63W#_519F z2|6}8*BA=o+qf(vDFli{KitYh9IL)*OlZ zZNA3KKa#iQ^>Nkd=K+#+&yp-$~CdX5y{Lo$Kiz_v|HxX0Jq*W!|g#>mu8ntwi^RLJhAu zSLf_4t~v^>QPuNcdYYE?;adY$2x{%8NqY0=ta^X}( zcGAk^!7yF%PvYv^!zj&9UtGZxOlMt&$)PLlZ!H5KtQ)EP(~oTli5?A44h=;t?lIrG zwio8;+LhZc$Tvzy_H*nzy-%r`f(-U>pMFyJ8_6|I_cjh3>5{&d-T8U!nZ0J+IlM9G zZ51nJ)aOy2`Y54>Ygu(SunrO&GX4BypjoZMH{lTSkD`rELsL_o48(ID>Sv0nZi_y`&zy}?S!b924|-Fy`#ObGj<;z{UcRGON3n7(8~!@VW=*M4 zSq?Q}AFQ3(+~QbE+vKWKLNhTEW^1LM`kloJ_FB}@VSUt6Ew7wWLR#5xo#u?rwPg*~B@^EdS=fCw4P(DD_%>J>5CDq@VR4^B$?<$9}{x*#g~! zRiMM%$oAhX~>!ie5s@Hm0(zwY?FSu3eO5YwUE5bK|FRb) z67=tGQ&eo{DVoNDrkXnHJDp(e>${0NuLtx_yc4|Rg3Ss9f>}pB-*VmG@Wyr9nEyAr zr1!p2hxgQ3hd!t4F?r7VziCXztMdD#TBoV{zW!$Os-gV*IZc=Qrwz+A4Kq?DL-C%I zZN7}EIXVKHA+-j-6)tqv=r+z3gbg|Fe;Q4i5nu5V_Vb3ZuC}yK%U>RxcG}G2)joR&go**1S~4ZGs`&(8lz9#`jTvEOgftE==AYo-?Yl zQh(tmT=L-v|93NsUdEBrzExH42`$gHZcFILgTw>b3#C__W{;9iuf%d>z6OVkFwnjW z{flZA|BqYmM>M@ZQP!pFkXUQ}L)6EC(T!$=L+gcP51rcC<)c)m`o+Q*p3H0gm?U5aDB`WEOm^D-)7f4O4sl?KK#X8`GS z72@*wx-Bhwz57(fW8~8%%p<4k;JqW=?^%ucPm>kVkSnpF&!gOEquA_$t4BK$HX$ua zU#~W<@WfKEC$jZ;S1XN-KSGPTBw9 zoZ%&Enid)pqA8h>1zVsl8qQ>Da-4p(kom{hC}6;l_TSv!P0wP#QM`o)Xv8J~jQYdIwyJ1}z|7nr%4K5L_X!(0*N!db;j0{19qbEhLgY(*+h1BqQm%D*lLjqw z+^S^kJ@Fq(CEYeG3Vzk^x*{=b`*RFRle?wwuQb7J_p~lm_~ty5Z~N||W#K|h-F@{| zc;o)yd&jQu;oLJzq2wI4E`NL*H`8JmcvXqkQOM6WV*yp>s78 zxt)H?8x=)a$gf>HV7ExubmuX=kqBIpN$j*wtZ3sU+v)DpS&XY~Q!T&t$#Id1o4B9% z7dVLYNwGv_Y&09LHE-o^mG(RLw~NIFp2r3f#RmF{AO7)Pbn;rv*lM0xZ=RuLGQM8E zroDVmcR5dcsT&)3N_R;icE|%;G~RBWIc)9^RxIQ%S-j-A_BgCsi#_sF$B~JKsh8;* z*Njo*+JxxZk1ik07yWk|gED3*Tgeyw=FNRXCKLndH&mwXtCzwX*{J#dg7Zcn>h$E9X|?aU9g(5uoTarFo9h z8-l`fa#W;LI)|+39qs4J1#3puGv5@tPrT!t|BRzmm3NemWK-fAp_g7B^vhMG7x$uj zp&Nc|TV?ClzbYH*@5)gg=63y~)^A}9!R9jt*L4Pi8$-t}x`kB+xO-+nt4vXTvW zLJb45tJd!XSx+WEtw)woN>tq*5;u({GxKz^?*{aR#JH5bOMj+6I6cyTo3TjQeY4QH zHWKhBRk5(Pi*Uw_p#GKsY#|>|5O&tyAqWxQV^uOF(eEl*pSd&jn*kF88 z;*re0HD+?QU*o9XYI*-yF?>UfGUi2J3EIu^yw{vHB{bV?N1RKE&V+KozoJkvWjMWXjt>$4*39S(4CHk_#YtV&qN<6jaeP4O|(g(FTiXwp~7aI$1^X=I9q zPuP-qD)tKMD&B-HHY=2L^m4kN^rl}&pHRIW>^%IlcfEMGdU%yDa`&{m7PR_=EO*)-XG(IEbrwM=Nlyz|C!zE{8(mXVACy4KkH*{ihgzQye z^~Ag|W6lJ*FmFWQ#RSjbSs=Gyquv~Q>w1A~_9;DYZj%1-s6YwD=m!1c&7ox)#tHVf zXIG+?f_b~i_rd-rbSeMzejFu)GRySUJRWtKKh;!C$IhlQUdl;QqPVk$)hC5tVf8akz8UCUDLrG8K+Xziw)4|ujoQgR%q zyb!$DsL^JVn%yZN$zUF@Wyq)+4s>1Is&^FoGjm0g66tMo9h6s35~ww9AujXZ%K`0F z!N*%H10nATq>~^13n^G!vz4gyx?&5gaDRSz`g4S%W{pHVFx~q3MSJCKjwOGM?#gjf zS%{@miDe`EjIIk+_2Kmi&S2eg?(WNV^xyR~c8kABvep$tb>9p~$9i{J2mSPY6S264 z*%|b09>ErqkCwfKNhNRO>&ZKrE9A>^INM&AlmeVqD5O=LSO;oTU4bL7pt!Uv( z^|UM(+)S`#v+h&3_M*1NNM4Z-wy_(Oo_9ZEKj>vTXiZLEL;H!8OeF6fwdGvHb{0eW ze74_{R5hL`n-5(K2KLjG*OybK)|s^0{H*Lipv>($E&JniYN(pbRedu~j>1>}2@r{8 zuL?61_fjCF+@9%TslGv@yGUvLa-4D%2J*XR1_imS;F`V{(|DZkJqhE8M{fh2UW3Z<6P){M_)`U~Jy`^_j$lHI8 zV)m2!9D4@Gk<1xt`kNQOLjIf+drtoQOgqD_5NxxLY_nfYnQy32x@h+ZjZIFG9MZkW zIa5D;yLrWyb})C65}XpmcEDJgt&$?9`6UriQ8gonzh8A=)a^>?zB6<+EhVcQ}h5NtD--sjkqvP4+v?3Up(h+=xfQZ&8mOq(B@IEzfSXR)4La9sb-xi)suc%NyCUvB2hS>jLD z-UZ(N&}><&8%n-!D%+-tE1PYa4ZLga0Nawe_m4?dF>h6_i^h%5T9ak?zPnr*lv(y} zkh+p`WUTU3`cvkvZXL(Gp7~xE(yzYXxlV7D<~(cQd~ZF&GjbjCv4(!Gk*A|l_pnAH zjXBu2@ifYPdBH-=J*VgLD{+%&B}0|g$Ya##+s$_RJKm!d&UpJVHzl(R`Olgdw0A#I5}DAA{+BW1vpuB1Q5zgY#4km;F*7YJ(oitxQ0c;eGMJeEo2a^#v0yYKK(^E0 z@Tbh+)1cG7!l2X5B!N_ETi>Ni(Dd3VT~Gk#ieB3K`$vZOTzCc|10jQVsO%@Bo%fmJ zoDBICZGhHAk0Ju$3lYQ^71gw&NpnCRBDBB*p#`P{UxEw)_r#0%H_(EQh9MM2!2SF) zuWbF@0B`maTl>{b-7GasM&XRl$8mz5Gws?R8W8U(e}0B|kdD zg9oE8su)(&CC`t?0M4<#h&BeImMofe>y<+BA1XP+U-i5=WkZQSW62ih8dZK zY(;FmM8<*Ba4!*{jKau<=yog?FNC6*7%PUGQ_flvbh|!1hLD9FO&RINaUeYoh7k== zVr^BSZ8`h+Sn^sW^o(*PJ6w1JEUkPI_`&{q4}toAh74ChIYh<%^+bmPi(*f(sz5{C ze>(J`S;)~OX-lDdjT4EnHQ!g5&)_ zHCnx(L&3+la0{xM^jpp+GtWGlYFToA(0A*gbhE3d--<>57<~qO0YE%nn#&6^g zTC#Jt@$Vw`HzW(_nf-GUoPn;Qs8a^LzJNPxN=y+;9HFF4;yqhIh@#Iww$Yqqlj2D} zcn06ujjC;=ZYN6%C{*F%L*IqdDh*b&!C0O|0xk&eWR^yBLJz@ri1i41XZB;r4f7l; zh9HrKdhh-T1Jcwc4Jnh5`M2&ieXxD@)S3=iq})Ln7~;%;p-M!tX3IFW^_sq89Swia6{>d_5s8YR{$~i5KIi!{JMSB{j@qhND9U>2Be2B z5=dr`gS9|DU?s5H-@F`9IbOEr8NwbQ0vg3T1Z0D0KaDB!Uzws?khVxdco~8fNsm@Y zCLV#&!niR{R%t|mqI6h0^h2~U+!Ps!yh&bSSEy`tiVsF!<>A z7La2|rs6rMBV#>`!%n;!;75}}62wFA zL2%C!Go*iy5*5f8&4Rv$^B@hz!PPPAL?*A#5QLF;ky0pp5RMN1*2khc0-Ug9~pq}2i$;))>PHT#)kEg|}0 z0P)SE9YR08IS7VOpTSGloT(kqsqO(Z1qU-%H+5T`(I7-3Qv{!$t70UjF>Bm-G6+MrYf zV{cQnEgAae1nQc1gG6bEpx1h4yv>{^AUEJ+gr*Ps7*P6+58vbIkVHt3g$V2!4D=yv1?hw4 z#{nfHOz6XBYXlE+4eI`34~M42FI;y<`w?O0!$rb2(piGG z$m~)5UAsY&OvMwh0VoaVR^S1jKv>;5MF@R+|M~{7fS^Mv^vGatkq1bU_z<{SvB{%YY54$1 z$k#z|Nb)|upU41J*NPPK1u~BG{(lGxx=*qSMzbp)BDE4EUw*h2Iwr(r4`uU{=4V*3 zL8yts4fsC%1lS44j6i$7f{A0IY}k=}2|+JkUJ1;RVnWa!Xs|v5+EAGUS*0uWxIQFi zoy0_I1IWO31!iCjc{w}xdIQ`^un!E0S`X_QRpg|^y5KH4G|Qu~4#ILsNZk5^8|g9d zT?8)KWIgcizHS4X5`!KK-A8AGLp9IcKIAaA14C7OfH&k)&^zj{ap->{`Z8#@fkPZn z{Y0XYmYR_F+U*F59e=LX$DAb18D}3XZmNV zSx`2Rp`%!2@J_FbJCJF(QgmIV#B%OXVX5b2U@|*VA3~zX*nr^xW4J$#fASDza5+RP zyc?cJ@v90@1Rz8V!I^Owq9AkuriXGnhUWlNfm(Qnc-eTgbr06~EM8#rEgt&eZ-BE2 zOb}iDb2zMNK}OyePWtN;V}j7cXrtVyE){|es2ScOpzT@lGKmbR9NLkB1!?A=Al$&I z_YyY`rbw_pgV0R8eY_5EGtI{=-zT@M5i%T7nE%jT=vPQ$bOW*ixfj8JCPL1W{1O4q zfZUh@kQpV}3?F0|r4cE}7^E>=@MXkLB3x~oCGx@8s*AymvKxRsxEjJUBGdw04ft3o zfou45fN+-B1ZpCGCbJsT#eN5se{&AKli0ZCxPerIuy1hOz&JjkizUp3-jJ-4VRg_H z=p`Kf1S%grTMv%L;@`33kdaLOk{(M~n-SQ?9}0!B!e}t3Ed6m^pCdxi)D|98^D;Y7 zEC42mc{5IfABXzBg$$3>LNg;%kZuWP@VG?jJFDl@rPDO>X|3unH@>VBdC!2||w8!U;^-8sbkG=%L$>30xJEWPa)<@fKWI#6f)wBFf zFc(}2Eb;%rh9Liqe#em@9z9sy>ZJsznb=7FioaNjSd`8W1QWxspzY8DLV9;%Zmxy2 ze$+4?jQSvnBw;g+A3cl&#tj4E_fq1j(Tynt&Wb!oMn&MVVgqa@8)S_MdQpJG4qTiI z{uk>*fEhk_A38t)$3qV-SgSL!_+}6jP}{c?a22o;Xr{ISr~+&L`hF9zO5?``%jnZY zd*yoaIa7*){h%-~jO`eh30Z`e7o2p$eV``znMAZPZ|-PI8LAQ4p`-^Sq7YHaX3|;Z zn^1yVaoDSB0wXVmKCl@JMfq!NaiK(r%fK-Jf8ZW)FQ#; z$sY|lg!e!(YdCJoVX;Shj1$5jFn)|6k{me-YDI7j&>t!V;-!M_p|cO#($0uYG%ij7 z|6DAnFlsEm=wRGeL(n}94oyAm7%rp+vg%1FvWhg+yh{{52$hzysWOU)12q9e5|`m9w%{r`oah3%GPQ)z9c1s5V}mWoVS+nAtXwS=ZJl2Q zeG@eg!4xGQF`l7V_|U?Me3%&clR!9WHkf8b2ga!8CHVjqm{A#Q z#|^pKRu(xf{qFIL8-SoC21qvLnPiwdlp*b9 zt>LY3dq9#_ZZMfCdJd<2JmCvC*|NIiFe*>t2gHdrjpQS~2rhUE(j7^G?oDR!Bfvog zz~tiT{3{p~Q-K@{h465a_)+1o`=EyeGbPgcGfc`@T zlQ&n0m>%|Oi0IBy1Owa_dBp-n%c7s)@bgEcmfE?Je!CV{fGsGB#z_6t_LI}^$cjDat1Gh?~3(M z>bs%S;OEF!$UjIva1+q+UBkA252^gUzgvYX6=n}PH5%yTlYu}1G=qW1U>FI8wDu!! z50N|+%QM~`^^Ec{9hwcNyf1Own1OIY$l#n219Qk-r1%plblia19Rw$UfHx2v@Tgfl z#5yGk!X$8>NCc^gUdu-XR}&->Vtj4*kXbfbNcLh$^u2Ct0Koyh5ol541phAO1enA2 z54rVw1kM*Pi7>TcKvLpdd~na!ki!vj2kDwfiFuny29rsF?z6T7$>iP!Bv?MEe&F}C zn$}OK8Z7#>87TT_7EJqQr?vgncnNZigAOB)TR9j&HXz4vQJ8>Bw6-@)<{GAm(-{FJ z$(nE8y197MVQA3-IOTDGJcYL+C;|O#pM8kAA!c})09ulA9B7xp(?Bx-lx1wvL@8e*c$dE!hMRwBH8{&jBkvydzGmHvjw@N8W)C@6Fxq>%=E_urVCP zcnj`S3j%g(c|h*qgA$xSLX^)TcM;=21{&4i_p-NP>j7S}F04|(&^J5q&Rh?~0uBt^ zRI232cHMC+3BHzZAK5KQ&=XNdKiLBuVBe8{4ON%D z{kZ>dR^wHvRQ=t_}NN3v0BBa2tBwpA_ge}6aiKJI6=$+3AL1qOOPeVJ%k!U zU)A&|XJFya;RCh18jg%NRi zo(H@Rv4p8-nC?J=e2VeK;Q=a18ZHspX(M}^unrCSfEDHXai<;x@Fhbb zi*R6U_b`pmZKcd|Dj)^snPs6c_WLKMn_oIqn`hWg`@(NKr{#i9PZw{oDYxJ z&Vw)E0-D#Cy98jz`ObDxT-8P)tcz*UJGim3;Pf&#njVMbtAu~EizO}iVFVZx+p6OgcP_8p;haQ{VYt-GbO3XAw$e0)qsPiGm1WtQZ&Ey4X;05PCzO1Z{&p zc|tM+9D+;04Iky*J|TEZypIF%4YOozLvRtG=%#bC10r6zs)`vfsLtWGo_qG#;=77u zST9dp8xW;> zFmD=rzH?!5;Wy&IjweZzNLpu;H*D#VEVV2Tl$%FCe?!}Lsdrwwd+y}_5|ITxFhB+F z8BA3eH@PnTJd(oM9$%y{MaTVv4KV7`GH|68(h)e_eWU1)gP;u{isZW_x|OJ7wCj@I z85(rdeGyta{7*8LCMXnmg}kIBB|$OL=FAIlMSEfB8pQZwlJ0UT>;+i#Gy|A7DuRn2 zbaZ{|^xAo1Uym+<{Iaf?gNZwtvdF6{39;rHz_Ch@W?FPQbBv}WoB3T`AJV#J^6>8n ztn=-G9?ZAARml!j#mhS@3n>eF*eGgRYf?ZGpu{xAeq1*h*XXfK{2Wz2k@2t~k;iY~JN>XE{utQ^>KB|WKa4m?5546R=pFn%O__Cx*%+}be$yz- z%HlD&Ve%nBB1vSaIDSX9=P%wg#%yIFM@Bi>)kQx6DNG z_#XqlYsWu^OiVcqny*#^sn|(B(Z8i&w9*;uU2|^rEECOp{`u9RvKOlYk8+S@ioU5l zHMxqAmPR`pxNad*v_=jt(fz3kQDE0lT>VP&@8+4kLa-5@pv{mJNcXMkmsL)pXyc8W zDjm$kjQhni5<&IFD7+9wXcK&VWfH_sfUz3e3wgqak97Qb7K*QaOQBel=qSJH0%ZJ2h32X*^CZ zK5%Q|PWOtJ&?K3r{95c=IlOM_H}eDU_l)josJ^^X=$?CdIWaH$du>59Je*w}+=UOE zp5V4w%O~k&B93Oadoj}a5nCLaRx7t;M^>--J;AmrX`4{t*Rh|ysE79aS)h6wt?{;N z>D+<9!XI|v%i50!UYf>?Zt7iS(I-HKCkCgCh-0s>Q+x&FQHU25;zb`D6saa_bU3N{YYQCZR_h(PiaQn+I{4m`0Xr_#zn^ony39W$Q~99z=dtTOZ=dDT z%Ce0)2)Zwfl@C>mSsw6LEC);B5rVjXrbV<D_-G_uEsEopIdOrzT$)S1qb!hkSFf zEMIV)ZqSe7WRZunRi($fP>*Yu+6k0V9!~uItocv}DBWQ=FZU~ak)W7)Nyqt)Ryj21 zh-2E3!}Dnwq|f(h&6ii#UletqPI(U6N)_*SH%mgHL<{CUorw57>CxY-kyFap^k6o# zh)R4U^YyKKKT(%r^nowUuTPp_^giY7LwECjyyXc)y7Kd>@39a0HftUmwY>zBjaV|- z6ME=(KmJOjv=a4jKbEJqg5cDHiN&s^LcYh#UWd!OdRq0P_*1i;gB+`w1WOaxhh$bnHPt+r^N6s8fjpw;@5-bCBI2i<$?A7z=-cqs@e3M{ zzE}V(-guIdDUOhRY&b(`5?^2_@M$zt@&`VeKxJ{M^0PKS*)>g?c{TU z%dQbM4)O7PhYBeX3;n`WCbq$GtW*`LPAJUh_;0KuM=%WEahrasI^cG8&V#xmB<2@w z$3)v3$^4a+dV`;9QL89{;^_iI$C?{!qaXL}Ld-dYMP$`Yc^N$XO<{)YAJ?-Vc~kX^ zD{OOu>D2A4-oci6e1P<;uR^rhNqLdab4xZRsHr!d&BaN@pT=Ge)YvhH@i5%fV!%kI zGuuW>Xqnpc-pMJ_7xRY)@!xoKihB}lnD$tPvpQpE%9q8chXv&_84ZQBs7&u(aok6c zd=sg2y89?gGx0Shv*3rfhNb<=ehz1Of8^HR56J7U%8j@KV<4df;4Y<4!!fDjx|aeh z{B@#5m!|&5T_%_+@%?`cg&u;N-yYH(Q2D(g77wiXno4T1UA%2G@1EZ-`>gl9B1%ZFe5%ClsI)=$Hi_!T&?(*&Zog<{5O7t)S5l7lXKt| z?=Fkq(>t88cM?Zf>X4R`{3!p%2U)%Ps%^+^}I*NyRYhP{(&XC{Eq1wXmSgud-jhg8S6i3B+<4RjNwE z0+QdodEF4Kra9>+K-*BL4Acx=$j#s+WqgWOkS!;B5G!@YB(Z3l$!c>aYA@(vZ%5Gh zugZcTNd44!gw*fO_)#H6(%d8O-fj!xN?!)65e-7g!z!95TV*r>Z>n6kAyM9Pd?kCI zi4A}9%LTu?#(S_InHapnGn9nd7*K{Ss&`EihN8dUiuned zYnOds|1sXlU(T`noY@$lbDP}1^{s$WU8*-Ss-C!Lg0XR=)FI=uVRKrs^PQun0E^0l zBK}F5UMPFeGie>Gm-})oit+5THuU8esFY;(jC4CmwsfICj|MGv^0}byHz0UjlB9&L zrAWEC<8y_`tpO*gYnj(?I*KkITYqz!iyVWwHlH%eN|pQwL)K_fRA?)`vhjT|<6SG{ zaNL}3j{jljXuvi!P+*BhIG9Vt!iyNV*THwGa61<-t`cADQR`Gm>3%`0k;w4D=`2pS zCwQqwURkIG==l3j@L8zG=O5L`9rV&!M-LAhaM6E+0Ii{$@z_3gF zF;}~+&w2|Vwb{rEAmwuBOyE7V!a>XaSL0t}e>8>NXV3l!2J zMXKe$K!#T2)2h^E)%b>~joElFudTm6p6JNlqG0mVVSYVYhxq=M4@vv4M2t8ltVPt; z3P$^lK#=+6rYJ_*SGPNzSbz|caX+hd`-#c@PIgRfS9WYgm195V)xDrmaoU$Ge^_7HUo%f-UQEctbWXMI)xIoKO;>i0%$tHx3D%L$ zEL__xaT6!@hIN1V%$;h?_oTj$^@ZvznI5^hrrb+;eBF{EpI)>k4sajj!@gifP82LW z_A}4I|84L_2PX%-_Gx=>rSvZPY5NpuHeG>y%Dm35-=7y&dH-ge&@ovelFGEyu0*Nt zJ(taIo^0`jwCD4N&{g(?egTI8NIF*DQ|!GDz}~;Kob~UY2j$9IO$FpfprDf~UNsViAhXWz^F>yYuC zQSNIrtyitZk)K$4h!Sphd~xfy%;|Wkf#_(9>K(d3C4TQ1hXw@aNdF~_eV(oQ~%yZ&GdP9@t%==CR{mspv64Czl_u-7SEQPmZe#l<@(hVh7`Y;i>GQr z!u7(XHgWjt@>f)PYWi;V8!2@{C)80wMS&K+jU{jEOo&;(5az(Ge|L_*PNCcrCB7J{ zzpdh~8{th0cAcV@ZO>-OEf6QIx>!sZFyuJvRR5vFA%PwKIIm2Nw(Ncyy-MZsS7 zoLZ&ko2OgN)x_J5FYG#ZUnswalIEDd&A)e2eclV-d0;47Ml|_hyo!_QoIf{(HS!Ti zUOF^}5w2L1J8Erk)nIES!xQTcplEMYCy`#>JP9y+K2*^3kHz-;^68M<9wF6D=NI%GalQ`vA0Naw%YWTUM_Wl-c8o)TF&ss z+G1^^@}I8|0%aG%FDxjSb|16eOfm zXaMs3=lzzH`n|)MazE9U8Lf;4aCcVelSNZgvslOVD?b}!Eu){$|A+^_Ot0b94W)rR zyPjN}?5ObHJ2V)R_H zDbi-%adUQFZ1vMz9gB<+)YxZ*$Mjh*WmZ`h@72XsT} zTwk)cwY2;f?foS91Cj8jaPre44t~`FCDIzB&8Du#2W)ioF=b#6wrv%9JNuEC@HNIr zaZW}~ajW^y9D-Vl#ytI?5 z`((FAG2*YpO+@o>IPzy=Kfggq0B?#uwg1!4-1;Yy3BA_n3ffg&qr?7KsKPiR>hKUZD)NG7U#_5PG&66b%A<1Z&#j7^YR@#2_wOflbz za~Hq5Fp1!VW%_xa0OneVn8pSu@e;+-s|II_bBh5bAH# z*vachkgu<1YuGZCDLCIzVk}p(*$r!s4NGK-iK+$sDS$%zoRFUH1AhxC<9a5$zOo?e znklw<=w26FKR~!H&F#V*C6D#DvY%*x<@~}*nO_sd#V|iCe@o}r@^p^dc6LQ2T0D+) zwo!<~>ucls2Xgmc-c7?XRuAV##j-?yCRZ1aQ)t*!lc22P-SGs)zvx1B*$&K%V7V*Y z57<}XwgrEp=f@w+Uu5wFI+o48nKoYDWv^yzY)yCI)|fCl&}IeZD8SF$Pm3DiVVdmM zx-m6}&$e~4g$(T2m??;89uc!XEvvU8Vvfz6(3jod+Jxvf$YVvqmX{-wscAS*1MF zd&rRl;_1m_YF(CJUj=CrmszvlmXLA9yxx_jvuT0qiz6n@OgyIe(-jdT2(R%ljp}J{ zv_|~TbPBEvj6NY&`q4kicG-o*Ez2Luh9Zt^d-gw;UyGyPPdYQD%=M_2Gmh01Q2Wz= z=gYTjsTf!I6`Jr#Fw2Gfl~5yaLxxPo9RG=xFkC?n>}JayNNK zFTBW}SybssA^sK5CFXOlyu!yafs~Rb6KMRgNh$SfKmX5B`i?crs&&zKqJbORwEVqY ze$684A{J!})l}fTr@)HH{*AJbp7w%>KVi^sNh)9KZI|y#>ZTt_VNnc2A4dLi0fJr# z)H9XYyf3YH2;ck`rbIN;rvA7t_$rEmC}@7Ux^TG=(2=HLYi z9|w+5{LmAx1aYJ+BzWU-UC=YYRQ#8Z58YnOqgNVv=3j8%rskpva(lbX!PCA`48Q{t zJg7Oyqw~|kGajbz8zO|uAA1Kj`Mj|SX9W|QOdk?Bqb(}DgB*|qk!*nqEX2KnwJ%dr z>08+L<^}46l>(U!h%@nPSD3bNrkL^%5b-m-I7fYFR|kS(+!>aW)Zckd+mB8< zx5F9pPF2Ti3`k(^zt+^HQ&T(mJGT5Ap_43H=w&8;?lHn< z-yCgz|LWo&-U`LbvT2`3g++oQs)EjQB7b(yzvKT2S}fn%eo?vQN7XqFCHY%g8$TmRWR9h_Xw_24$&>#J84u?0eomcJ^9W_A z>qOPZ_+73Y;y2yG^eT^c0KWbBH@|Y_{OQiA%kXc15B%TnYe?A5_D-Ige#@9S9}lmT z%br&+a6b0Wne(x|z2^MAiDIo|VN^YOQGY1CDbSL2=TJ8VlA$ZLP`m0rO&&GBvq zJGV&S@s((Dycb$0dpzqT%C%^n++ofWxlU?XuqFA=6t0~A`+eanL~%^8{WvD5SNJXU zO3oj$Bj-)Mn*GhYw1b!7KlL8?)4aG0f2(li{NL~E=vBNXExkQ&AOB^}o@rL=6z-H$ zzZ|uvR^{yWy1ZQ>;P`&v)ZfE;x+G8j5N;X@ADOW0FOJ%n>Ol7J(h0lp7i0F+PJVT2 z`}nwx{jPa+!XB*3+hZ&8_UuPsU2IfqV8CM9fhVB<^Le|!<)n+-vA4Rd- zI6?Kk0H2XPqxR%ybGFZMxAk+)ey6)atK{)G_}7O0#y%DP)Lhq>{w`;eeO zFZr226!jpVY`P0y8chi64fKN$XFdHB~7Cd|=m&vB6iScAT3q`cqp_b{+L?awu<){AAoV&Lu9f&HR~GPbS-4 zDbF!1dzT@%W$-EdnJKr1w^ThSxA`x@eB3%}OXvKyyK4RY^V&M{&*_PKKK}XCJ*Iy? zeFys(OGWA`>edMCeeiWs0o1R*IYILi=ca5g-hzg>x4wYxM z0~tW^_8&tYr@mtLKdANp&jA{E8unX1&)HfrS8wEndXvm%uJY=QejR<<)SKWNCtSY_ zALWYsg6Z?Bo>T??-?KiIj#XIpXV#{|=?ZI+o$AZ{sb4a%jF<)%*=-7xuN4u{?TC87r5yKd%2ET15@@1~S< zC8aiZ`IS?9SASJp7B7LWcdID5wftO#>gf4*Q;P>2^Cb$xuebyZ6+E! zB>wDi!YQ61*<^Zs>G2dT_=+e{C$Yq(Y_M#wNMxN|wLa=jt+|6VO0`FE@~KkqGX@+2 z(z<@U)|dW|H8FoMGF(t%h8d#vd%Y3CwiJV}>TRfv`kNWI7Lu&ntqrcV+f*k9ThnLl z_nn$KOjTI_wy&jEseMS#d9lAeul#r!SE9J4$B&=teb8}} zd0WK8M{@Qsv}I`p|L%Wb+#V8bTS;_zig(mh@V=w=t0(LRm@oD4jqPm^@Inms99QS< z2JpL5PzGW6ie%hR;+{m-E9G=5Fz(7}<~eiz9fiH*yPALJcpOl^e*CLy$FG<_&A-d= z54>{a?f)PyoPYEG2>$=qN9_gju{l1U3Ee33w=H{xG5;{jE49p=7qzdje=q0X(AOE~ zn+dGVzeqH)T4oM==ikTSQ@_$v&vPvAcCo*ytpmNhId4x^vi>y(^7bH|Kk$vv2%`ei zC+um|Nx)%BP0!>w{YJi+|JJjd^&5H8c~C{(Jzw|-Bsw)_2Ybh8{86{%_>a6cp~k;3 zVT?c8gMTaIKeJq%W5GPcyBg*6|&AyZr#qcYKxjna}3!p(eG*Y!GKe7{8SAsul9WYyNjR8&l!R z?%Fd~BYqR&PxiX;PP}ed#PLshN|ZRKJX3=I;0xnd%wK!9t1o|C18SG#i}>Ru`Ijxg z|NXv(M7(J1S8Uhu!~^4a^&3q+FI2LgpAzvT9J39ZZ@2KAbF0PiB-H<5&;wipWSr{E zbj}_DSU~WR>jTaUJbG?E&2!DjziLR&ef`6G=YFKk|J~70rM&6FdoGUAwfb6f{!i8A z-MAga$11p9c`n*6=CLK(Is9zSZr?d!V{RArWfJ;7c7u6dw*$`(CMN8v|B|!4iK7^g z_}^N4L+RKGnP}>@SJ>Xk>&^ByKc~)#(Eiqkp#HaVw$E)%)=#v0S~H-*emU;y*VCw%KZ9`t9$G4` z8y|Z?kNXZBtdOa<-u9y%nyoh5KV9iLzrJw7ZfV-yCiQ1}bkuHc+S+JcI$>kGmwuAZ zvxlXg@0hT+H8-`6$lu>%{EX10jwQVQbZ0CF{h(?w9u3cr+wBjIN&T{9`&VFJLH97{ z0^?uF*4Pr6;_N+_x)b&ETC+d%pzpZuc8K{qcr({8V|>*@{^)znzMZp&1l_bXW)FP_ z=EWwk+d-xqfHmUysS`GyUAvXSco%jR`)zU^rgcx)LAmZp+UlmuuY3H29DEW^+Z_6f ze*9-%o48{B{Cu9${Lz*KH>x@6$G_}y{3#8*bo;9+@(c1`sQvW#rv>=aI&>NS3$Lp7q-5-#a()+MYT5`}g5*SQVG&U-lmSjoIbJ z{N>-$-$4Eyf{uKw;oqB>7rbiA-TkmF^Tz^Lt9Gb!>%DXHKN=%=i+C53uAlDTxi&*i zI?eleVZIlw4Xb#KD!NSsVOk!+;drb{-d5sWe~`iOb*8``4TM?^=+3sk}rSQ{7HsUUT3w{Et6-<^138Yix;%N8z3g`$2m*(GThOkni@i zCy(dq()~c+>w~uE=r5hYy=g<>iu_ zucNS!8M!fUpMsAq>cD4B^sk?=t6@+5Ics;*fG8*TYjocJ@Ps|xoVUGs=6LD*lz6yr zh0II$$^~u8*oRHIv%A>amL0f9`L#XE z^5oY}N;>cZ(5IDkA`JZlj9DCi>IA`YA2$2L3EO&o)K-tbD!wG~lj z_;)~z?J&><@66d9@R9jTcHvG1xpWV{_| zs(IW_&E{;(eZ~BzQt>m?S&WZ)^{46&#O=}FIZ5$1zqp&cZo3Y~_2nGNNy6l#S@1fq z$5oux74lIo-uw)Dkko%P`<42?6Gnc@;D_>db1-MuenOqkl*k{i!1ZMk3yO0Zskc~9 zL%nGiM`}lnyq?0%jMMI2cCWwJ>gja4E9AY--gxv^VBkBlo_+E6IUX(J6l1BpJtgv{ zC~mP4#v{q`2F!OGd=O-w;f!@KV1M~(z za{ZNhQ;rk-8FRmhV~u~yIPpUJHTf)IT;EZ4e*D|3@>k5?ea>77{`d(lUzoqO0Dtj- zy9N38-27ho(-KvZfBjDvmj6Qh-|wq=5zh>sB-m8ZDaT4-aSsaQ_I(-W?qz6f|c8$>;A!+ZOh{{P<3 zhZp9lSDhHQM{+qgUOfbR)}aUT_R%(2!}sOw8Ti!fg1--g%}?j;X|NH)U((JW#lEYj zj@NBHU-|*?O$Pxk&x45`_CL+=ng49w#uz=?COSX*SAYjo0q{06s@Q;qhZ8cx*;Q{r#_)`MZ+>9=N^OXGFgSWBG$$ M8@2cTKm4woWZB*#?EnA( From aef65404ad63345619542dd1de7b3a0533af43d1 Mon Sep 17 00:00:00 2001 From: seek Date: Wed, 23 Mar 2016 14:08:26 +0100 Subject: [PATCH 015/124] Fixed problem with purchasing --- .../scripting/include/shop_sms_const.inc | 23 +- .../addons/amxmodx/scripting/sklep_sms.sma | 593 +++++++++--------- .../scripting/sklepsms_usluga_cod_exp2.sma | 40 -- 3 files changed, 312 insertions(+), 344 deletions(-) delete mode 100644 cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp2.sma diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index bc0594e..b9ecfb8 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -15,14 +15,31 @@ #define SS_BAD_ARGS -4 #define MAX_SMS_TEXT 32 +#define MAX_SERVICE_ID 16 #define MAX_SERVICE_TAG 16 -#define MAX_NAME 32 -#define MAX_ID 32 +#define MAX_SERVICE_NAME 32 +#define MAX_TRANS_SERVICE_ID 32 +#define MAX_TRANS_SERVICE_NAME 32 #define MAX_PASSWORD 32 #define MAX_DESCRIPTION 28 #define MAX_CODE 16 -#define MAX_CONFIG 512 #define MAX_NUMBER 16 +#define MAX_SERVER_NAME 128 +#define MAX_NAME 32 +#define MAX_SID 18 +#define MAX_IP 15 +#define MAX_PORT 8 +#define MAX_FULL_IP MAX_IP + MAX_PORT + 1 // ip + semicolon + port +#define MAX_URL_HOST 128 +#define MAX_URL_PATH 384 +#define MAX_URL MAX_URL_HOST + MAX_URL_PATH +#define MAX_FUNCTION 128 +#define MAX_HTTP_RESPONSE 1023 +#define MAX_HTTP_REQUEST MAX_URL + 64 +#define MAX_REQUEST_DATA 1023 +#define MAX_HTTP_STATUS_MESSAGE 32 +#define MAX_HTTP_STATUS_CODE 3 +#define MAX_HTTP_STATUS MAX_HTTP_STATUS_MESSAGE + MAX_HTTP_STATUS_CODE + 1 // 1 - space and semicolon #define ITEM_OFF 3 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 73f513b..5b37147 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -14,7 +14,6 @@ forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); -#define DOSTEP ADMIN_CFG #define FLAG_NICK (1<<5) // ID zadan @@ -23,8 +22,8 @@ forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); #define TASK_SHOW_MENU_SERVICE_TYPES 8000 // Sockets -#define TASK_CHECK_SOCKET 6000 -#define TASK_TIME_OUT 7000 +#define TASK_SOCKET_CHECK 6000 +#define TASK_SOCKET_TIME_OUT 7000 // Klawisze ktore mozna uzyc w menu #define KEYS (1<<0)|(1<<9) // Keys: 10 @@ -36,8 +35,8 @@ forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); new const DEBUG_FILE[] = "sklep_sms_debug.log"; new const LOG_FILE[] = "sklep_sms.log"; -const MAX_KOMENDA = 32; -const MAX_KONTAKT = 64; +const MAX_COMMAND = 32; +const MAX_CONTACT = 64; enum e_KeyValue { kvKEY[128], @@ -46,11 +45,11 @@ enum e_KeyValue { // Rejestracja uslug enum e_Service { - sID[MAX_ID+1], + sID[MAX_SERVICE_ID + 1], PLUGIN, - sNAME[MAX_NAME+1], - DESCRIPTION[MAX_DESCRIPTION+1], - TAG[MAX_SERVICE_TAG+1], + sNAME[MAX_SERVICE_NAME + 1], + DESCRIPTION[MAX_DESCRIPTION + 1], + TAG[MAX_SERVICE_TAG + 1], GROUPS[33], FLAGS[27], TYPES @@ -62,22 +61,22 @@ new Array:service_plugins, // Modul platnosci enum e_TransactionService { - tsID[MAX_ID+1], - tsNAME[MAX_NAME+1], - SMS_TEXT[MAX_SMS_TEXT+1], + tsID[MAX_TRANS_SERVICE_ID + 1], + tsNAME[MAX_TRANS_SERVICE_NAME + 1], + SMS_TEXT[MAX_SMS_TEXT + 1], }; new transaction_service[e_TransactionService]; // Numery i taryfy SMS enum e_SMS { - NUMBER[MAX_NUMBER+1], + NUMBER[MAX_NUMBER + 1], sTARIFF, }; new Array:smses; // Lista cen (taryf) dla usług enum e_Price { - pSERVICE[MAX_ID+1], + pSERVICE[MAX_SERVICE_ID + 1], pTARIFF, AMOUNT, }; @@ -86,13 +85,13 @@ new Array:pricelist; //Dodatkowe zmienne new which_service[33], which_price[33], - b_passwords[33][MAX_PASSWORD+1], + b_passwords[33][MAX_PASSWORD + 1], b_types[33]; -//CVARy +// CVARy new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; new cvar_debug; -new sklep_komenda[MAX_KOMENDA+1], przeladuj_komenda[MAX_KOMENDA+1], uslugi_komenda[MAX_KOMENDA+1], show_info; +new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_komenda[MAX_COMMAND + 1], show_info; // Sciezka do pliku konfiguracyjnego new config_path[128]; @@ -100,15 +99,16 @@ new config_path[128]; //Licencja new license[32], license_password[33]; new bool:g_footer = true; -new g_serverIp[32]; -new g_serverName[128]; +new g_serverIp[MAX_IP + 1]; +new g_serverPort[MAX_PORT + 1]; +new g_serverName[MAX_SERVER_NAME + 1]; new bool:g_blocked = false; // MySQL new const TABLE_PREFIX[] = "ss_"; new Handle:SqlTuple; new bool:g_sqlConnected = false; -new sql_host[64], sql_user[32], sql_pass[32], sql_db[32]; +new sql_host[MAX_URL_HOST + 1], sql_user[32], sql_pass[32], sql_db[32]; new g_serverId; new const all_flags[] = "abcdefghijklmnopqrstuyvwxz"; new g_szTemp[4096]; @@ -120,9 +120,9 @@ enum e_PlayerFlags { pfPASSWORD[MAX_PASSWORD+2], pfTYPE }; -new Array:players_flags; +new Array:g_playersFlags; new bool:g_playersLoaded = false; -new g_lastReload; +new g_lastReassign; // Sockets #define SOCKET_OK -1 @@ -135,13 +135,13 @@ new g_socketCounter = 0; // Settings new st_currency[16], st_signature[128], - st_sms_service[65], - st_contact[MAX_KONTAKT+1], + st_sms_service[MAX_TRANS_SERVICE_ID + 1], + st_contact[MAX_CONTACT + 1], st_random_key[33], st_random_key_md5[34], Float:st_vat; -new g_shopPageUrl[256]; +new g_shopPageUrl[MAX_URL + 1]; new g_shopPagePort = 80; new bool:g_shopRegistered = false; @@ -228,9 +228,9 @@ public plugin_precache() } service_plugins = ArrayCreate(); - service_ids = ArrayCreate(MAX_NAME); + service_ids = ArrayCreate(MAX_SERVICE_ID); - players_flags = ArrayCreate(e_PlayerFlags); + g_playersFlags = ArrayCreate(e_PlayerFlags); smses = ArrayCreate(e_SMS); services = ArrayCreate(e_Service); pricelist = ArrayCreate(e_Price); @@ -244,8 +244,8 @@ public plugin_init() register_concmd("Podaj_Kod_Zwrotny", "kodZwrotny"); register_concmd("ssnick_Podaj_Haslo", "menuServiceType_nick"); register_concmd("ssip_Podaj_Haslo", "menuServiceType_ip"); - register_concmd("sklepsms_reloaddata", "usersReloadData"); - register_concmd("sklepsms_reloadusers", "pre_usersReload"); + register_concmd("sklepsms_reloaddata", "realoadPlayersServices"); + register_concmd("sklepsms_reloadusers", "pre_reassignPlayersFlags"); register_clcmd("say", "sayHook"); register_clcmd("say_team", "sayHook"); @@ -276,7 +276,7 @@ public plugin_end() } } -public plugin_cfg() { +public plugin_cfg() { // Blad przy tworzeniu (brak uprawnien) if (!file_exists(config_path)) { brakSciezki(0, config_path); @@ -288,12 +288,6 @@ public plugin_cfg() { server_exec(); } - // Pobieranie ip serwera - get_pcvar_string(cvar_server_ip, g_serverIp, charsmax(g_serverIp)); - if (!strlen(g_serverIp)) { // Brak ip w cvarach - get_user_ip(0, g_serverIp, charsmax(g_serverIp)); - } - // Ladownaie cvarow loadCvars(); @@ -303,20 +297,25 @@ public plugin_cfg() { _error51(); } - // Zaladuj flagi - _usersLoad(false); + // Get server ip + new fullIp[MAX_FULL_IP]; + get_pcvar_string(cvar_server_ip, fullIp, charsmax(fullIp)); + if (!strlen(fullIp)) { // Brak ip w cvarach + get_user_ip(0, fullIp, charsmax(fullIp), false); + } - if (SqlTuple) { - new ip[22], port[10]; - split(g_serverIp, ip, charsmax(ip), port, charsmax(port), ":"); + split(fullIp, g_serverIp, charsmax(g_serverIp), g_serverPort, charsmax(g_serverPort), ":"); + + _loadPlayersServices(false); + if (SqlTuple) { formatex(g_szTemp, charsmax(g_szTemp), "SELECT s.id, s.name, s.sms_service, CONCAT(' ', GROUP_CONCAT( ss.service_id SEPARATOR ' ' ), ' ') AS `services` \ FROM `%sservers` AS s \ LEFT JOIN `%sservers_services` AS ss ON ss.server_id = s.id \ WHERE s.ip = '%s' AND s.port = '%s' \ GROUP BY s.id", - TABLE_PREFIX, TABLE_PREFIX, ip, port + TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort ); SQL_ThreadQuery(SqlTuple, "getServerData", g_szTemp); @@ -326,9 +325,9 @@ public plugin_cfg() { public checkLoadedServices() { if (!ArraySize(services)) { - log_amx("Nie zaladowano zadnych uslug."); + log_amx("Nie zaladowano zadnych uslug do zakupienia."); } else { - log_amx("Zaladowano %d uslug.", ArraySize(services)); + log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(services)); } } @@ -351,7 +350,7 @@ public sayHook(id) sklepMenu(id); } else if (equali(tekst, przeladuj_komenda)) { - pre_usersReload(id); + pre_reassignPlayersFlags(id); } else if (equali(tekst, uslugi_komenda)) { _showPlayerServices(id); @@ -402,7 +401,7 @@ public sklepMenu(id) new szText[64], service[e_Service]; for (new i = 0; i < ArraySize(services); ++i) { new data[4]; - data[0] = i+1; + data[0] = i + 1; // Pobierz dane o usludze ArrayGetArray(services, i, service); @@ -495,7 +494,7 @@ public wyborMenu(id, service_id) continue; } - new amount[32+1]; + new amount[32 + 1]; if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); } else { @@ -509,7 +508,7 @@ public wyborMenu(id, service_id) two_number_value(floatround(temp_cost*st_vat)%100), st_currency ); data[0] = service_id+1; - data[1] = min(127, i); // Problem przy ilosci uslug powyzej 256! + data[1] = min(127, i); // TODO: Problem przy ilosci uslug powyzej 256! data[2] = min(127, i-data[1]); menu_additem(menu, szText, data); } @@ -538,8 +537,8 @@ public wyborMenu_handler(id, menu, item) new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - which_service[id] = data[0]-1; - which_price[id] = data[1]+data[2]; + which_service[id] = data[0] - 1; + which_price[id] = data[1] + data[2]; prev_infoSMS(id); menu_destroy(menu); @@ -549,7 +548,6 @@ public wyborMenu_handler(id, menu, item) /* Informacje dot SMSa */ public prev_infoSMS(id) { - new service[e_Service]; ArrayGetArray(services, which_service[id], service); @@ -569,8 +567,7 @@ public prev_infoSMS(id) data[1] = menu; menuDisplayServiceTypes(data); - } - else { + } else { _serviceChosen(id); } } @@ -619,7 +616,7 @@ public menuServiceType_handler(id, menu, item) } } - if (0 <= item <= 2) { + if (0 <= item && item <= 2) { remove_task(TASK_SHOW_MENU_SERVICE_TYPES+id); menu_destroy(menu); } @@ -627,7 +624,7 @@ public menuServiceType_handler(id, menu, item) public menuServiceType_nick(id) { - new szPassword[65]; + new szPassword[MAX_PASSWORD + 1]; read_argv(1, szPassword, charsmax(szPassword)); if (!_menuServiceType_checkPass(id, TYPE_NICK, szPassword)) { @@ -637,7 +634,7 @@ public menuServiceType_nick(id) public menuServiceType_ip(id) { - new szPassword[65]; + new szPassword[MAX_PASSWORD + 1]; read_argv(1, szPassword, charsmax(szPassword)); if (! _menuServiceType_checkPass(id, TYPE_IP, szPassword)) { @@ -645,7 +642,7 @@ public menuServiceType_ip(id) } } -bool:_menuServiceType_checkPass(id, type, szPassword[]) +bool:_menuServiceType_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) { if (strlen(szPassword) > 30) { client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); @@ -670,7 +667,7 @@ public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], new type = data[1]; // Haslo takie jak do innych uslug if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "equal"))) { - new szPassword[33]; + new szPassword[MAX_PASSWORD + 1]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), szPassword, charsmax(szPassword)); _serviceChosen(id, type, szPassword); } @@ -686,7 +683,7 @@ public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], } } -_serviceChosen(id, type=0, szPassword[] = "") +_serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") { new service[e_Service], price[e_Price]; ArrayGetArray(services, which_service[id], service); @@ -710,12 +707,12 @@ public infoSMS(id) return; } - new service[e_Service], price[e_Price], number[MAX_NUMBER+1]; + new service[e_Service], price[e_Price], number[MAX_NUMBER + 1]; ArrayGetArray(services, which_service[id], service); ArrayGetArray(pricelist, which_price[id], price); _getNumberByTariff(price[pTARIFF], number, charsmax(number)); - new amount[32+1]; + new amount[32 + 1]; if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); } else { @@ -733,11 +730,11 @@ public infoSMS(id) ); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); - //Wyswietlane caly czas menu zakupu - infoSMS_wyswietl(g_szTemp, id+TASK_WYSWIETL); + // Wyswietlane caly czas menu zakupu + infoSMS_wyswietl(g_szTemp, TASK_WYSWIETL + id); } -public infoSMS_wyswietl(info[], id) +public infoSMS_wyswietl(const info[], id) { id -= TASK_WYSWIETL; if (!is_user_connected(id)) { @@ -750,8 +747,8 @@ public infoSMS_wyswietl(info[], id) public infoSMS_handler(id, key) { - if (task_exists(id+TASK_WYSWIETL)) { - remove_task(id+TASK_WYSWIETL); + if (task_exists(TASK_WYSWIETL + id)) { + remove_task(TASK_WYSWIETL + id); } if (!is_user_connected(id)) { @@ -772,7 +769,7 @@ public kodZwrotny(id) return; } - new sms_code[MAX_CODE+1]; + new sms_code[MAX_CODE + 1]; read_argv(1, sms_code, charsmax(sms_code)); dodajLog2(id, "Wprowadzono kod: %s", sms_code); @@ -796,61 +793,69 @@ public kodZwrotny(id) // ############# ZAKUP USLUGI ############### - new service[e_Service], auth_data[32+1], price[e_Price], ip[32]; - new u_service_id[64+1], u_auth_data[64+1], u_password[64+1], u_sms_service[64+1], u_sms_code[MAX_CODE*2+1], u_ip[64+1]; + new url[MAX_URL + 1]; + if (true) { + new service[e_Service], auth_data[32 + 1], price[e_Price], ip[MAX_IP + 1]; + new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_password[MAX_PASSWORD * 2 + 1], + u_sms_service[MAX_TRANS_SERVICE_ID * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; - // Pobieramy dane o usludze - ArrayGetArray(services, which_service[id], service); + // Pobieramy dane o usludze + ArrayGetArray(services, which_service[id], service); - // Pobieramy dane gracza Nick / IP / SID - switch (b_types[id]) { - case TYPE_IP: get_user_ip(id, auth_data, charsmax(auth_data), 1); - case TYPE_SID: get_user_authid(id, auth_data, charsmax(auth_data)); - case TYPE_NICK: get_user_name(id, auth_data, charsmax(auth_data)); - } + // Pobieramy dane gracza Nick / IP / SID + switch (b_types[id]) { + case TYPE_IP: get_user_ip(id, auth_data, charsmax(auth_data), true); + case TYPE_SID: get_user_authid(id, auth_data, charsmax(auth_data)); + case TYPE_NICK: get_user_name(id, auth_data, charsmax(auth_data)); + } - // Jezeli usluga nie jest wykupowana na nickpass, ippass, sid, to pobieramy nick - if (!strlen(auth_data)) { - get_user_name(id, auth_data, charsmax(auth_data)); - } + // Jezeli usluga nie jest wykupowana na nickpass, ippass, sid, to pobieramy nick + if (!strlen(auth_data)) { + get_user_name(id, auth_data, charsmax(auth_data)); + } - // Pobieramy IP gracza - get_user_ip(id, ip, charsmax(ip), 1); - - // Pobieramy taryfe - ArrayGetArray(pricelist, which_price[id], price); + // Pobieramy IP gracza + get_user_ip(id, ip, charsmax(ip), true); + + // Pobieramy taryfe + ArrayGetArray(pricelist, which_price[id], price); - // Urlencode - StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); - StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); - StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); - StringURLEncode(st_sms_service, u_sms_service, charsmax(u_sms_service)); - StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); - StringURLEncode(ip, u_ip, charsmax(u_ip)); - - formatex(g_szTemp, charsmax(g_szTemp), - "%s/servers_stuff.php?action=purchase_service&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&platform=engine_amxx&language=polish", - g_shopPageUrl, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, g_serverId, u_sms_service, u_sms_code, price[pTARIFF], u_ip - ); - getWebPage(g_szTemp, g_shopPagePort, "getWebPagePurchaseService"); + // Urlencode + StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); + StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); + StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); + StringURLEncode(st_sms_service, u_sms_service, charsmax(u_sms_service)); + StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); + + formatex(url, charsmax(url), + "%s/servers_stuff.php?action=purchase_service&platform=engine_amxx&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&language=polish", + g_shopPageUrl, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, g_serverId, u_sms_service, u_sms_code, price[pTARIFF], ip + ); + } + + getWebPage(url, g_shopPagePort, "getWebPagePurchaseService", id); } -public getWebPagePurchaseService(const data[], const content[], playerId, status, statusCode) +public getWebPagePurchaseService(const content[], playerId, socketStatus, statusCode) { - switch (status) { + switch (socketStatus) { case SOCKET_OK: { if (statusCode >= 300) { client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrociło bledny http code.", PREFIX); return; } - new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[1024]; + new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[256]; getXMLValue(content, "return_value", return_value, charsmax(return_value)); getXMLValue(content, "text", szText, charsmax(szText)); getXMLValue(content, "positive", szPositive, charsmax(szPositive)); getXMLValue(content, "bsid", szBsid, charsmax(szBsid)); getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); + + trim(return_value); + trim(szText); + trim(szWarnings); purchaseServicePost(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); } @@ -867,8 +872,15 @@ public getWebPagePurchaseService(const data[], const content[], playerId, status } } -public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarnings[]) -{ +public purchaseServicePost(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) +{ + if (! is_user_connected(id)) { + if (isDebug()) { + log_to_file(DEBUG_FILE, "Wywolano funkcje zakupu dla uzytkownika o id 0"); + } + return; + } + client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, szText); if (strlen(szWarnings)) { @@ -903,7 +915,7 @@ public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarni if (ret == SS_ERROR) { client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, st_contact); - new amount[32+1]; + new amount[32 + 1]; if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); } @@ -918,7 +930,7 @@ public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarni } // Info w przypadku usługi na haslo - if (b_types[id] & (TYPE_NICK|TYPE_IP)) { + if (b_types[id] & (TYPE_NICK | TYPE_IP)) { // Ustawienie hasla client_cmd(id, "setinfo _ss ^"%s^"", b_passwords[id]); @@ -932,7 +944,7 @@ public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarni ); show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } - else if (b_types[id]&TYPE_SID) { + else if (b_types[id] & TYPE_SID) { formatex(g_szTemp, charsmax(g_szTemp), "


\

Wykupiles/as usluge: %s

\ @@ -943,7 +955,7 @@ public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarni show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } - new amount[32+1]; + new amount[32 + 1]; if (price[AMOUNT] == -1) {// Jezeli -1 to usluga jest na zawsze formatex(amount, charsmax(amount), "Na zawsze"); } @@ -957,18 +969,18 @@ public purchaseServicePost(id, return_value[], szText[], positive, bsid, szWarni // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy if (service[FLAGS]) { // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo - set_task(2.0, "usersReloadData"); + set_task(2.0, "realoadPlayersServices"); } } /** * Dodanie kodu do bazy kodow * - * @param char[] sms_code - * @param int sms_tariff - * @param bool free + * @param const char[] sms_code + * @param int sms_tariff + * @param bool free */ -addCode(sms_code[], sms_tariff, bool:free=true) +addCode(const sms_code[], sms_tariff, bool:free = true) { formatex(g_szTemp, charsmax(g_szTemp), "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) \ @@ -993,12 +1005,13 @@ _showPlayerServices(id) return; } - new name[64+1], sid[64+1], ip[32+1]; + new name[MAX_NAME * 2 + 1], sid[MAX_SID * 2 + 1], ip[MAX_IP + 1]; get_user_name(id, name, charsmax(name)); + get_user_ip(id, ip, charsmax(ip), true); + get_user_authid(id, sid, charsmax(sid)); + escapeQuotes(name, charsmax(name)); - get_user_ip(id, ip, charsmax(ip), 1); escapeQuotes(ip, charsmax(ip)); - get_user_authid(id, sid, charsmax(sid)); escapeQuotes(sid, charsmax(sid)); if (SqlTuple) { @@ -1029,7 +1042,7 @@ public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], da new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); while (SQL_MoreResults(Query)) { - new service[MAX_ID+1], expire[32+1], item_text[128]; + new service[MAX_SERVICE_ID + 1], expire[32 + 1], item_text[128]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), service, charsmax(service)); if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire_num")) == -1) { @@ -1058,19 +1071,28 @@ public showPlayerServices_handler(id, menu, item) menu_destroy(menu); } -// Funkcje dotyczace flag graczy - -public pre_usersReload(id) +/** + * Wrapper for _reassignPlayersFlags + * + * @param int id + */ +public pre_reassignPlayersFlags(id) { - if (g_lastReload+10 > get_systime()) { + if (g_lastReassign + 10 > get_systime()) { client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); return; } - g_lastReload = get_systime(); - _usersReload(id); + + g_lastReassign = get_systime(); + _reassignPlayersFlags(id); } -_usersReload(id) +/** + * Reload players flags and assign them again + * + * @param int id + */ +_reassignPlayersFlags(id = 0) { for (new i = 1; i <= get_maxplayers(); ++i) { if (! is_user_connected(i)) { @@ -1079,26 +1101,24 @@ _usersReload(id) _usersCheckUser(i); } - if (id) { + + if (is_user_connected(id)) { client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); } } // Funkcja wczytujaca z bazy ponownie dane graczy -public usersReloadData() { +public realoadPlayersServices() { // Wczytywanie danych graczy - _usersLoad(true); + _loadPlayersServices(true); } -_usersLoad(bool:reload) { +_loadPlayersServices(bool:reloadAmxbans) { // Czyscimy dotychczasowe dane - ArrayClear(players_flags); + ArrayClear(g_playersFlags); g_playersLoaded = false; - if (SqlTuple) { - new ip[16], port[8]; - split(g_serverIp, ip, charsmax(ip), port, charsmax(port), ":"); - + if (SqlTuple) { formatex(g_szTemp, charsmax(g_szTemp), "SELECT f.id, f.type, f.auth_data, f.password, f.a, f.b, f.c, f.d, f.e, f.f, f.g, f.h, f.i, f.j, f.k, f.l, f.m, f.n, f.o, f.p, f.q, f.r, f.s, f.t, f.u, f.y, f.v, f.w, f.x, f.z \ FROM `%splayers_flags` AS f \ @@ -1106,10 +1126,10 @@ _usersLoad(bool:reload) { WHERE s.ip = '%s' \ AND s.port = '%s' \ ORDER BY f.auth_data, f.type DESC", - TABLE_PREFIX, TABLE_PREFIX, ip, port + TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort ); - new data[1]; data[0] = reload; // Przeladuj liste adminow w amxbans + new data[1]; data[0] = reloadAmxbans; // Przeladuj liste adminow w amxbans SQL_ThreadQuery(SqlTuple, "getPlayersData", g_szTemp, data, sizeof data); } } @@ -1144,20 +1164,20 @@ public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_ // Dodanie do tablicy if (player_flags[pfFLAGS] != 0) { - ArrayPushArray(players_flags, player_flags); + ArrayPushArray(g_playersFlags, player_flags); } SQL_NextRow(Query); } + log_amx("Zaladowano %d uslug graczy", ArraySize(g_playersFlags)); g_playersLoaded = true; if (data[0] && g_AmxbansExists) { // Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien server_cmd("amx_reloadadmins"); } else { - // Sprawdzamy uprawnienia graczy - _usersReload(0); + _reassignPlayersFlags(); } } @@ -1165,8 +1185,7 @@ public amxbans_sql_initialized() { g_AmxbansExists = true; addUsersToGlobalArray(); - // Sprawdzamy uprawnienia graczy - _usersReload(0); + _reassignPlayersFlags(); } // Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy @@ -1182,9 +1201,9 @@ public addUsersToGlobalArray() users = ArrayCreate(e_PlayerFlags); users2 = ArrayCreate(e_PlayerFlags); - for (new i = 0; i < ArraySize(players_flags); ++i) { + for (new i = 0; i < ArraySize(g_playersFlags); ++i) { new player_flags[e_PlayerFlags]; - ArrayGetArray(players_flags, i, player_flags); + ArrayGetArray(g_playersFlags, i, player_flags); ArrayPushArray(users, player_flags); } @@ -1269,26 +1288,26 @@ public _usersCheckUser(id) return; } - for (new i = 0; i < ArraySize(players_flags); ++i) { + for (new i = 0; i < ArraySize(g_playersFlags); ++i) { new player_flags[e_PlayerFlags]; - ArrayGetArray(players_flags, i, player_flags); + ArrayGetArray(g_playersFlags, i, player_flags); - if (player_flags[pfTYPE]&FLAG_NICK) { - new name[32]; + if (player_flags[pfTYPE] & FLAG_NICK) { + new name[MAX_NAME + 1]; get_user_name(id, name, charsmax(name)); if (! equali(name, player_flags[pfPLAYER])) { continue; } } - else if (player_flags[pfTYPE]&FLAG_IP) { - new ip[32]; - get_user_ip(id, ip, charsmax(ip), 1); + else if (player_flags[pfTYPE] & FLAG_IP) { + new ip[MAX_IP + 1]; + get_user_ip(id, ip, charsmax(ip), true); if (! equali(ip, player_flags[pfPLAYER])) { continue; } } - else if (player_flags[pfTYPE]&FLAG_AUTHID) { - new sid[32], arr_sid[32]; + else if (player_flags[pfTYPE] & FLAG_AUTHID) { + new sid[MAX_SID + 1], arr_sid[MAX_SID + 1]; copy(arr_sid, charsmax(arr_sid), player_flags[pfPLAYER]); get_user_authid(id, sid, charsmax(sid)); @@ -1303,7 +1322,7 @@ public _usersCheckUser(id) } if (strlen(player_flags[pfPASSWORD])) { - new password[33], password_md5[34]; + new password[MAX_PASSWORD + 1], password_md5[34]; get_user_info(id, "_pw", password, charsmax(password)); md5(password, password_md5); @@ -1335,7 +1354,7 @@ public _usersCheckUser(id) } } -public brakSciezki(id, path[]) +public brakSciezki(id, const path[]) { dodajLog2(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); @@ -1355,31 +1374,31 @@ public reklama() public dodajLog2(id, const szFormat[], any:...) { #if defined LOG_SQL - new g_szTemp[256], name[33], ip[22], sid[22]; vformat(g_szTemp, charsmax(g_szTemp), szFormat, 3); - get_user_name(id, name, charsmax(name)); - get_user_ip(id, ip, charsmax(ip), 1); - get_user_authid(id, sid, charsmax(sid)); - if (id) { + if (is_user_connected(id)) { + new name[MAX_NAME + 1], ip[MAX_IP + 1], sid[MAX_SID + 1]; + get_user_name(id, name, charsmax(name)); + get_user_ip(id, ip, charsmax(ip), true); + get_user_authid(id, sid, charsmax(sid)); format(g_szTemp, charsmax(g_szTemp), "%s; %s; %s. %s", name, ip, sid, g_szTemp); } - log_to_sql(g_szTemp, charsmax(g_szTemp)); + log_to_sql(g_szTemp); #endif } -public log_to_sql(text[], text_len) +public log_to_sql(const text[]) { if (SqlTuple) { - format(text, text_len, "%s. Serwer: %d", text, g_serverId); - escapeQuotes(text, text_len); + format(g_szTemp, charsmax(g_szTemp), "%s. Serwer: %d", text, g_serverId); + escapeQuotes(g_szTemp, charsmax(g_szTemp)); // Cannot be formatex, because param text is probably g_szTemp format(g_szTemp, charsmax(g_szTemp), "INSERT INTO `%slogs` (text) \ VALUES ('%s')", - TABLE_PREFIX, text + TABLE_PREFIX, g_szTemp ); SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); } @@ -1387,7 +1406,6 @@ public log_to_sql(text[], text_len) public getServerData(FailState, Handle:Query, Error[], Errorcode) { - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { if (FailState == TQUERY_QUERY_FAILED) { if (containi(Error, "exist") != -1) { @@ -1406,7 +1424,7 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) g_serverId = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id")); // Pobranie uslugi obslugujacej platnosci - new sms_service[64]; + new sms_service[MAX_TRANS_SERVICE_ID + 1]; SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms_service"), sms_service, charsmax(sms_service)); if (strlen(sms_service)) { copy(st_sms_service, charsmax(st_sms_service), sms_service); @@ -1436,7 +1454,7 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) } // Sprawdzanie dostepnosci usług - new service_id[MAX_NAME+1], service_id_space[MAX_NAME+2+1], ids[512], ids_len = 0, ids_max = charsmax(ids); + new service_id[MAX_SERVICE_ID + 1], service_id_space[MAX_SERVICE_ID + 2 + 1], ids[512], ids_len = 0, ids_max = charsmax(ids); for (new i = 0; i < ArraySize(service_ids); ++i) { ArrayGetString(service_ids, i, service_id, charsmax(service_id)); formatex(service_id_space, charsmax(service_id_space), " %s ", service_id); @@ -1485,9 +1503,9 @@ public getServicesData(FailState, Handle:Query, Error[], Errorcode) { new ids[512], ids_len = 0, ids_max = charsmax(ids); while (SQL_MoreResults(Query)) { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), service[sID], MAX_ID); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), service[sID], MAX_SERVICE_ID); service[PLUGIN] = _getServicePluginByID(service[sID]); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), service[sNAME], MAX_NAME); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), service[sNAME], MAX_SERVICE_NAME); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "short_description"), service[DESCRIPTION], MAX_DESCRIPTION); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tag"), service[TAG], MAX_SERVICE_TAG); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "flags"), service[FLAGS], 26); @@ -1504,7 +1522,7 @@ public getServicesData(FailState, Handle:Query, Error[], Errorcode) { // Przygotowywanie zapytania o priceliste if (ids_len) { - ids_len += formatex(ids[ids_len], ids_max-ids_len, ",", g_szTemp); + ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); } ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service[sID]); @@ -1540,7 +1558,7 @@ public getPriceList(FailState, Handle:Query, Error[], Errorcode) new price[e_Price]; price[pTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_ID); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_TRANS_SERVICE_ID); price[AMOUNT] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "amount")); ArrayPushArray(pricelist, price); @@ -1576,7 +1594,7 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) // Remove trailing slash if (g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { - g_shopPageUrl[strlen(g_shopPageUrl) - 1] = 0; + g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; } if (! strlen(g_shopPageUrl)) { @@ -1637,19 +1655,22 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) // Funkcja ktora wysyla zapytanie do serwera o sprawdzenie czy licencja jest prawidlowa public validateLicense() { - // Sprawdzenie licencji - new serverNameEscaped[128]; - get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); - StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); - - formatex(g_szTemp, charsmax(g_szTemp), - "license.sklep-sms.pl/license.php?action=login_server&type=engine_amxx&license_id=%s&license_password=%s&server_ip=%s&version=%s&name=%s", - license, license_password, g_serverIp, VERSION, serverNameEscaped - ); - getWebPage(g_szTemp, _, "getWebPageValidateLicense"); + new url[MAX_URL + 1]; + + if (true) { + new serverNameEscaped[MAX_SERVER_NAME * 2 + 1]; + get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); + StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); + + formatex(url, charsmax(url), + "license.sklep-sms.pl/license.php?action=login_server&type=engine_amxx&license_id=%s&license_password=%s&server_ip=%s:%s&version=%s&name=%s", + license, license_password, g_serverIp, g_serverPort, VERSION, serverNameEscaped + ); + } + getWebPage(url, 80, "getWebPageValidateLicense"); } -public getWebPageValidateLicense(const data[], const content[], playerId, status, statusCode) +public getWebPageValidateLicense(const content[], playerId, status, statusCode) { switch (status) { case SOCKET_OK: { @@ -1659,9 +1680,9 @@ public getWebPageValidateLicense(const data[], const content[], playerId, status return; } - new text[33]; - + new text[32 + 1]; getXMLValue(content, "text", text, charsmax(text)); + trim(text); if (equal(text, "updated")) { g_shopRegistered = true; @@ -1711,8 +1732,8 @@ public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) } new data[256]; - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), transaction_service[tsID], MAX_ID); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), transaction_service[tsNAME], MAX_NAME); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), transaction_service[tsID], MAX_TRANS_SERVICE_ID); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), transaction_service[tsNAME], MAX_TRANS_SERVICE_NAME); SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "data"), data, charsmax(data)); if (! json_decode(data, "sms_text", transaction_service[SMS_TEXT], MAX_SMS_TEXT)) { @@ -1778,7 +1799,7 @@ public registerService(plugin, params) return SS_BAD_ARGS; } - new id[MAX_NAME+1]; + new id[MAX_SERVICE_ID + 1]; get_string(1, id, charsmax(id)); @@ -1795,7 +1816,7 @@ public native_addCode(plugin, params) return SS_BAD_ARGS; } - new sms_code[MAX_CODE+1], tariff; + new sms_code[MAX_CODE + 1], tariff; get_string(1, sms_code, charsmax(sms_code)); tariff = get_param(2); @@ -1807,7 +1828,7 @@ public dodajLog(plugin, params) { #if defined LOG_SQL vdformat(g_szTemp, charsmax(g_szTemp), 1, 2); - log_to_sql(g_szTemp, charsmax(g_szTemp)); + log_to_sql(g_szTemp); #endif } @@ -1817,7 +1838,7 @@ public native_showServicePurchase(plugin, params) return SS_BAD_ARGS; } - new service_id[MAX_ID+1]; + new service_id[MAX_SERVICE_ID + 1]; new id = get_param(1); get_string(2, service_id, charsmax(service_id)); @@ -1844,17 +1865,6 @@ public bool:native_is_steam(plugin, params) return is_steam(get_param(1)); } -bool:is_steam(id) -{ - new auth[32]; - get_user_authid(id, auth, charsmax(auth)); - if (contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1) { - return true; - } - - return false; -} - // ######### TYPY BŁĘDÓW ########## // ## 1 - licencja // ## 2 - problem z baza @@ -1915,14 +1925,15 @@ _make_error(message[]) { * @param const char[] url path (eg. example.com/shop/ddd) * @param int port eg. 80 * @param const char[] callback callback function - * @param const char[] functionData callback function data * @param int playerId id of the player * * @return bool */ -bool:getWebPage(const url[], port = 80, const callback[] = "", const functionData[] = "", playerId = 0) +bool:getWebPage(const url[MAX_URL + 1], port = 80, const callback[MAX_FUNCTION + 1] = "", playerId = 0) { - new host[128], path[256]; + static host[MAX_URL_HOST + 1], path[MAX_URL_PATH + 1]; + host[0] = '^0'; + path[0] = '^0'; split(url, host, charsmax(host), path, charsmax(path), "/"); new socketId = mySocketOpen(host, port, playerId); @@ -1930,7 +1941,7 @@ bool:getWebPage(const url[], port = 80, const callback[] = "", const functionDat return false; } - new httpRequest[512]; + new httpRequest[MAX_HTTP_REQUEST + 1]; formatex(httpRequest, charsmax(httpRequest), "GET /%s HTTP/1.1^r^n\ Host: %s^r^n^r^n", @@ -1941,23 +1952,14 @@ bool:getWebPage(const url[], port = 80, const callback[] = "", const functionDat /* * Utworzenie nowego pseudo watku oczekujacego na odpowiedz */ - new requestData[1024]; + new requestData[MAX_REQUEST_DATA + 1]; - if (true) { // pseudo deleting variables - new callbackEscaped[256], functionDataEscaped[512]; - - copy(callbackEscaped, charsmax(callbackEscaped), callback); - copy(functionDataEscaped, charsmax(functionDataEscaped), functionData); - replace_all(httpRequest, charsmax(httpRequest), "^"", "^^^""); - replace_all(callbackEscaped, charsmax(callbackEscaped), "^"", "^^^""); - replace_all(functionDataEscaped, charsmax(functionDataEscaped), "^"", "^^^""); + replace_all(httpRequest, charsmax(httpRequest), "^"", "^^^""); - // "httpRequest" "function" "functionData" - formatex(requestData, charsmax(requestData), "%d ^"%s^" ^"%s^" ^"%s^"", playerId, httpRequest, callbackEscaped, functionDataEscaped); - } + formatex(requestData, charsmax(requestData), "%d ^"%s^" ^"%s^"", playerId, httpRequest, callback); - set_task(0.6, "mySocketCheckData", TASK_CHECK_SOCKET + socketId, requestData, strlen(requestData)); - set_task(10.0, "mySocketTimeout", TASK_TIME_OUT + socketId, requestData, strlen(requestData)); + set_task(0.6, "mySocketCheckData", TASK_SOCKET_CHECK + socketId, requestData, strlen(requestData)); + set_task(10.0, "mySocketTimeout", TASK_SOCKET_TIME_OUT + socketId, requestData, strlen(requestData)); return true; } @@ -1998,47 +2000,55 @@ mySocketOpen(const host[], port = 80, playerId = 0) public mySocketCheckData(const requestData[], socketId) { - socketId -= TASK_CHECK_SOCKET; + socketId -= TASK_SOCKET_CHECK; if (! socket_change(g_sockets[socketId])) { - set_task(0.6, "mySocketCheckData", TASK_CHECK_SOCKET + socketId, requestData, strlen(requestData)); + set_task(0.6, "mySocketCheckData", TASK_SOCKET_CHECK + socketId, requestData, strlen(requestData)); return; } - new receiveDataContent[1024], statusCode, statusMessage[64]; - statusCode = mySocketReceiveData(socketId, receiveDataContent, charsmax(receiveDataContent), statusMessage, charsmax(statusMessage)); + new httpResponseContent[MAX_HTTP_RESPONSE + 1], statusCode, statusMessage[MAX_HTTP_STATUS_MESSAGE + 1]; + + statusCode = mySocketReceiveData(socketId, httpResponseContent, charsmax(httpResponseContent), statusMessage, charsmax(statusMessage)); // Parse request data - new httpRequest[512], szPlayerId[4], function[256], functionData[512], playerId; - parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function), functionData, charsmax(functionData)); + new httpRequest[MAX_HTTP_REQUEST], function[MAX_FUNCTION + 1], szPlayerId[2 + 1], playerId; + parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function)); playerId = str_to_num(szPlayerId); - if (!statusCode || statusCode >= 300) { + if (! statusCode || statusCode >= 300) { log_to_file(LOG_FILE, "Zapytanie zwrocilo blad: %d %s^n%s", statusCode, statusMessage, httpRequest); } - mySocketCallCallback(function, functionData, receiveDataContent, playerId, SOCKET_OK, statusCode); + mySocketCallCallback(function, httpResponseContent, playerId, SOCKET_OK, statusCode); } /** + * Receive data from socket * * @return int status code */ -mySocketReceiveData(socketId, receiveDataContent[], receiveDataContentLen, statusMessage[], statusMessageLen) +mySocketReceiveData(socketId, httpResponseContent[], httpResponseContentLen, statusMessage[], statusMessageLen) { - new receiveData[1024], receiveDataHeader[128]; + static httpResponse[MAX_HTTP_RESPONSE + 1], httpResponseHeader[128], tmp[1]; + httpResponse[0] = '^0'; + httpResponseHeader[0] = '^0'; - socket_recv(g_sockets[socketId], receiveData, charsmax(receiveData)); + socket_recv(g_sockets[socketId], httpResponse, charsmax(httpResponse)); mySocketClose(socketId); + if (isDebug()) { + log_to_file(DEBUG_FILE, "Received data: %s", httpResponse); + } + // Parse received data - new headerFirstLine[128], httpInfo[16], status[64], szStatusCode[4]; + new headerFirstLine[128], httpInfo[16], status[MAX_HTTP_STATUS + 1], szStatusCode[MAX_HTTP_STATUS_CODE + 1]; // Split header from content - split(receiveData, receiveDataHeader, charsmax(receiveDataHeader), receiveDataContent, receiveDataContentLen, "^r^n^r^n"); + split(httpResponse, httpResponseHeader, charsmax(httpResponseHeader), httpResponseContent, httpResponseContentLen, "^r^n^r^n"); // Extract first line of header - split(receiveDataHeader, headerFirstLine, charsmax(headerFirstLine), receiveDataHeader, charsmax(receiveDataHeader), "^r^n"); + split(httpResponseHeader, headerFirstLine, charsmax(headerFirstLine), tmp, charsmax(tmp), "^r^n"); // Split first line: httpInfo status split(headerFirstLine, httpInfo, charsmax(httpInfo), status, charsmax(status), " "); @@ -2055,14 +2065,14 @@ mySocketReceiveData(socketId, receiveDataContent[], receiveDataContentLen, statu * @param char[] requestData * @param int socketId task id */ -public mySocketTimeout(requestData[], socketId) +public mySocketTimeout(const requestData[], socketId) { - socketId -= TASK_TIME_OUT; + socketId -= TASK_SOCKET_TIME_OUT; mySocketClose(socketId); // Parse request data - new httpRequest[512], szPlayerId[4], function[256], functionData[512], playerId; - parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function), functionData, charsmax(functionData)); + new httpRequest[MAX_HTTP_REQUEST + 1], szPlayerId[4], function[MAX_FUNCTION + 1], playerId; + parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function)); playerId = str_to_num(szPlayerId); log_to_file(LOG_FILE, "Przekroczono limit czasu zapytania HTTP^n%s", httpRequest); @@ -2071,20 +2081,19 @@ public mySocketTimeout(requestData[], socketId) client_print_color(playerId, Red, "^4[%s] ^1Przekroczono limit czasu zapytania HTTP.", PREFIX); } - mySocketCallCallback(function, functionData, "", playerId, SOCKET_TIMEOUT); + mySocketCallCallback(function, _, playerId, SOCKET_TIMEOUT); } -mySocketCallCallback(const function[], const functionData[], const receiveDataContent[], playerId, status, statusCode = 0) +mySocketCallCallback(const function[], const httpResponseContent[] = "", playerId, socketStatus, statusCode = 0) { if (! strlen(function)) { return; } if (callfunc_begin(function) == 1) { - callfunc_push_str(functionData); // function data - callfunc_push_str(receiveDataContent); + callfunc_push_str(httpResponseContent); callfunc_push_int(playerId); // player id - callfunc_push_int(status); + callfunc_push_int(socketStatus); callfunc_push_int(statusCode); callfunc_end(); } else { @@ -2092,27 +2101,27 @@ mySocketCallCallback(const function[], const functionData[], const receiveDataCo } } -/*Array:mySocketParseHeader(const header[]) -{ - new Array:explodedHeader; - explodedHeader = ArrayCreate(e_KeyValue); - - new headerCopy[512]; - formatex(headerCopy, charsmax(headerCopy), "%s", header); - while (strlen(headerCopy)) { - new line[256], pair[e_KeyValue]; - - split(headerCopy, line, charsmax(line), headerCopy, charsmax(headerCopy), "^r^n"); - split(line, pair[kvKEY], 127, pair[kvVALUE], 127, ":"); - - trim(pair[kvKEY]); - trim(pair[kvVALUE]); - - ArrayPushArray(explodedHeader, pair); - } - - return explodedHeader; -}*/ +//Array:mySocketParseHeader(const header[]) +//{ +// new Array:explodedHeader; +// explodedHeader = ArrayCreate(e_KeyValue); +// +// new headerCopy[512]; +// formatex(headerCopy, charsmax(headerCopy), "%s", header); +// while (strlen(headerCopy)) { +// new line[256], pair[e_KeyValue]; +// +// split(headerCopy, line, charsmax(line), headerCopy, charsmax(headerCopy), "^r^n"); +// split(line, pair[kvKEY], 127, pair[kvVALUE], 127, ":"); +// +// trim(pair[kvKEY]); +// trim(pair[kvVALUE]); +// +// ArrayPushArray(explodedHeader, pair); +// } +// +// return explodedHeader; +//} /** * Close socket @@ -2123,18 +2132,18 @@ public mySocketClose(socketID) { socket_close(g_sockets[socketID]); g_sockets[socketID] = 0; - remove_task(TASK_CHECK_SOCKET + socketID); - remove_task(TASK_TIME_OUT + socketID); + remove_task(TASK_SOCKET_CHECK + socketID); + remove_task(TASK_SOCKET_TIME_OUT + socketID); } // ----------------------------------------------------- End of sockets -------------------------------------------------------- -_getServicePluginByID( id[]) +_getServicePluginByID(const id[]) { - new temp[MAX_NAME+1]; + new tmp[MAX_SERVICE_ID + 1]; for (new i = 0; i < ArraySize(service_ids); ++i) { - ArrayGetString(service_ids, i, temp, charsmax(temp)); - if (equali(id, temp)) { + ArrayGetString(service_ids, i, tmp, charsmax(tmp)); + if (equali(id, tmp)) { return ArrayGetCell(service_plugins, i); } } @@ -2142,7 +2151,7 @@ _getServicePluginByID( id[]) return -1; } -_getServiceByID( id[]) +_getServiceByID(const id[]) { new service[e_Service]; for (new i = 0; i < ArraySize(services); ++i) { @@ -2154,13 +2163,13 @@ _getServiceByID( id[]) return -1; } -_getNumberByTariff( tariff, number[], len) +_getNumberByTariff(tariff, output[], len) { new sms[e_SMS]; for (new i = 0; i < ArraySize(smses); ++i) { ArrayGetArray(smses, i, sms); if (tariff == sms[sTARIFF]) { - copy(number, len, sms[NUMBER]); + copy(output, len, sms[NUMBER]); return; } } @@ -2172,42 +2181,24 @@ bool:isDebug() } // --------------------------------------------------------- Stocks ------------------------------------------------------------ -stock deleteEmptyLines(sciezka[]) + +stock bool:is_steam(id) { - if (!file_exists(sciezka)) { - return; - } - - new zastepcza[64], licznik = 0 - do { - formatex(zastepcza, charsmax(zastepcza), "%d", licznik); - ++licznik; - } while (file_exists(zastepcza)) - - new szLine[128], iLen; - for (new i=0; read_file(sciezka, i, szLine, charsmax(szLine), iLen); i++) { - trim(szLine); - // pusta linia - if (!strlen(szLine)) - continue; - - write_file(zastepcza, szLine, -1); + new auth[32]; + get_user_authid(id, auth, charsmax(auth)); + if (contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1) { + return true; } - if (file_size(zastepcza)>1) { - //Usuwa stary plik - unlink(sciezka); - //Zmienia nazwe tymczasowego pliku na stary plik - rename_file(zastepcza, sciezka, 1); - } + return false; } -stock escapeQuotes(string[], string_len=64) +stock escapeQuotes(string[], string_len) { replace_all(string, string_len, "'", "\'"); } -stock get_sms_cost(szNumber[]) +stock get_sms_cost(const szNumber[]) { if (strlen(szNumber) < 4) { return 0; @@ -2254,7 +2245,7 @@ stock groupDigits(a, output[], len) stock getXMLValue(const szText[], const tag[], output[], len) { - static temp[64], textStart, textEnd; + new temp[64], textStart, textEnd; formatex(temp, charsmax(temp), "<%s>", tag); textStart = contain(szText, temp); @@ -2268,7 +2259,7 @@ stock getXMLValue(const szText[], const tag[], output[], len) } } -stock StringURLEncode( const szInput[ ], szOutput[ ], const iLen) +stock StringURLEncode(const szInput[], szOutput[], const iLen) { static const HEXCHARS[ 16 ] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp2.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp2.sma deleted file mode 100644 index ecdddf2..0000000 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp2.sma +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include -native cod_get_user_class(id); -native cod_get_user_xp(id); -native cod_set_user_xp(id, wartosc); - -new const service_id[MAX_ID] = "cod_exp"; -#define PLUGIN "Sklep-SMS: Usluga COD EXP" -#define AUTHOR "SeeK" - -public plugin_natives() { - set_native_filter("native_filter"); -} - -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) -} - -public plugin_cfg() { - ss_register_service(service_id) -} - -public ss_service_addingtolist(id) { - client_print(id, print_chat, "[%s] Musisz odczekac tydzien od restartu leveli, aby moc zakupic EXP.", PREFIX); - return ITEM_DISABLED; -} - -public ss_service_bought(id, amount) { - cod_set_user_xp(id, cod_get_user_xp(id)+amount); -} - -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown - pause_plugin(); - return PLUGIN_HANDLED; - } - return PLUGIN_CONTINUE; -} From 81b623623e10e6a1df6e5927125f1496e6d2d448 Mon Sep 17 00:00:00 2001 From: seek Date: Wed, 13 Apr 2016 11:11:32 +0200 Subject: [PATCH 016/124] Shop is blocked, not disabled, when licence is not valid --- .../addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 9 +++++---- .../amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma | 2 +- .../addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma | 3 ++- .../addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma | 3 ++- .../scripting/sklepsms_usluga_dodatkowe_flagi.sma | 9 +++++---- .../addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma | 3 ++- .../addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma | 3 ++- .../scripting/sklepsms_usluga_rezerwacja_nicku.sma | 8 +------- .../scripting/sklepsms_usluga_rezerwacja_slota.sma | 9 +++++---- cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma | 9 +++++---- .../addons/amxmodx/scripting/sklepsms_usluga_vippro.sma | 9 +++++---- .../addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma | 3 ++- 13 files changed, 38 insertions(+), 34 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index b9ecfb8..13b26f0 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.3.5" +#define VERSION "3.3.6" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 5b37147..525d22d 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -228,7 +228,7 @@ public plugin_precache() } service_plugins = ArrayCreate(); - service_ids = ArrayCreate(MAX_SERVICE_ID); + service_ids = ArrayCreate(MAX_SERVICE_ID + 1); g_playersFlags = ArrayCreate(e_PlayerFlags); smses = ArrayCreate(e_SMS); @@ -1874,12 +1874,13 @@ public bool:native_is_steam(plugin, params) // ################################ _error10() { - _make_error("Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); + log_to_file(LOG_FILE, "Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); + g_blocked = true; } _error13() { - formatex(g_szTemp, charsmax(g_szTemp), "Error 13 - Brak licencji o numerze identyfikacyjnym: %s lub bledne haslo.", license); - _make_error(g_szTemp); + log_to_file(LOG_FILE, "Error 13 - Brak licencji o numerze identyfikacyjnym: %s lub bledne haslo.", license); + g_blocked = true; } _error14() { diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma index 0941b40..c458fa3 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma @@ -6,7 +6,7 @@ native bf2_get_badge_name(badge_id, badge_level, name[], len); native bf2_get_user_badge(index, badge_id); native bf2_set_user_badge(index, badge_id, level); -new const service_id[MAX_ID] = "bf2_badge"; +new const service_id[MAX_SERVICE_ID + 1] = "bf2_badge"; #define PLUGIN "Sklep-SMS: Usluga BF2 Odznaki" #define AUTHOR "SeeK" diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma index 463248c..63cb26e 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma @@ -5,7 +5,7 @@ native cod_get_user_class(id); native cod_get_user_xp(id); native cod_set_user_xp(id, wartosc); -new const service_id[MAX_ID] = "cod_exp"; +new const service_id[MAX_SERVICE_ID + 1] = "cod_exp"; #define PLUGIN "Sklep-SMS: Usluga COD EXP" #define AUTHOR "SeeK" @@ -41,5 +41,6 @@ public native_filter(const native_name[], index, trap) { pause_plugin(); return PLUGIN_HANDLED; } + return PLUGIN_CONTINUE; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma index 73a238b..902157d 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma @@ -11,7 +11,7 @@ native cod_set_user_class(id, klasa, zmien=0); #define TASK_CHECK_FIRST 1000 #define TASK_CHECK_SECOND 2000 -new const service_id[MAX_ID] = "cod_exp_transfer"; +new const service_id[MAX_SERVICE_ID + 1] = "cod_exp_transfer"; #define PLUGIN "Sklep-SMS: Usluga COD PE" #define AUTHOR "SeeK" @@ -191,5 +191,6 @@ public native_filter(const native_name[], index, trap) { pause_plugin(); return PLUGIN_HANDLED; } + return PLUGIN_CONTINUE; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma index a60fc2e..9400f32 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma @@ -1,10 +1,10 @@ #include #include -new const service_id[MAX_ID] = ""; +new const service_id[MAX_SERVICE_ID + 1] = ""; #define PLUGIN "Sklep-SMS: Usluga Dodatkowe Flagi" -new szFlags[32+1]; +new szFlags[32 + 1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -14,14 +14,15 @@ public plugin_cfg() { ss_register_service(service_id); } -public ss_service_data(name[],flags[]) { +public ss_service_data(name[], flags[]) { copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; + } return ITEM_ENABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma index 95b7175..fbc02c8 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma @@ -3,7 +3,7 @@ native get_user_bm(id); native set_user_bm(id, ilosc); -new const service_id[MAX_ID] = "gxm_bm"; +new const service_id[MAX_SERVICE_ID + 1] = "gxm_bm"; #define PLUGIN "Sklep-SMS: Usluga GXM BM" #define AUTHOR "SeeK" @@ -30,5 +30,6 @@ public native_filter(const native_name[], index, trap) { pause_plugin(); return PLUGIN_HANDLED; } + return PLUGIN_CONTINUE; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma index 8cdeda5..013f3e2 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma @@ -3,7 +3,7 @@ native get_user_xp(id); native set_user_xp(id, ilosc); -new const service_id[MAX_ID] = "gxm_exp"; +new const service_id[MAX_SERVICE_ID + 1] = "gxm_exp"; #define PLUGIN "Sklep-SMS: Usluga GXM EXP" #define AUTHOR "SeeK" @@ -30,5 +30,6 @@ public native_filter(const native_name[], index, trap) { pause_plugin(); return PLUGIN_HANDLED; } + return PLUGIN_CONTINUE; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma index ad4f94f..61e7efa 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma @@ -1,11 +1,9 @@ #include #include -new const service_id[MAX_ID] = "resnick"; +new const service_id[MAX_SERVICE_ID + 1] = "resnick"; #define PLUGIN "Sklep-SMS: Usluga Rezerwacja Nicku" -new szFlags[32+1]; - public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") } @@ -13,7 +11,3 @@ public plugin_init() { public plugin_cfg() { ss_register_service(service_id); } - -public ss_service_data(name[], flags[]) { - copy(szFlags, charsmax(szFlags), flags); -} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma index f22555e..3e1d34e 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma @@ -1,10 +1,10 @@ #include #include -new const service_id[MAX_ID] = "resslot"; +new const service_id[MAX_SERVICE_ID + 1] = "resslot"; #define PLUGIN "Sklep-SMS: Usluga Rezerwacja Slota" -new szFlags[32+1]; +new szFlags[32 + 1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -14,14 +14,15 @@ public plugin_cfg() { ss_register_service(service_id); } -public ss_service_data(name[],flags[]) { +public ss_service_data(name[], flags[]) { copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; + } return ITEM_ENABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma index b409d5b..d2e9cb5 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma @@ -1,10 +1,10 @@ #include #include -new const service_id[MAX_ID] = "vip"; +new const service_id[MAX_SERVICE_ID + 1] = "vip"; #define PLUGIN "Sklep-SMS: Usluga VIP" -new szFlags[32+1]; +new szFlags[32 + 1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -14,14 +14,15 @@ public plugin_cfg() { ss_register_service(service_id); } -public ss_service_data(name[],flags[]) { +public ss_service_data(name[], flags[]) { copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; + } return ITEM_ENABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma index bc6b210..bcce8a2 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma @@ -1,10 +1,10 @@ #include #include -new const service_id[MAX_ID] = "vippro"; +new const service_id[MAX_SERVICE_ID + 1] = "vippro"; #define PLUGIN "Sklep-SMS: Usluga VIP PRO" -new szFlags[32+1]; +new szFlags[32 + 1]; public plugin_init() { register_plugin(PLUGIN, VERSION, "SeeK") @@ -14,14 +14,15 @@ public plugin_cfg() { ss_register_service(service_id); } -public ss_service_data(name[],flags[]) { +public ss_service_data(name[], flags[]) { copy(szFlags, charsmax(szFlags), flags); } public ss_service_addingtolist(id) { // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) + if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; + } return ITEM_ENABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma index 3c13966..1fda5ff 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma @@ -3,7 +3,7 @@ native zp_get_user_ammo_packs(id); native zp_set_user_ammo_packs(id, amount); -new const service_id[MAX_ID] = "zp_ap"; +new const service_id[MAX_SERVICE_ID + 1] = "zp_ap"; #define PLUGIN "Sklep-SMS: Usluga ZP AP" #define AUTHOR "SeeK" @@ -30,5 +30,6 @@ public native_filter(const native_name[], index, trap) { pause_plugin(); return PLUGIN_HANDLED; } + return PLUGIN_CONTINUE; } From 331f2011f28c30272a3d543af3a8455489dfd857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 13 Sep 2018 15:05:25 +0200 Subject: [PATCH 017/124] Build using docker (#1) --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 525d22d..f91c04e 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -794,7 +794,7 @@ public kodZwrotny(id) // ############# ZAKUP USLUGI ############### new url[MAX_URL + 1]; - if (true) { + { new service[e_Service], auth_data[32 + 1], price[e_Price], ip[MAX_IP + 1]; new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_password[MAX_PASSWORD * 2 + 1], u_sms_service[MAX_TRANS_SERVICE_ID * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; @@ -1657,7 +1657,7 @@ public validateLicense() { new url[MAX_URL + 1]; - if (true) { + { new serverNameEscaped[MAX_SERVER_NAME * 2 + 1]; get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); From 332f8e0383af4e1871e96c79fc2c148cb2d037a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 14 Sep 2018 10:50:08 +0200 Subject: [PATCH 018/124] Bump version to 3.4.0 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 13b26f0..1937d12 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.3.6" +#define VERSION "3.4.0" #define PREFIX "SKLEP-SMS" From 0460616827e1447a654d1fc286e1b08271627079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 15 Nov 2018 23:26:38 +0100 Subject: [PATCH 019/124] Docker for server --- server/Dockerfile | 42 ++++++++++++++++++++++++++++++++++++ server/files/liblist.gam | 16 ++++++++++++++ server/files/plugins.ini | 1 + server/files/steam_appid.txt | 1 + server/run.sh | 8 +++++++ 5 files changed, 68 insertions(+) create mode 100644 server/Dockerfile create mode 100644 server/files/liblist.gam create mode 100644 server/files/plugins.ini create mode 100644 server/files/steam_appid.txt create mode 100755 server/run.sh diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..fb840c1 --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,42 @@ +FROM cm2network/steamcmd + +ARG metamod_version=1.20 +ARG amxmod_version=1.8.2 + +# Install HLDS +RUN /home/steam/steamcmd/steamcmd.sh +login anonymous +force_install_dir /home/steam/dedicated +app_update 90 validate +quit; exit 0 +RUN /home/steam/steamcmd/steamcmd.sh +login anonymous +force_install_dir /home/steam/dedicated +app_update 90 validate +quit; exit 0 +RUN /home/steam/steamcmd/steamcmd.sh +login anonymous +force_install_dir /home/steam/dedicated +app_update 90 validate +quit + +RUN mkdir -p ~/.steam && ln -s /home/steam/dedicated ~/.steam/sdk32 +RUN ln -s /home/steam/steamcmd/ /home/steam/dedicated/steamcmd +ADD server/files/steam_appid.txt /home/steam/dedicated/steam_appid.txt + +# Add default config +# ADD files/server.cfg /opt/hlds/cstrike/server.cfg + +# Install metamod +RUN mkdir -p /home/steam/dedicated/cstrike/addons/metamod/dlls +RUN curl -sqL "http://prdownloads.sourceforge.net/metamod/metamod-$metamod_version-linux.tar.gz?download" | tar -C /home/steam/dedicated/cstrike/addons/metamod/dlls -zxvf - +ADD server/files/liblist.gam /home/steam/dedicated/cstrike/liblist.gam +ADD server/files/plugins.ini /home/steam/dedicated/cstrike/addons/metamod/plugins.ini + +# Install dproto +# RUN mkdir -p /home/steam/dedicated/cstrike/addons/dproto +# ADD files/dproto_i386.so /opt/hlds/cstrike/addons/dproto/dproto_i386.so +# ADD files/dproto.cfg /opt/hlds/cstrike/dproto.cfg + +# Install AMX mod X +RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-base-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - +RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-cstrike-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - + +# Add shopsms +RUN sed -i '1s/^/sklep_sms.amxx\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini +ADD cstrike/addons/amxmodx/plugins/* /home/steam/dedicated/cstrike/addons/amxmodx/plugins/ +ADD cstrike/addons/amxmodx/configs/* /home/steam/dedicated/cstrike/addons/amxmodx/configs/ + +WORKDIR /home/steam/dedicated + +VOLUME /home/steam/dedicated + +CMD /home/steam/dedicated/hlds_run -game cstrike +maxplayers 16 +map de_dust2 diff --git a/server/files/liblist.gam b/server/files/liblist.gam new file mode 100644 index 0000000..39108d4 --- /dev/null +++ b/server/files/liblist.gam @@ -0,0 +1,16 @@ +game "Counter-Strike" +url_info "www.counter-strike.net" +url_dl "" +version "1.6" +size "184000000" +svonly "0" +secure "1" +type "multiplayer_only" +cldll "1" +hlversion "1111" +nomodels "1" +nohimodel "1" +mpentity "info_player_start" +gamedll_linux "addons/metamod/dlls/metamod_i386.so" +trainmap "tr_1" +edicts "1800" \ No newline at end of file diff --git a/server/files/plugins.ini b/server/files/plugins.ini new file mode 100644 index 0000000..726c452 --- /dev/null +++ b/server/files/plugins.ini @@ -0,0 +1 @@ +linux addons/amxmodx/dlls/amxmodx_mm_i386.so diff --git a/server/files/steam_appid.txt b/server/files/steam_appid.txt new file mode 100644 index 0000000..9a03714 --- /dev/null +++ b/server/files/steam_appid.txt @@ -0,0 +1 @@ +10 \ No newline at end of file diff --git a/server/run.sh b/server/run.sh new file mode 100755 index 0000000..5a70838 --- /dev/null +++ b/server/run.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +DIR="$( cd "$( dirname $( dirname "${BASH_SOURCE[0]}" ) )" && pwd )" + +# RUN +IMAGE_NAME="cs16" +docker build -t ${IMAGE_NAME} -f "$DIR/server/Dockerfile" . \ +&& docker run -it ${IMAGE_NAME} From 78031fc71040eefe3ae4f0b01d3934376a7fc924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 16 Nov 2018 09:20:44 +0100 Subject: [PATCH 020/124] Bump version --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 1937d12..fc4cc9c 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.4.0" +#define VERSION "3.4.1" #define PREFIX "SKLEP-SMS" @@ -33,6 +33,7 @@ #define MAX_URL_HOST 128 #define MAX_URL_PATH 384 #define MAX_URL MAX_URL_HOST + MAX_URL_PATH +#define MAX_BODY 1023 #define MAX_FUNCTION 128 #define MAX_HTTP_RESPONSE 1023 #define MAX_HTTP_REQUEST MAX_URL + 64 From 0eb61a6c019547f14fcd4187a9a9f1187a04fd79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 16 Nov 2018 12:29:42 +0100 Subject: [PATCH 021/124] Use new validation API (#2) --- .../scripting/include/shop_sms_const.inc | 5 +- .../addons/amxmodx/scripting/sklep_sms.sma | 142 +++++++++++------- server/Dockerfile | 2 + server/run.sh | 2 +- 4 files changed, 93 insertions(+), 58 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index fc4cc9c..181fbf3 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.4.1" +#define VERSION "3.5.0" #define PREFIX "SKLEP-SMS" @@ -33,7 +33,8 @@ #define MAX_URL_HOST 128 #define MAX_URL_PATH 384 #define MAX_URL MAX_URL_HOST + MAX_URL_PATH -#define MAX_BODY 1023 +#define MAX_HEADERS 128 +#define MAX_BODY 384 #define MAX_FUNCTION 128 #define MAX_HTTP_RESPONSE 1023 #define MAX_HTTP_REQUEST MAX_URL + 64 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index f91c04e..e003c40 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -97,7 +97,7 @@ new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_k new config_path[128]; //Licencja -new license[32], license_password[33]; +new license_token[63]; new bool:g_footer = true; new g_serverIp[MAX_IP + 1]; new g_serverPort[MAX_PORT + 1]; @@ -142,7 +142,7 @@ new st_currency[16], Float:st_vat; new g_shopPageUrl[MAX_URL + 1]; -new g_shopPagePort = 80; +//new g_shopPagePort = 80; new bool:g_shopRegistered = false; new bool:g_AmxbansExists = false; @@ -833,7 +833,7 @@ public kodZwrotny(id) ); } - getWebPage(url, g_shopPagePort, "getWebPagePurchaseService", id); + makeRequest("GET", url, "", "", "getWebPagePurchaseService", id); } public getWebPagePurchaseService(const content[], playerId, socketStatus, statusCode) @@ -1438,7 +1438,7 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) // Get shop settings formatex(g_szTemp, charsmax(g_szTemp), "SELECT * FROM `%ssettings` \ - WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_login', 'license_password')", + WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_password')", TABLE_PREFIX ); SQL_ThreadQuery(SqlTuple, "getSettings", g_szTemp); @@ -1586,11 +1586,13 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); // TODO: implement https - if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "https://", "")) { - g_shopPagePort = 80; - } else if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "http://", "")) { - g_shopPagePort = 80; - } + // if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "https://", "")) { + // g_shopPagePort = 80; + // } else if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "http://", "")) { + // g_shopPagePort = 80; + // } + replace(g_shopPageUrl, charsmax(g_shopPageUrl), "https://", ""); + replace(g_shopPageUrl, charsmax(g_shopPageUrl), "http://", ""); // Remove trailing slash if (g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { @@ -1617,12 +1619,8 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) copy(st_random_key, charsmax(st_random_key), value); md5(st_random_key, st_random_key_md5); // Hashujemy random key } - else if (equali(key, "license_login")) { - copy(license, charsmax(license), value); - trim(license); - } else if (equali(key, "license_password")) { - copy(license_password, charsmax(license_password), value); + copy(license_token, charsmax(license_token), value); } SQL_NextRow(Query); @@ -1654,55 +1652,71 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) // Funkcja ktora wysyla zapytanie do serwera o sprawdzenie czy licencja jest prawidlowa public validateLicense() -{ - new url[MAX_URL + 1]; +{ + new headers[MAX_HEADERS + 1]; + new body[MAX_BODY + 1]; { new serverNameEscaped[MAX_SERVER_NAME * 2 + 1]; get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); - - formatex(url, charsmax(url), - "license.sklep-sms.pl/license.php?action=login_server&type=engine_amxx&license_id=%s&license_password=%s&server_ip=%s:%s&version=%s&name=%s", - license, license_password, g_serverIp, g_serverPort, VERSION, serverNameEscaped + + formatex(headers, charsmax(headers), + "Authorization: %s^r^n", + license_token + ); + + formatex(body, charsmax(body), + "platform=amxmodx&url=%s:%s&name=%s&version=%s", + g_serverIp, g_serverPort, serverNameEscaped, VERSION ); } - getWebPage(url, 80, "getWebPageValidateLicense"); + makeRequest("POST", "license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); } -public getWebPageValidateLicense(const content[], playerId, status, statusCode) +public onValidateLicenseResponse(const content[], playerId, status, statusCode) { switch (status) { case SOCKET_OK: { + g_shopRegistered = false; + + if (statusCode == 401) { + _errorInvalidToken(); + return; + } + + if (statusCode == 422) { + _errorValidationError(); + return; + } + + if (statusCode == 402) { + _errorPaymentRequired(); + return; + } + if (statusCode >= 300) { - g_shopRegistered = false; - log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z powodu blednego HTTP CODE."); + _errorInvalidResponse(statusCode); return; } new text[32 + 1]; getXMLValue(content, "text", text, charsmax(text)); trim(text); - - if (equal(text, "updated")) { - g_shopRegistered = true; - - new footer[2]; - getXMLValue(content, "footer", footer, charsmax(footer)); - g_footer = str_to_num(footer) ? true : false; - - log_amx("Walidacja licencji o numerze identyfikacyjnym: %s zostala zakonczona pomyslnie", license); - } - else if (equal(text, "not_updated")) { - _error14(); - } - else if (equal(text, "not_logged_successfully")) { - _error13(); - } - else { + + if (!equal(text, "ok")) { + g_shopRegistered = false; log_to_file(LOG_FILE, "%s", content); - _error10(); + _errorUnknown(); + return; } + + new footer[2]; + getXMLValue(content, "footer", footer, charsmax(footer)); + g_footer = str_to_num(footer) ? true : false; + + g_shopRegistered = true; + log_amx("Walidacja licencji zostala zakonczona pomyslnie"); } case SOCKET_TIMEOUT: { @@ -1873,18 +1887,28 @@ public bool:native_is_steam(plugin, params) // ## 5 - probem z serwerem // ################################ -_error10() { +_errorUnknown() { log_to_file(LOG_FILE, "Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); g_blocked = true; } -_error13() { - log_to_file(LOG_FILE, "Error 13 - Brak licencji o numerze identyfikacyjnym: %s lub bledne haslo.", license); +_errorInvalidResponse(statusCode) { + log_to_file(LOG_FILE, "Error 11 - Serwer walidacyjny zwrocil bledny HTTP CODE %d.", statusCode); + g_blocked = true; +} + +_errorValidationError() { + log_to_file(LOG_FILE, "Error 12 - Walidacja wyslanych danych nie powiodla sie."); + g_blocked = true; +} + +_errorInvalidToken() { + log_to_file(LOG_FILE, "Error 13 - Bledny token licencji."); g_blocked = true; } -_error14() { - log_to_file(LOG_FILE, "Error 14 - Nie udalo sie zaktualizowac aktywnosci serwera."); +_errorPaymentRequired() { + log_to_file(LOG_FILE, "Error 14 - Licencja nie wspiera tego typu serwera lub przekroczono limit stron WWW."); g_blocked = true; } @@ -1921,32 +1945,40 @@ _make_error(message[]) { /* ############# Koniec: Licencja ################## */ /** - * Get page content + * Make HTTP request * - * @param const char[] url path (eg. example.com/shop/ddd) - * @param int port eg. 80 + * @param const char[] method GET POST PUT etc. + * @param const char[] url path (eg. example.com/shop/ddd) + * @param const char[] headers headers + * @param const char[] body body params * @param const char[] callback callback function * @param int playerId id of the player * * @return bool */ -bool:getWebPage(const url[MAX_URL + 1], port = 80, const callback[MAX_FUNCTION + 1] = "", playerId = 0) +bool:makeRequest(const method[], const url[MAX_URL + 1], const headers[], const body[], const callback[MAX_FUNCTION + 1] = "", playerId = 0) { static host[MAX_URL_HOST + 1], path[MAX_URL_PATH + 1]; host[0] = '^0'; path[0] = '^0'; split(url, host, charsmax(host), path, charsmax(path), "/"); - new socketId = mySocketOpen(host, port, playerId); + new socketId = mySocketOpen(host, 80, playerId); if (socketId == SS_ERROR) { return false; } new httpRequest[MAX_HTTP_REQUEST + 1]; formatex(httpRequest, charsmax(httpRequest), - "GET /%s HTTP/1.1^r^n\ - Host: %s^r^n^r^n", - path, host + "%s /%s HTTP/1.1^r^n\ + Host: %s^r^n\ + Content-Length: %d^r^n\ + Content-Type: application/x-www-form-urlencoded; charset=UTF-8^r^n\ + User-Agent: amxmodx^r^n\ + %s\ + ^r^n\ + %s", + method, path, host, strlen(body), headers, body ); socket_send(g_sockets[socketId], httpRequest, strlen(httpRequest)); diff --git a/server/Dockerfile b/server/Dockerfile index fb840c1..9408a27 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -39,4 +39,6 @@ WORKDIR /home/steam/dedicated VOLUME /home/steam/dedicated +EXPOSE 27015 + CMD /home/steam/dedicated/hlds_run -game cstrike +maxplayers 16 +map de_dust2 diff --git a/server/run.sh b/server/run.sh index 5a70838..dd9ca9b 100755 --- a/server/run.sh +++ b/server/run.sh @@ -5,4 +5,4 @@ DIR="$( cd "$( dirname $( dirname "${BASH_SOURCE[0]}" ) )" && pwd )" # RUN IMAGE_NAME="cs16" docker build -t ${IMAGE_NAME} -f "$DIR/server/Dockerfile" . \ -&& docker run -it ${IMAGE_NAME} +&& docker run --rm -it -p 27015:27015 ${IMAGE_NAME} From 4456192e71826066b9dd0f447bf49d5ede678032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 29 Nov 2018 21:05:27 +0100 Subject: [PATCH 022/124] Use some forwards (#3) --- .../scripting/include/shop_sms_const.inc | 2 +- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 181fbf3..66286c8 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.5.0" +#define VERSION "3.5.1" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index e003c40..00e389e 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -13,6 +13,8 @@ #pragma semicolon 1 forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); +forward client_admin(id, flags); +forward amxx_admin_access(id, flags, timestamp); #define FLAG_NICK (1<<5) @@ -1094,6 +1096,8 @@ public pre_reassignPlayersFlags(id) */ _reassignPlayersFlags(id = 0) { + addUsersToGlobalArray() + for (new i = 1; i <= get_maxplayers(); ++i) { if (! is_user_connected(i)) { continue; @@ -1184,13 +1188,22 @@ public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_ public amxbans_sql_initialized() { g_AmxbansExists = true; - addUsersToGlobalArray(); _reassignPlayersFlags(); } +public client_admin(id, flags) +{ + _usersCheckUser(id); +} + +public amxx_admin_access(id, flags, timestamp) +{ + _usersCheckUser(id); +} + // Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy public addUsersToGlobalArray() -{ +{ if (!g_playersLoaded) { // Dane uzytkownikow nie zostaly jeszcze zaladowane set_task(0.1, "addUsersToGlobalArray"); return; From f27c40cd9de03d46e8c7464ded795dcb9dab13fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 10 Dec 2018 14:24:56 +0100 Subject: [PATCH 023/124] Fix build --- .../scripting/include/custom_color_chat.inc | 13 ++++++++++++ .../addons/amxmodx/scripting/sklep_sms.sma | 20 ++++++++++++------- .../scripting/sklepsms_usluga_cod_exp.sma | 2 +- .../scripting/sklepsms_usluga_cod_te.sma | 2 +- 4 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc diff --git a/cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc b/cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc new file mode 100644 index 0000000..3a162c2 --- /dev/null +++ b/cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc @@ -0,0 +1,13 @@ +#if defined _custom_color_chat_included + #endinput +#endif +#define _custom_color_chat_included + +#pragma library "custom_color_chat" + +#if AMXX_VERSION_NUM < 183 +#include +#else +#define Red print_team_red +#define Blue print_team_blue +#endif diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 00e389e..3f868ee 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -3,12 +3,7 @@ #include #include #include -#if AMXX_VERSION_NUM < 183 -#include -#else -#define Red print_team_red -#define Blue print_team_blue -#endif +#include #pragma semicolon 1 @@ -1096,7 +1091,7 @@ public pre_reassignPlayersFlags(id) */ _reassignPlayersFlags(id = 0) { - addUsersToGlobalArray() + addUsersToGlobalArray(); for (new i = 1; i <= get_maxplayers(); ++i) { if (! is_user_connected(i)) { @@ -2226,6 +2221,17 @@ bool:isDebug() return bool:get_pcvar_num(cvar_debug); } +// ------------------------------------------------- Versions Compatibility ---------------------------------------------------- + +#if !defined md5 + +md5(const szString[], md5buffer[34]) +{ + hash_string(szString, Hash_Md5, md5buffer, 34); +} + +#endif + // --------------------------------------------------------- Stocks ------------------------------------------------------------ stock bool:is_steam(id) diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma index 63cb26e..868380d 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma @@ -1,6 +1,6 @@ #include #include -#include +#include native cod_get_user_class(id); native cod_get_user_xp(id); native cod_set_user_xp(id, wartosc); diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma index 902157d..d5972a1 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma @@ -1,6 +1,6 @@ #include #include -#include +#include native cod_get_classes_num(); native cod_get_class_name(perk, Return[], len); native cod_get_user_class(id); From e5f0eeb7e862f14f0c88853d6e42a1917203f182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 10 Dec 2018 14:41:06 +0100 Subject: [PATCH 024/124] Remove deprecations --- .../addons/amxmodx/scripting/sklep_sms.sma | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 3f868ee..3c9387f 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1333,17 +1333,17 @@ public _usersCheckUser(id) new password[MAX_PASSWORD + 1], password_md5[34]; get_user_info(id, "_pw", password, charsmax(password)); - md5(password, password_md5); + vc_md5(password, password_md5); if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { get_user_info(id, "_pw2", password, charsmax(password)); - md5(password, password_md5); + vc_md5(password, password_md5); if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { get_user_info(id, "_pw3", password, charsmax(password)); - md5(password, password_md5); + vc_md5(password, password_md5); if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { get_user_info(id, "_ss", password, charsmax(password)); - md5(password, password_md5); + vc_md5(password, password_md5); if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { if (! (player_flags[pfTYPE]&FLAG_KICK)) { // Nie kickuj gracza, tylko mu nie przydziel flag continue; @@ -1625,7 +1625,7 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) } else if (equali(key, "random_key")) { copy(st_random_key, charsmax(st_random_key), value); - md5(st_random_key, st_random_key_md5); // Hashujemy random key + vc_md5(st_random_key, st_random_key_md5); // Hashujemy random key } else if (equali(key, "license_password")) { copy(license_token, charsmax(license_token), value); @@ -2043,7 +2043,7 @@ public mySocketCheckData(const requestData[], socketId) { socketId -= TASK_SOCKET_CHECK; - if (! socket_change(g_sockets[socketId])) { + if (! vc_socket_change(g_sockets[socketId])) { set_task(0.6, "mySocketCheckData", TASK_SOCKET_CHECK + socketId, requestData, strlen(requestData)); return; } @@ -2223,14 +2223,23 @@ bool:isDebug() // ------------------------------------------------- Versions Compatibility ---------------------------------------------------- -#if !defined md5 - -md5(const szString[], md5buffer[34]) +vc_md5(const szString[], md5buffer[34]) { + #if defined hash_string hash_string(szString, Hash_Md5, md5buffer, 34); + #else + md5(szString, md5buffer); + #endif } -#endif +vc_socket_change(socket) +{ + #if defined socket_is_readable + return socket_is_readable(socket); + #else + return socket_change(socket); + #endif +} // --------------------------------------------------------- Stocks ------------------------------------------------------------ From a1b381865a00ac2de49574339f235bb6cac2843d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 25 Mar 2019 17:48:48 +0100 Subject: [PATCH 025/124] Fix (#4) --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 2 +- server/Dockerfile | 2 +- server/run.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 3c9387f..044fd36 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1603,7 +1603,7 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) replace(g_shopPageUrl, charsmax(g_shopPageUrl), "http://", ""); // Remove trailing slash - if (g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { + if (strlen(g_shopPageUrl) && g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; } diff --git a/server/Dockerfile b/server/Dockerfile index 9408a27..2ad7c38 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -31,7 +31,7 @@ RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-base-linux RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-cstrike-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - # Add shopsms -RUN sed -i '1s/^/sklep_sms.amxx\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini +RUN sed -i '1s/^/sklep_sms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini ADD cstrike/addons/amxmodx/plugins/* /home/steam/dedicated/cstrike/addons/amxmodx/plugins/ ADD cstrike/addons/amxmodx/configs/* /home/steam/dedicated/cstrike/addons/amxmodx/configs/ diff --git a/server/run.sh b/server/run.sh index dd9ca9b..63f3279 100755 --- a/server/run.sh +++ b/server/run.sh @@ -5,4 +5,4 @@ DIR="$( cd "$( dirname $( dirname "${BASH_SOURCE[0]}" ) )" && pwd )" # RUN IMAGE_NAME="cs16" docker build -t ${IMAGE_NAME} -f "$DIR/server/Dockerfile" . \ -&& docker run --rm -it -p 27015:27015 ${IMAGE_NAME} +&& docker run --rm -it -p 27015:27015 --network sklepsms_default --name sklepsms_cs16 ${IMAGE_NAME} From 0d13d426195231e35cb2ae3346526d21648ede5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 26 Mar 2019 00:01:04 +0100 Subject: [PATCH 026/124] Watch on changes (#5) --- .../addons/amxmodx/scripting/sklep_sms.sma | 45 ++++++++++--------- server/Dockerfile | 2 +- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 044fd36..feb60bf 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1422,6 +1422,7 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) } g_blocked = true; + return; } if (SQL_NumResults(Query) <= 0) { @@ -1679,6 +1680,7 @@ public validateLicense() g_serverIp, g_serverPort, serverNameEscaped, VERSION ); } + makeRequest("POST", "license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); } @@ -1966,28 +1968,30 @@ _make_error(message[]) { */ bool:makeRequest(const method[], const url[MAX_URL + 1], const headers[], const body[], const callback[MAX_FUNCTION + 1] = "", playerId = 0) { - static host[MAX_URL_HOST + 1], path[MAX_URL_PATH + 1]; - host[0] = '^0'; - path[0] = '^0'; - split(url, host, charsmax(host), path, charsmax(path), "/"); + new httpRequest[MAX_HTTP_REQUEST + 1], socketId; - new socketId = mySocketOpen(host, 80, playerId); - if (socketId == SS_ERROR) { - return false; + { + new host[MAX_URL_HOST + 1], path[MAX_URL_PATH + 1]; + split(url, host, charsmax(host), path, charsmax(path), "/"); + + socketId = mySocketOpen(host, 80, playerId); + if (socketId == SS_ERROR) { + return false; + } + + formatex(httpRequest, charsmax(httpRequest), + "%s /%s HTTP/1.1^r^n\ + Host: %s^r^n\ + Content-Length: %d^r^n\ + Content-Type: application/x-www-form-urlencoded; charset=UTF-8^r^n\ + User-Agent: amxmodx^r^n\ + %s\ + ^r^n\ + %s", + method, path, host, strlen(body), headers, body + ); } - new httpRequest[MAX_HTTP_REQUEST + 1]; - formatex(httpRequest, charsmax(httpRequest), - "%s /%s HTTP/1.1^r^n\ - Host: %s^r^n\ - Content-Length: %d^r^n\ - Content-Type: application/x-www-form-urlencoded; charset=UTF-8^r^n\ - User-Agent: amxmodx^r^n\ - %s\ - ^r^n\ - %s", - method, path, host, strlen(body), headers, body - ); socket_send(g_sockets[socketId], httpRequest, strlen(httpRequest)); /* @@ -1996,7 +2000,6 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const headers[], const new requestData[MAX_REQUEST_DATA + 1]; replace_all(httpRequest, charsmax(httpRequest), "^"", "^^^""); - formatex(requestData, charsmax(requestData), "%d ^"%s^" ^"%s^"", playerId, httpRequest, callback); set_task(0.6, "mySocketCheckData", TASK_SOCKET_CHECK + socketId, requestData, strlen(requestData)); @@ -2022,7 +2025,7 @@ mySocketOpen(const host[], port = 80, playerId = 0) if (g_sockets[socketId]) { mySocketClose(socketId); } - + new error; g_sockets[socketId] = socket_open(host, port, SOCKET_TCP, error); diff --git a/server/Dockerfile b/server/Dockerfile index 2ad7c38..1119882 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -32,8 +32,8 @@ RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-cstrike-li # Add shopsms RUN sed -i '1s/^/sklep_sms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini -ADD cstrike/addons/amxmodx/plugins/* /home/steam/dedicated/cstrike/addons/amxmodx/plugins/ ADD cstrike/addons/amxmodx/configs/* /home/steam/dedicated/cstrike/addons/amxmodx/configs/ +ADD cstrike/addons/amxmodx/plugins/* /home/steam/dedicated/cstrike/addons/amxmodx/plugins/ WORKDIR /home/steam/dedicated From 293a2a76aae114f2fdd3e315989a8c33c1b4543a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 27 Mar 2019 12:44:56 +0100 Subject: [PATCH 027/124] Curl (#6) --- .../scripting/include/shop_sms_const.inc | 6 - .../addons/amxmodx/scripting/sklep_sms.sma | 480 ++++++------------ server/Dockerfile | 10 + 3 files changed, 167 insertions(+), 329 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 66286c8..0057da5 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -36,12 +36,6 @@ #define MAX_HEADERS 128 #define MAX_BODY 384 #define MAX_FUNCTION 128 -#define MAX_HTTP_RESPONSE 1023 -#define MAX_HTTP_REQUEST MAX_URL + 64 -#define MAX_REQUEST_DATA 1023 -#define MAX_HTTP_STATUS_MESSAGE 32 -#define MAX_HTTP_STATUS_CODE 3 -#define MAX_HTTP_STATUS MAX_HTTP_STATUS_MESSAGE + MAX_HTTP_STATUS_CODE + 1 // 1 - space and semicolon #define ITEM_OFF 3 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index feb60bf..540cfac 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include @@ -18,10 +18,6 @@ forward amxx_admin_access(id, flags, timestamp); #define TASK_CHECK_USER 5000 #define TASK_SHOW_MENU_SERVICE_TYPES 8000 -// Sockets -#define TASK_SOCKET_CHECK 6000 -#define TASK_SOCKET_TIME_OUT 7000 - // Klawisze ktore mozna uzyc w menu #define KEYS (1<<0)|(1<<9) // Keys: 10 #define KEYS2 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 1234567890 @@ -93,6 +89,20 @@ new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_k // Sciezka do pliku konfiguracyjnego new config_path[128]; +// Requests +const MAX_RESPONSE = 256; +const MAX_RESPONSE_COUNT = 5; +new g_requestCounter = 0; +new g_responses[MAX_RESPONSE_COUNT][MAX_RESPONSE + 1]; +new bool:g_requestsInProgress[MAX_RESPONSE_COUNT]; + +enum requestStruct { + RequestId, + curl_slist: RequestHeaders, + RequestCallback[MAX_FUNCTION + 1], + RequestPlayerId, +}; + //Licencja new license_token[63]; new bool:g_footer = true; @@ -121,14 +131,6 @@ new Array:g_playersFlags; new bool:g_playersLoaded = false; new g_lastReassign; -// Sockets -#define SOCKET_OK -1 -#define SOCKET_TIMEOUT -2 - -const MAX_SOCKETS = 40; -new g_sockets[MAX_SOCKETS]; -new g_socketCounter = 0; - // Settings new st_currency[16], st_signature[128], @@ -139,7 +141,6 @@ new st_currency[16], Float:st_vat; new g_shopPageUrl[MAX_URL + 1]; -//new g_shopPagePort = 80; new bool:g_shopRegistered = false; new bool:g_AmxbansExists = false; @@ -829,44 +830,38 @@ public kodZwrotny(id) g_shopPageUrl, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, g_serverId, u_sms_service, u_sms_code, price[pTARIFF], ip ); } - - makeRequest("GET", url, "", "", "getWebPagePurchaseService", id); + + if (!makeRequest("GET", url, 0, "", "getWebPagePurchaseService", id)) { + client_print_color(id, Red, "^4[%s] ^1Nie udalo sie wykonac zapytania HTTP.", PREFIX); + } } -public getWebPagePurchaseService(const content[], playerId, socketStatus, statusCode) +public getWebPagePurchaseService(const content[], playerId, CURLcode: code, statusCode) { - switch (socketStatus) { - case SOCKET_OK: { - if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrociło bledny http code.", PREFIX); - return; - } - - new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[256]; + if (code != CURLE_OK) { + log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); + client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow. Error: %d", PREFIX, code); + return; + } + + if (statusCode >= 300) { + client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrociło bledny http code.", PREFIX); + return; + } - getXMLValue(content, "return_value", return_value, charsmax(return_value)); - getXMLValue(content, "text", szText, charsmax(szText)); - getXMLValue(content, "positive", szPositive, charsmax(szPositive)); - getXMLValue(content, "bsid", szBsid, charsmax(szBsid)); - getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); - - trim(return_value); - trim(szText); - trim(szWarnings); + new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[256]; + + getXMLValue(content, "return_value", return_value, charsmax(return_value)); + getXMLValue(content, "text", szText, charsmax(szText)); + getXMLValue(content, "positive", szPositive, charsmax(szPositive)); + getXMLValue(content, "bsid", szBsid, charsmax(szBsid)); + getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); - purchaseServicePost(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); - } - - case SOCKET_TIMEOUT: { - log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z powodu przekroczenia limitu czasu polaczenia."); - client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z powodu przekroczenia limitu czasu polaczenia.", PREFIX); - } - - default: { - log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow."); - client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow.", PREFIX); - } - } + trim(return_value); + trim(szText); + trim(szWarnings); + + purchaseServicePost(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); } public purchaseServicePost(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) @@ -1594,15 +1589,6 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) else if (equali(key, "shop_url")) { copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); - // TODO: implement https - // if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "https://", "")) { - // g_shopPagePort = 80; - // } else if (replace(g_shopPageUrl, charsmax(g_shopPageUrl), "http://", "")) { - // g_shopPagePort = 80; - // } - replace(g_shopPageUrl, charsmax(g_shopPageUrl), "https://", ""); - replace(g_shopPageUrl, charsmax(g_shopPageUrl), "http://", ""); - // Remove trailing slash if (strlen(g_shopPageUrl) && g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; @@ -1659,10 +1645,10 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) } } -// Funkcja ktora wysyla zapytanie do serwera o sprawdzenie czy licencja jest prawidlowa public validateLicense() { - new headers[MAX_HEADERS + 1]; + new curl_slist: headers; + new header[MAX_HEADERS + 1]; new body[MAX_BODY + 1]; { @@ -1670,10 +1656,11 @@ public validateLicense() get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); - formatex(headers, charsmax(headers), - "Authorization: %s^r^n", + formatex(header, charsmax(header), + "Authorization: %s", license_token ); + headers = curl_slist_append(headers, header); formatex(body, charsmax(body), "platform=amxmodx&url=%s:%s&name=%s&version=%s", @@ -1681,64 +1668,56 @@ public validateLicense() ); } - makeRequest("POST", "license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); + makeRequest("POST", "https://license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); } -public onValidateLicenseResponse(const content[], playerId, status, statusCode) +public onValidateLicenseResponse(const content[], playerId, CURLcode: code, statusCode) { - switch (status) { - case SOCKET_OK: { - g_shopRegistered = false; + if (code != CURLE_OK) { + g_shopRegistered = false; + log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z nieznanych powodow. Error: %d", code); + return; + } + + g_shopRegistered = false; - if (statusCode == 401) { - _errorInvalidToken(); - return; - } + if (statusCode == 401) { + _errorInvalidToken(); + return; + } - if (statusCode == 422) { - _errorValidationError(); - return; - } + if (statusCode == 422) { + _errorValidationError(); + return; + } - if (statusCode == 402) { - _errorPaymentRequired(); - return; - } + if (statusCode == 402) { + _errorPaymentRequired(); + return; + } - if (statusCode >= 300) { - _errorInvalidResponse(statusCode); - return; - } - - new text[32 + 1]; - getXMLValue(content, "text", text, charsmax(text)); - trim(text); + if (statusCode >= 300) { + _errorInvalidResponse(statusCode); + return; + } - if (!equal(text, "ok")) { - g_shopRegistered = false; - log_to_file(LOG_FILE, "%s", content); - _errorUnknown(); - return; - } - - new footer[2]; - getXMLValue(content, "footer", footer, charsmax(footer)); - g_footer = str_to_num(footer) ? true : false; - - g_shopRegistered = true; - log_amx("Walidacja licencji zostala zakonczona pomyslnie"); - } - - case SOCKET_TIMEOUT: { - g_shopRegistered = false; - log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z powodu przekroczenia limitu czasu polaczenia."); - } - - default: { - g_shopRegistered = false; - log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z nieznanych powodow."); - } + new text[32 + 1]; + getXMLValue(content, "text", text, charsmax(text)); + trim(text); + + if (!equal(text, "ok")) { + g_shopRegistered = false; + log_to_file(LOG_FILE, "%s", content); + _errorUnknown(); + return; } + + new footer[2]; + getXMLValue(content, "footer", footer, charsmax(footer)); + g_footer = str_to_num(footer) ? true : false; + + g_shopRegistered = true; + log_amx("Walidacja licencji zostala zakonczona pomyslnie"); } public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) @@ -1957,230 +1936,94 @@ _make_error(message[]) { /** * Make HTTP request * - * @param const char[] method GET POST PUT etc. - * @param const char[] url path (eg. example.com/shop/ddd) - * @param const char[] headers headers - * @param const char[] body body params - * @param const char[] callback callback function - * @param int playerId id of the player + * @param const char[] method GET POST PUT etc. + * @param const char[] url path (eg. example.com/shop/ddd) + * @param const curl_slist headers headers + * @param const char[] body body params + * @param const char[] callback callback function + * @param const int playerId id of the player * * @return bool */ -bool:makeRequest(const method[], const url[MAX_URL + 1], const headers[], const body[], const callback[MAX_FUNCTION + 1] = "", playerId = 0) +bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: headers, const body[], const callback[MAX_FUNCTION + 1] = "", const playerId = 0) { - new httpRequest[MAX_HTTP_REQUEST + 1], socketId; - - { - new host[MAX_URL_HOST + 1], path[MAX_URL_PATH + 1]; - split(url, host, charsmax(host), path, charsmax(path), "/"); - - socketId = mySocketOpen(host, 80, playerId); - if (socketId == SS_ERROR) { - return false; - } - - formatex(httpRequest, charsmax(httpRequest), - "%s /%s HTTP/1.1^r^n\ - Host: %s^r^n\ - Content-Length: %d^r^n\ - Content-Type: application/x-www-form-urlencoded; charset=UTF-8^r^n\ - User-Agent: amxmodx^r^n\ - %s\ - ^r^n\ - %s", - method, path, host, strlen(body), headers, body - ); - } - - socket_send(g_sockets[socketId], httpRequest, strlen(httpRequest)); - - /* - * Utworzenie nowego pseudo watku oczekujacego na odpowiedz - */ - new requestData[MAX_REQUEST_DATA + 1]; - - replace_all(httpRequest, charsmax(httpRequest), "^"", "^^^""); - formatex(requestData, charsmax(requestData), "%d ^"%s^" ^"%s^"", playerId, httpRequest, callback); - - set_task(0.6, "mySocketCheckData", TASK_SOCKET_CHECK + socketId, requestData, strlen(requestData)); - set_task(10.0, "mySocketTimeout", TASK_SOCKET_TIME_OUT + socketId, requestData, strlen(requestData)); - - return true; + new CURL: handle, curl_slist: newHeaders, data[requestStruct]; + + handle = curl_easy_init(); + if (!handle) { + log_to_file(LOG_FILE, "Nie udalo sie utworzyc uchwytu CURL."); + return false; + } + + new requestId = g_requestCounter++ % MAX_RESPONSE_COUNT; + + if (g_requestsInProgress[requestId]) { + log_to_file(LOG_FILE, "Pula requestetow jest pelna. Request nie zostal wykonany."); + return false; + } + + g_requestsInProgress[requestId] = true; + data[RequestId] = requestId; + data[RequestPlayerId] = playerId; + format(data[RequestCallback], MAX_FUNCTION + 1, callback); + newHeaders = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"); + data[RequestHeaders] = newHeaders; + + curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, method); + curl_easy_setopt(handle, CURLOPT_URL, url); + curl_easy_setopt(handle, CURLOPT_USERAGENT, "amxmodx"); + curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(handle, CURLOPT_COPYPOSTFIELDS, body); + curl_easy_setopt(handle, CURLOPT_WRITEDATA, data[RequestId]); + curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, "@responseWrite"); + + curl_easy_perform(handle, "@requestComplete", data, requestStruct); + + return true; +} + +@responseWrite(const data[], const size, const nmemb, const requestId) +{ + // We want to get "nmemb" chars from "data", because sometime there is some noise at the end od "data" + format(g_responses[requestId], min(nmemb, MAX_RESPONSE), data); + + // tell curl how many bytes we handled + return size * nmemb; } -// -------------------------------------------------------- Sockets ------------------------------------------------------------ - -/** - * Open a new socket - * - * @param const char[] host host name - * @param int port - * @param int playerId id of the player - * - * @return int id of opened socket - */ -mySocketOpen(const host[], port = 80, playerId = 0) +@requestComplete(CURL: curl, CURLcode: code, const data[requestStruct]) { - new socketId = ++g_socketCounter % MAX_SOCKETS; - if (g_sockets[socketId]) { - mySocketClose(socketId); - } + if (code != CURLE_OK) { + new szError[128]; + curl_easy_strerror(code, szError, charsmax(szError)); + log_to_file(LOG_FILE, "CURL error: %d %s", code, szError); + } - new error; - g_sockets[socketId] = socket_open(host, port, SOCKET_TCP, error); - - if (error) { - if (is_user_connected(playerId)) { - client_print_color(playerId, Red, "^4[%s] ^1Nie udalo sie utworzyc socketu.", PREFIX); - } - - log_to_file(LOG_FILE, "Nie mozna polaczyc sie z hostem: %s:%d. Blad: %d.", host, port, error); - - return SS_ERROR; - } - - return socketId; -} + new statusCode; + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, statusCode); -public mySocketCheckData(const requestData[], socketId) -{ - socketId -= TASK_SOCKET_CHECK; - - if (! vc_socket_change(g_sockets[socketId])) { - set_task(0.6, "mySocketCheckData", TASK_SOCKET_CHECK + socketId, requestData, strlen(requestData)); - return; - } - - new httpResponseContent[MAX_HTTP_RESPONSE + 1], statusCode, statusMessage[MAX_HTTP_STATUS_MESSAGE + 1]; - - statusCode = mySocketReceiveData(socketId, httpResponseContent, charsmax(httpResponseContent), statusMessage, charsmax(statusMessage)); - - // Parse request data - new httpRequest[MAX_HTTP_REQUEST], function[MAX_FUNCTION + 1], szPlayerId[2 + 1], playerId; - parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function)); - playerId = str_to_num(szPlayerId); - - if (! statusCode || statusCode >= 300) { - log_to_file(LOG_FILE, "Zapytanie zwrocilo blad: %d %s^n%s", statusCode, statusMessage, httpRequest); - } - - mySocketCallCallback(function, httpResponseContent, playerId, SOCKET_OK, statusCode); -} - -/** - * Receive data from socket - * - * @return int status code - */ -mySocketReceiveData(socketId, httpResponseContent[], httpResponseContentLen, statusMessage[], statusMessageLen) -{ - static httpResponse[MAX_HTTP_RESPONSE + 1], httpResponseHeader[128], tmp[1]; - httpResponse[0] = '^0'; - httpResponseHeader[0] = '^0'; - - socket_recv(g_sockets[socketId], httpResponse, charsmax(httpResponse)); - mySocketClose(socketId); - - if (isDebug()) { - log_to_file(DEBUG_FILE, "Received data: %s", httpResponse); - } - - // Parse received data - new headerFirstLine[128], httpInfo[16], status[MAX_HTTP_STATUS + 1], szStatusCode[MAX_HTTP_STATUS_CODE + 1]; - - // Split header from content - split(httpResponse, httpResponseHeader, charsmax(httpResponseHeader), httpResponseContent, httpResponseContentLen, "^r^n^r^n"); - - // Extract first line of header - split(httpResponseHeader, headerFirstLine, charsmax(headerFirstLine), tmp, charsmax(tmp), "^r^n"); - - // Split first line: httpInfo status - split(headerFirstLine, httpInfo, charsmax(httpInfo), status, charsmax(status), " "); - - // Split status: code message - split(status, szStatusCode, charsmax(szStatusCode), statusMessage, statusMessageLen, " "); - - return str_to_num(szStatusCode); -} + runRequestCallback(data[RequestCallback], g_responses[data[RequestId]], data[RequestPlayerId], code, statusCode); + g_requestsInProgress[data[RequestId]] = false; -/** - * Function called on socket connection timeout - * - * @param char[] requestData - * @param int socketId task id - */ -public mySocketTimeout(const requestData[], socketId) -{ - socketId -= TASK_SOCKET_TIME_OUT; - mySocketClose(socketId); - - // Parse request data - new httpRequest[MAX_HTTP_REQUEST + 1], szPlayerId[4], function[MAX_FUNCTION + 1], playerId; - parse(requestData, szPlayerId, charsmax(szPlayerId), httpRequest, charsmax(httpRequest), function, charsmax(function)); - playerId = str_to_num(szPlayerId); - - log_to_file(LOG_FILE, "Przekroczono limit czasu zapytania HTTP^n%s", httpRequest); - - if (is_user_connected(playerId)) { - client_print_color(playerId, Red, "^4[%s] ^1Przekroczono limit czasu zapytania HTTP.", PREFIX); - } - - mySocketCallCallback(function, _, playerId, SOCKET_TIMEOUT); + curl_easy_cleanup(curl); + curl_slist_free_all(data[RequestHeaders]); } -mySocketCallCallback(const function[], const httpResponseContent[] = "", playerId, socketStatus, statusCode = 0) +runRequestCallback(const function[], const httpResponseContent[], playerId, CURLcode: code, statusCode) { - if (! strlen(function)) { - return; - } - - if (callfunc_begin(function) == 1) { + if (!strlen(function) || callfunc_begin(function) == 1) { callfunc_push_str(httpResponseContent); - callfunc_push_int(playerId); // player id - callfunc_push_int(socketStatus); + callfunc_push_int(playerId); + callfunc_push_int(code); callfunc_push_int(statusCode); callfunc_end(); } else { - log_to_file(LOG_FILE, "Funkcja %s nie zostala prawidlowo wywolana.", function); - } -} - -//Array:mySocketParseHeader(const header[]) -//{ -// new Array:explodedHeader; -// explodedHeader = ArrayCreate(e_KeyValue); -// -// new headerCopy[512]; -// formatex(headerCopy, charsmax(headerCopy), "%s", header); -// while (strlen(headerCopy)) { -// new line[256], pair[e_KeyValue]; -// -// split(headerCopy, line, charsmax(line), headerCopy, charsmax(headerCopy), "^r^n"); -// split(line, pair[kvKEY], 127, pair[kvVALUE], 127, ":"); -// -// trim(pair[kvKEY]); -// trim(pair[kvVALUE]); -// -// ArrayPushArray(explodedHeader, pair); -// } -// -// return explodedHeader; -//} - -/** - * Close socket - * - * @param int socketId - */ -public mySocketClose(socketID) -{ - socket_close(g_sockets[socketID]); - g_sockets[socketID] = 0; - remove_task(TASK_SOCKET_CHECK + socketID); - remove_task(TASK_SOCKET_TIME_OUT + socketID); + log_to_file(LOG_FILE, "Funkcja nie zostala prawidlowo wywolana [%s]", function); + } } -// ----------------------------------------------------- End of sockets -------------------------------------------------------- +// ----------------------------------------------------- End of requests -------------------------------------------------------- _getServicePluginByID(const id[]) { @@ -2235,15 +2078,6 @@ vc_md5(const szString[], md5buffer[34]) #endif } -vc_socket_change(socket) -{ - #if defined socket_is_readable - return socket_is_readable(socket); - #else - return socket_change(socket); - #endif -} - // --------------------------------------------------------- Stocks ------------------------------------------------------------ stock bool:is_steam(id) diff --git a/server/Dockerfile b/server/Dockerfile index 1119882..11c842a 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -3,6 +3,11 @@ FROM cm2network/steamcmd ARG metamod_version=1.20 ARG amxmod_version=1.8.2 +# Install unzip +USER root +RUN apt-get install -y unzip curl +USER steam + # Install HLDS RUN /home/steam/steamcmd/steamcmd.sh +login anonymous +force_install_dir /home/steam/dedicated +app_update 90 validate +quit; exit 0 RUN /home/steam/steamcmd/steamcmd.sh +login anonymous +force_install_dir /home/steam/dedicated +app_update 90 validate +quit; exit 0 @@ -30,6 +35,11 @@ ADD server/files/plugins.ini /home/steam/dedicated/cstrike/addons/metamod/plugin RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-base-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-cstrike-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - +# Add curl +RUN curl -sSL "https://github.com/Polarhigh/AmxxCurl/releases/download/v1.0.4/amxx_curl_linux_v1.0.4.zip" > /tmp/curl.zip +RUN unzip -d /tmp/curl /tmp/curl.zip +RUN mv /tmp/curl/curl_amxx_i386.so /home/steam/dedicated/cstrike/addons/amxmodx/modules/ + # Add shopsms RUN sed -i '1s/^/sklep_sms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini ADD cstrike/addons/amxmodx/configs/* /home/steam/dedicated/cstrike/addons/amxmodx/configs/ From e3988fff222bec5243a9fd404525d00bd0c264e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 27 Mar 2019 14:43:00 +0100 Subject: [PATCH 028/124] Fix building (#7) --- .../addons/amxmodx/modules/curl_amxx_i386.so | Bin 0 -> 4893236 bytes .../amxmodx/scripting/include/colorchat.inc | 227 +++ .../addons/amxmodx/scripting/include/curl.inc | 39 + .../amxmodx/scripting/include/curl_consts.inc | 1325 +++++++++++++++++ server/Dockerfile | 6 +- 5 files changed, 1592 insertions(+), 5 deletions(-) create mode 100644 cstrike/addons/amxmodx/modules/curl_amxx_i386.so create mode 100644 cstrike/addons/amxmodx/scripting/include/colorchat.inc create mode 100644 cstrike/addons/amxmodx/scripting/include/curl.inc create mode 100644 cstrike/addons/amxmodx/scripting/include/curl_consts.inc diff --git a/cstrike/addons/amxmodx/modules/curl_amxx_i386.so b/cstrike/addons/amxmodx/modules/curl_amxx_i386.so new file mode 100644 index 0000000000000000000000000000000000000000..b722f58d318ea25a3bf2ac7dd1c6cc592e5b7f16 GIT binary patch literal 4893236 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�zhHF#K1@&j_Q8Gs!%QEVIfw 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

  • 83fnp+dyn#aB3%gaTKBJsF*>d$#_EAJF;2(V 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

    Y>4c6j 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.lWA?2Hy@~H^ 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

    ;_B76BXS!#~AY7F^HE>ug>n_tac!k)}! zBypFSoJx2)q};TldzQa@G$R33H~Qqaq`NU+e#^QWMcztpSdxz_|-i`gms~R&&_~3QIEP}aA@;bf54KA9MNw&ft zMZzfOW{TIr2~}vsYPgNt4Vz#Yq}gQ|i_S214dk2)+N$6cE?R(5x@Y^kn}m1Z4uN@g zKChx==XFmV)eUD8V0>fuY(M=F+-&WhTEN$Oup$^)N6hUl-P7q&i6C-kcVx6HMTvAb zTtQ2G>K3sKgu180A9CBs^ic#u6bXcZx~C(BFsoK#(Gq?k{f-9uMJN=?~<6 zH#gG1n%<>fSdrK*-}dlrbz0`B*l9u+;(~qvtaP47ffzf00kRCSm$j~H(g$rikCKk+ zu^D!zr^5G~WtUnIg|tKkq)1e6S{Nk#7rwc> zG_C#jf!cqKGJeQ*%PN5a64ao8K+6(vQjz+HUJ`|VUNWk98w$uT%2!?sp(J>W6nI%g zcSlAe%yMrly%hVY7Ej0d(0w*^W}=(8T}?$2xY)G2P>9^(bJf5oz6L}QwB(Dr@M~g$ zCaQWE-Q5B)?YR!-KVFr)wriCG54k z!BaWCnXJ`FNzkpdr}o#0+FwZo@%I+L&(Kra1LKf&%3$;);=O#QyR39IZ?xDd6-7T3Z?{vHkGG!hnCy7fiJ69dX4M72kzeGQ{1c=Xm zUmyPBGWefjpABy!(diCU;BbuX&2$VTpAgIN*_-%>^eP~)vRWo_+hUog#<&4sU#8;? zEFe`%zxj8_k$5@XE;4uB=)ph4{yI9988t~REB0d-Mngr<3I%_=?>EvWI4r^F#BQL> zDU<=Pptm~wf{fRtPIoB*A;4?L&h+zAqv9kj&M5F%lS!}UqsMeAPb-=Avj4kYSgjHy zh&pQmOZ8w$?y!w;^-7okrh<0{O=d(Q2SkIx{{}o_Cy}!$QI$REoSn~S$88zV90n-S z#;D!K!eX%6I!eEk>2m=!22sK?tQGg_r_mykoA@5WN^0V-%sjVEHEso>Hd-XD)fK}= z5yMImxYm4BC&`T}iLE(FY#iO)T8MM8j&NS5!W9&#i>>v=-WpA`a~U1F^TX@ZZtgxC z*Mx-4!=bYwUBkl)*AFL)=yH9#U;x!nChB6~b2(z3TH%o@%Es)ZEPp+m|5$ zbqfk$PRyGBztD4c`u`hx(sE?YV-9|mKW=7}WB zReXssdSb7ukq#3@#4w-DrCH}dR0+T4FWx9+!CDD}9g%>}WvH4{=-KsBWUS11R-H3i z?6mcAI=u*fFYU%L);%NiDLycw)`yOe8?+c*i}-jr??>{!O>WfU`6x0UO*7MFB7ql4 zn3GGSnL+LKbf7S=US(WAFww3btfdo8)n%~7$;}x&1#ks+L^lq^1rX|WAofF~EF0Ds z@Z5w!NH4H9Xt4rF0cH}W2bX#^g-#$j1dMz;UNcnM3@2&^NoWe4MB-=RRsi&;uM^Dk zRD|E`3<{TsKYVNoEUzT=af?(xZU8NHPS z{?o#75 zxA5ODE)Waiw8Y7?3b>4p*HA2lHv0(bmih(R`{RDUDrmemOA$%7+A+X>MQ5fXkD zqD|-?pCy`C@Z?#enK>{gW1u1+cP0T$C{PK}`93xqOpJ)%5IR^m%UQJ`bO=)Vw^2T9 z0RC!{{(hGOt75N@PB15o9|^xHufZMuAdFwUxVzTM8MDT$%( zLcpl(KFEhr$MD{CSU&I7Cm+Ua%Ewbp_hC+aJ405kJ~5WxL*%lxrD4ENuC2vKby9H+ z2A>oE@yPn%wGs9G-_W(>Q=fPrsE=_#&Q}kE4>fZ!mjN_+YPG^j`&aO z^HX1etsEpgtiK@D)VAxD+)qTI!Ms%E5yAgDg>Z_?Xe2$`nXO z<;v~}zMbU4{)4dfCHXK?&B=|0-O~U-bQT^eCWwaFA%?X$nX>*lNiPzv8rZCQ&m8n? zeDkR*PCqd(x$M3x2Ds~Re}9ztU(w_Qjbsa6-!xxdA_XtHaS6NqXhz=|V)}HvpZsP% zzdh9Mm1ZUN5{H8<6Z%E8eCjKEgtO_)`uYkp#v$yq>in;2? zvMTazwmHtu>n?l(qUCj;m*>?!d9i92~lVt4U-TTBb0C&Az6IH@;_)XQ5|{7&&8A^4uQV82X_MbuXZYX`tbQ+RD^ z^_avv&Z?_RoK-g+6yD<7;MSJvbGU1J2EI}1J6Qb1yR)@m_#fiFh~@V(c24gYsw|<( zKsYsOfri}+axLy{+O7}XJ?AhQ!8W<+&{Qe_2u;|XR9?Kb*n=*yjnoM`^A{@;RFu%e zCN7#q;=?<`>uujdTrO_$>VeQ(AU97hI-CX=!fyJM^qiXadGLPVtXh0T;$1=TAcQT2 zIAz@Ti>!pg>k@t8ElK~W+{kQ6tHdhGqKtdaaRPyYqo}#ux5Fc;c&rv3$+gnO@426f zUqOIG=$Oykn7b@NEhx-LfG9?evadE|zJFBh@`Y3SjL@@K|RR3r^y&;biinq80 z6Yr6Fj5n_eQbC9cBq~BBoB-j(ono0gyeF}N)tyz-L$KtrsXkb%?l|8&>U9)%s(5#W zgZTUzaR{fRTku#YIio;q?kcW4?jIB0k*xILTvMUqn;v@D1W?HslWk+ zLc=RRK`Y0#)Hfz9&e#fiTOBq&x!PT2p?4fbssI#AcHxOs_gRoAvb7^yje0Mt=qWAM zog@`<+cll9rmo6xI=soZE|E^95UTOCFyAGdZ^#uAP)Xg_gdy6=$V8RY5Bt7X{Bl-M z&Y7%yOP%v!+nTWQZxeoZ%dg>-&tvvf$^j4tw`)HKElz<6s-->_Hg+PdHaiKYs?>v! zYM86aw+%sk?-Z?&ExO9?wc1T_6fiAO?)TZ zht807jlR*oEyPnrJ&eaYzsVipyYB-;U(U&uO9p#Ijs?gYO*@ zYY_qfT6w4@inzD{ZBtAJQoW;n>yz;!P2LZr8psYvPg{^ShIeq2^$y<nCmtug706dZaYf>(F=K9oFubaLfqHL*`R zyKmx#@IJ*vFx59Mhl%w9Z!e_jRW=0=0RUQg#!mi2~5z#^NDRVG`2U>eT9SzIDml#%S{H!A->}Xu64%5&%o33VrW^2u&lsBYB&x z`W=us$O0F=6^ZjpZ#N`wwm?a{JHy+2cqgd02m<)_&=v&Hs)zMgM6Ep4Ki>B)+-BPy z+27JoinX^~cL8EpkIPc2aUa)RVgFC+Ze?n1!N+yCG_^YLN!_gxx%-&z`cu6HbXNK8 zwWp7`h1=FuxC9pIZb-;0-PJ^-YT}Nt5ZNVfB~5F8H8~aDJuw~Lt>lF-An$nXuO_aC zqxQg2LS9TD%jQB|P2C)RdEy6Qp|Mgo=uuY_4b84Ype=Q4QmY-WyPDh=erMvou+Uhk zi<&9c?rI`TjCl3B)CJ8&pVVFOSp1Rhx_vEYFp)Ndyjr!}U4cayx;B+6IB<7y#H&6B zsUOqdQqh~j&BOaEXdYrlf(|Q$m!Cd0+uJR+xBEyeO7#`c+ov5(d@r1W0x5)>;fbvP z7*f7X$)_jG+nz#q)>J9I7@sHLVqo@E6n*1^%{Q+=J;$(7?YQ5Br1*7tC($mo+A3;tIg zs)>q!>Fat>-&^F{lVBT(46GP}3m91ECm%giGj1K+n%D#Rs#%$bB-=1y+895pm_;uL z)zOb+b$;?@pX3F0ao^Ts_gtnkf`x-y$U0rOZp;mDOg>upR?j^VhVIg2+>uA>ossG* z8rf*&bB9MUb0Cq2t@f;G&82ytrTRH>f}`MmUUiE5~VK zN&pi4?N;PgiM$DNHBkY=jzSo>Ddriwdp`!CT1IIl=z#!YD8!-kF#!2R9ex}@6{7F< z2gn;i$NPGfPY#G7R9fI;0V+%N6)HfXP3O&HH*P=1fZ#|mRB7#jmE$yVclbSqe8G`o zC?Erl0HleGt!ixvddg*#a{_8YoCyxW5r_a#D55j9FZq`|}PXgUzxQxX_e%g8e%!OY|2(3ho>3o7URg0mg zCupMRu=S$gcA~R!7l=KIi9A{pMO&*K_O1@pXfVe&n2c9xq7X~<)CQkem8z28VHDRy znZ_ZZ4CJcbFww+jSvgJ)Eq6bfz8j~PM6PZh?=ptjHVNq@c3XmqMO5A`Q zW2YtzSVanuChEjnO)sTbKwqHwU&vjpsc|$Qz`sW;p@d{ar&LlCePsu2-&nj%veYEqKI7XVYFqaGOvmFPnPY7J^Wh+wEAb^|zvY>1 zxM$z-Ht}Fbbx&({e}k@%FW4mOsY$*`0eQfVp$(iMg$0a#G63d+Bd}|{gpR3~^%sCE``zQ7L*2#H{ z+DUsO<_eC=$DR+g`{;P7T&G;tV(x9xV;c4S_C^Kbn&R2(w^u6Qdrw~H@1I&reV&WG zPF?H}_1!{lZaABR!xIu$&7-AQU%5nguWd1T+Du7ocz|8q@6k|}T;j`}pK>dSK1XSV zG4+qamPva}i3<|V56HfMl6@(yd$zfcm`y&~lO%6{1?N9E3Nlws6lBspz|b?ZrmtB# zET>*|L+J4M#&5qOMPjxHxYxbm#QRTPRi2#c>#HAMzBD#e<9z#SR&Sm>mHu;)iiz#< zJ26==laR`vlXV?}tP>`OEnH2yg{#@!-__dFP^R0vS|n|*rd^QR-gQxT%Z2Se0^b}9 zfG)BLnNZhk9v#OXfkFxm->4!rHI8DF3gW-xBdKvq>`h_Fd6;>jfn)0{;X3{!e zFV}htg1-3=S+@DxhvC)z5@nm@)&40Puicq`h3~=#yL$84gyzJbY0BpQHEmdIbLdAUmtwQ#=U?_&r#Ft>evt2sWPnc2Md{CvWd z$-y)CKjPoKEUh(YYXrYU;L9@$%gh80G+A~Vv0h00Tg`u%%`e>Pm3WijCBqq1SH;dZ zvo!x(M@esF+nLs0j96%1&VOrq-^lbo+?7ptH2wZuI`OYE3royl@4h{vIWHd7UtW^_ zEXw7V-ds1@txxsU)0*Xc%_6(t>ig?Q-lfsg5`gJrrxiMJ+2GX^sg|uYuUk?k@$yG9 zkKD)Z%{k`oN2FpoiWx6f87g~DHXX86CdmrRoQQd4rkjBk(B%(HWvD8dMIzn8%DkbR zOF8w}@m<}8=}d&yX7w*1Yx@<+Pmg&7z6IY_@k$y##8 zE#Thi+5t-osEhoWNAiX^<^9FKXQ?I8%d}(RU9evn@v7``Yc8a1VrS0sKC~H}&A?q0 z-eo&`h&CJ;hUqW9<<_TV;@_i8vZwt-IX<@*x?@Asr@#wwlxhJV99MC~OxeXY@#AnGSRm_o?ad~rW^ToC*sVMzp$*{{E&ykxS z4u4O^ny&Qd{yXBCSW&raHQN``*OC$JCSz$(HSoVGcgfg^SvudB&40_yWKCD`Pcn8) zHeKSQP@fDT&MmX)Z+g7uID#CrXAk^YppJn0S-jJ)X0JN!{w;EmP5Q5#yY{kOWwU*D zWHuihmVT0KR$e&Xd}hCBg3V>331r)w=nyq=IB5Lc^V}|K3<>V%31q5T%n|qKS6B5( z^oA_Ha{B3;U^mk4Z<9+`(0!wykTQDZhz&GlhcV7CXMo|!K7nDj!XN`!b&}#8W^YU7gd=_zZ2#NB-VPoTL;j!=AJjQ;viv@q@v`lB^?~ctP3owS)uyt zdeFi>OO}g&COFcfR}g1MiP?D}5iMkR`L3v_v-7*QKgmO$GqV@eMSGPZGK7CmA( z1}ZN7*x@V>S+&_BNvaVfy?rXjtNB14_#}B%Cd+26=FGoldF(`~e=pncZU_3IK5b^wbP8)gNj$K`~okv z=2snAtlTBa;;975$=HwhH+_w^ruZXoX{(9lGFx5cvZ_U)KMTr5Sx~w*au2sBBM-Xx<#OqU{cXwf2|A>mOswsk`LTB7iQkss zGh#-T%|=z1%~8_LGanoxr6IV)6|Piesz#)1uVt-5OZQ=RrN8|m8MZ=ZlrDqCXv{v)vUFqIoA@aNm(vY13u5K>Cvxd2aWb= zk+$zcg|_?nhe6}j|4}FqnHKYvbF?{8p~K)wbaEQbFVZ_59iOS9r5Wb>A8OVSrg>K1 z7G)M=J;`jr9P=kvlsTT?*wg06*!`u5XGfkXv%sp|)p45eUx#ONZU3WJs*#IpuLrf1 zX*FAH$Rqcz%=C0Y`J%l3Mwx!(4ZP-U^UT`s64_A3N6{U0^&dJPV0=v9j8+-R&p&!j z=r#Eup%*t^c@tzCY{QBFfEoaS^VofJ%qtP?du*tVd(&(}t9f$R$6xT#oJ056inum< zHC=0sn6$O~EcY{Rsdd?G=G?E9!J>`kFk7TBS__>ehG3i6q-GZJv|8IKa*BEWUvJAH zuSyzV`V4Ci9J+$>F2~to|D)R}8!;0kek>6zX6=1D({mV7Bq6c%+F93}xAp<|=Uo9N zhv6f<9ed$B&k9B+mIy{PyZ{O%*t4Xpr!i+UbiJ;0N~|SIW^tAI;6-`QnwZ!zU-#%A zT>xC6f5TL0F=s7wQPNqH^mH*dESk?`zXz@Ql~&nrgdwoFg!IuGsRL>6V4p5vc=N@W zDC}W*OUe7EYora)48Ie&MylKnOqU`X1$ze#RAm-do8$D}Ub+qfu|x;%8ip^hHII4c zvNi9I7i?8PJvnV#Ph6hKztX;(A(}jTtW3+)@24VOCvp61&3wz%S+hkXAuB&`Z1p68 zuz=4)^`3}7v6ho+r%Q)U#t3f~|0@v>*`h`BhR$tEg zvZpV<|FGu&PxR$ID-{ZQ)nZPm*W&+X|(@#p1PmDd?s6J zgucAr>Xv_3U$zqy$KTci|DY_NRIU_dc?-(YwT#riWyk*~gm#wUmC42R}bjdh9d8NKyd_AMaga5WHk;~P(NCFv5Jpk%s*~f~%@OkzTNc%j zy`lkoDY3`w-mP_vBN)=(5_<<8b;n^y{AC-aY`8vYZAtWIf zC|w78Yt$q`Pj^EL34^te1cMW=_~1-@(rWG%*UmB zZx%`S?ST>MhC;n2l z)c;~JOR2Yn82o-VS87li5eKV}1qC{KE$u|i*XFP+F@uONGF>20VYkHEx3_dp)eJMp zV96$zjClUfmzb4DR3Wt8LA_{&`+hF@hPfD&f3nwGY5zfSd4HZna2xoM%ty>gFrD;- zrt_oEr%x0%kna=hcR5^~Z?9GyxF7z=wO^&}OW?1zAKCUpv`_s+3lCZo4gDmSElPc# zRPJpwA?0d@mz(mDa;vpHu@>!R>5m@Aqm2iD!(&3xLq-clE1+l{R@jIjbr@%j?&$fd z9qk=PbX|EMCcMCh4pOh8+Qnnh7nT|*%cF%FZT>_*)^Uw62G;Q&#kA*@d;mD4eAYsK z@fELpLy1+NNRA(0A3wxk7Y);DR$b+CQ^yh1+G=jUTi<0(#DmPrHQZcghR%kY`jSiM z%bZq3IDb)7c)NfjsTTrIvQ&%|t?blmAR@_`+&PNyqe+$86f*7~fiz?IHNxb)KT=WR@7*8d8G z9<@-m$)iVXh%1@SK_ZE1^8=g&64S=EORh-PN#(?kl{_rRoHuq&n1}W5E)MnOQto?+OLoS ziT`P0iOEOf#GaQ`sS5PZZFYE5h9xvg+*b(jh1QS9(ah1*yr+=QTCYsotEg*^`E!qU zMO3O27q2(%SCa1!Jgy+nh%5(w9De>=nB7I~bve*~BDF}!YoKg1wYPZvWf1bDF8wMS51}S#N9T3myTA`Wbs>|vOKL1A~2B_(N$rB+u zakw9-WO_=hSBeM{5yB2zooiXYp$Wr;upwJRL%@l@=$5N8XHqPIUT&zgzsoQ4dPDrj z>55_@+%*<-z#iuoIMgk0akfCpiBFIMEk)ulJ)TFF&t&0CZU0j9TaD~ja>mbT9IlhA z1~9X(<1MES@8K=db}us7b{GGk#{c|N0VtT*@g#^4Z#Doe} zEO^YMU(fopA%&PP%1>?PZ_~9*`dINkseB`e70_65D71Y2T(HnDj94?A5wEjD2`1O4 zX`Iw*Qrqmf&w3Q@K_CQ8%U4n}8n+_04>#cZ)EwJa=ycuA*Tj&ydY2v9op=`?sK}1t z<+$M(rd3|;SpA*1RY9f8vi$(gAYf+UT=!jpQve~QMtb1&a*6ryrYtx|($2>KeOM0Y zL7K?|eTf3?ce-Tl!0Lpcbat#5fU@M*Uf60LB)F;DV;P+-PDFHbc4Dh}RF|j~EpI63 zqF)qof#G#s?A65zY_~+4H`gOjh%3_c5U)U1MqvC(8ezYO)``BaiymQa#SA0gXeYi2 ziI_8o3x2D%sGPtR<;g~d81v#gYAv5D!m@>2<`P?|v53p2c23d?dZQ;qWY0&ngsLnx zAO6jiHQ_C%OM*?(_8il+LBI3dYRdArXD+2krMcvLmZuhA+7lQkGw>HOpe!4{o>P|7 z%@f-!MH|Rv(~ldLUT1#brXNSTU9jr982p>Nab4lDSf5GkkRI&gTl%Z~oe*9p`M;;ej=+nT@5l25X&)A)L&O5HFBFO zCtoqC{dRW`VP=_c`P9;FHGeoWOMkiTX!dMGxpX$SLP7maK z6+8O8TA0kn?;r;}9u%9VLjI|WG@CzPu5gGFJzHyVrC`{!>q2iysIx&DhZD_&GgJ}r zTw})aEXD_bPL~$4Ht&xCJJR+O`rGzH{%QA{U+MfJ7~3FR)@)|qp(WF=;C{~*3-4-s zT??*|f>N4-i*3R5&%{x`A(Q?wzs$T~lkdQi*|H?H-K=bNj}&%Q^l5J4w&BgR-LLuX zCSSU0cpYu~nab%2q(V64EEfeTEh^Id^ao%eW!WF=Cd1S>{bT+a0nZBUjQWXPEc^ng zfnCx=j0Ph;J9XBzk#-|?!_n*s7v z4QJ^V^IR^^V)Cd`PcP(Y1jq>mS)la@H%N3p0r^4?M$W@7n%9$s0}v5Q>@Rat-$?hE2J)FPtm7QogXgu=rInmRL);$Xf` zFfXkKY0q_^42y?Z$rNtcnl*bWks#SSIG6duXeGHPU1!iA>QP<9uTC~-mPZv#@^4j= z49_ppC>s}ait)f2PmZu}W>H(u5^)`7qNh>~!u$ibxRu0R0bR!K!`wMlUOOT-Xl$L092`6X)!6gdj5&)4Wx+R9!d#v4PzGy zRG3$%csZ88Z|l)If-c8so`-XJxb!AJU~h`qFuxg&<@et3kHZJ5pgDhg?^iRm>Q z?!2nB=b+d({JxHDAa0KNrCln1Lh68Jz`|}v$Xt{U5Xzoop6x77e@SMmmDtiXP>M33Aq1K z^WU%exwb~6*~@QwpBAYmZ+3pg{hv%9*#D>bOI_(7^9MH{@IR;NEt+1EtIw=D-fee; zemdXWqWO>W;FZ~u*S`Fkhd(tE-b*$At`DStz&kv@IrsqZibII|uQWgK>TK*nbsz{1 z=)b1luj#<+)n^Jn2Hw9g38Md+pX=zF7&1q|yRU2{yuZ}^4IaG1^P4X{^-=uZr1=l? z>M#9Zzxsc&U;VQ*|6Bib@i9EV$v;5-M{E97nqPdmWtm5$jM=iog=Ihbyodw3(Ka5nS&pvQJgMBDBkJ^WzdFWK81-fg_iA%Uj zG5KVy_@z9Hj8p%;_B+e3*6ibZP`>x@U0{{alfqyfrRL_7g`y0{42LCrW{%$lL~d&5 z0ymZI9ef3&O(^fYOh>tS<9`LE;-8LIu-C0!7Y5ruA8A`kC2e=}58ClrRlY%~n-9av z2hF_)EPqauVOJ@Oc>b=yI8nY=znC^sXWvXq{A)dr=F)VdO9(Th!2w3I&hGv z$5_8l0}{orSG*Rr3J||NQh~rX)WUuMEedmV{8n%wYGB|v*8e=TO_t5EcLNbP`wp{b z#xO4*5L5nUyU- zd*u<`>gF{$!8R#tGd8O?Uc(|)=F0!ps$|mJIZ+v-#B5Hzt&W*LSK`c^<%1EXq@0_p z8O3s)IyTbwbGkHer#BzWC7lszzuas5ztkYi@<{p)sYLxBx%^Xxv4tsF-7;K-Ux2_(~nAffh`FUzvNEP9yt%e}-P2re_9&!tZy zUB2;GBA(m|v&hcIMb-lQC03dj&d=8TF0glrk*k(yM{9Zm;AO`nx6U%eH#B>;nV75e zamo!#tswR5xmxcem0is2CF7qdL(v-qDX@nSv-Sv8F*W8G>Cf{4nKD*oP9`~M7Jk_U ztfMR4?6u%B|9vmJOyI;%lj>bG|MzX#zC5Gz2#=$$h_v67zLihHFfb&4Rq|(NE#@(c zdO^?tGyPnq5K1Z2!F=Y+-pSgz&3sj8gV zjiEdzevt^~jTJo2)~8CI8hJ8Df{r;674K_vHu&5eNGKGcYluBWz8uV_l417jOow!< z%sgN%-4VRjc0ZJiwBO)?^=NVgSmr(~6=^uwVs?Mg?UfV%3kHgdi(w6S-=bv&S8>`s(en>D@vpe`R<@Wwsxp)b+At(PtCe(h>=4{n=Aflio6KVPUeop<4<58NBcW9koSIpTUfr-Z%hi{;)fTmw z->W)Q3`m{7_v)0nk5}j4)p4KIS}JboF-YYId-)b7&db&u_qNzCCCd8cW=}x+YVEVD zHN8;N-SaIa<~q;NecM3u` zZ&QRaK$mA0H5mgB^fc73?jlw1YIg>e^nUDBs z%gys_q@8=A{Z!A-3_8VOq88L`P;!JgpJN<#tV(3Hvc%dsW@+3uiZ6AFR?0N{2I~n_ z;N~Bz=|lyrkIKfh7Bk)+^bp{tEGgBGoL{ijfM4$-ZEqfUHTsibywB;9NqKntz@O|o zb6t?Ijd(_+o}RXH4oP)w=e>+At4Q2!tBZO&zQhe-muQ<~uCyrnoBbtUrP-2wE;s9W zRwYeJN%Sc5=QZQVSz`?<;c zs&2^{OmAmkk^NI%0dW>$LJ_x8#V`9^oLJll=2l=%a*IDKLzS$LyXD(ErSK1orRyLd` z-c3KnAPPTUg_*+r*GBkR_c!!3G$8_(x+Tq8%8uTcBn#OTWHH;&6g?b{58V`7SEQ_- z-8i6nz`e*-=PLni;og5p3+2pLs?9m~0~XtG&FaHM5%U-@%@yh)DC%MwB2<6DQvC$h zHa^3$!8mJQ_xoa*V05~3@7}M!4^$iz9Cwk6n~uLJb3C)mGgQBf5iW*msd?}Q%_G+3 z{^toqhu6s;rW<>{uV#U(RWLXmKr5P!imrJuNV!S ze|<~!Wn13rBEK1npeoY1MHa^gawU!r*S@@OtPVC2bLcbZ)L5t(+OXU>nm5Yid=GXS zXy<=eJj>RcuT3l<+S^hpZ3)y3Fz@JvRd^PA@SK2d&qk+*$AjXD+ z%{b>x?90Uya&{ zSyQC#XH=!LD@19RIi^dp$^aJNyJ$b~US^)Q>r06p=@u9@SAJ%seaS$|oH$7}2!&+9 z`fBE46pWZ%7{kKn8!p#hSZccI%{~XsDtX2{P(nEIQz_SD50~FLX!}mQ;;vVTuQ+pE zY>$ssof-DoMGPMzou}Xk8~$|^Uz@l^ch9KdUu8*XE?y}P;Lhr!&3U@b)`?$?2cO;f zVnN&>>%fh8!<_g$ebfnjtv;&3SuT%Phh$Ofaw)dBLI#Pm<#AS}Or($H(Ic93%PywI z;IT^Z$ge#mj)BZgc6`Y!E;YBqxNhH1Cv(DO8_tiAKj@Y#cYo~?7m<8uzw66n2USZ+ z>siRT&!TpJi&>01L02={$LG<-da9NwK6O>Nb%f-Xq%xme*Hh`u=L9C%fh{v*Yl*j* z)4rvQAlSGI&Z45C@b<13I?r4o{f`#VQ#m#=kB8*h`+$J`FuTSBKpxG?Ym520>QynA zenimz(*eC>jp=o$7rn0<(Ui7kF(6}``KOEn(i#{Z-OKc0hb9DpX+qiS#Eq-PfKE9!1C#FPrPVSs8bQS#Fg( zQiGkx$M&#)M#R@n#R!E#4Ix5hLKQw$_=vwyuIIMtRfWG}0P-p6J(kdPxw;q;V?Jbc zUREMmC=)l1jBd+l1joT_WwIcx=$XRf?Ib2*CdssxyG%bNAJ|+fQ4fZ}lD-;2w}|Z; zBZ&35EtpQ)Nnn6aaoWf%3}%sBp1xfnE9!65!|f!9;)DY_|L_-UlF4G8aqgHXO$SF&;VRwg`Y zITdN11}gbj>2$p)A8X~~&)ts|PS->7@iX%Ad+tXr?dy?`azmz)1t4TT73@5Q1>P)^ z^A&3|U{1d=%fqijE@nokak2^Li68!mT>5I#n=zUL+^gyK-aP$cR!n|MGOMbqeeUo< zn?=qoUk4Vqn=LJw#lg(ta`U)rsIGRp>mZ%kI(B7O$d&AyhWf55AG)YikGy9a`>y_{~Uukch3WlA%P%go+Y0=4SP zKJuyNn6!jzWuuf=X_RsMagt_J#bT~LJ%So8rV2rPkZQ!!F(JE2C%)9y@{CBRn=3@F z3Ua;IDOGA)7m{m=4T;S~$ooB)_jV{a70uj8DSW7)sE#}B8>6{q^?rPoP7uxzkR4M|6#uAF53;#V@?T4l8or`T{1!RM(VzYAMFA zS#KMjYf?M_jm|4uGm9c-p>7flw8=!2xy%>!wL~}YD?ZfTe+k=W*_to^QAk{pd`PMk zKXZF^bNhVrlljUJmOaOzANuQRMN61w77h8@K=k~>_+XBmj;0bqg_i#PUre$Z>bN3| zj8KaGTGzX^L@!Tt1`=G*h)I3OFJ1jZF()o(ASjIeL3v7pSjFngkGQ#_XF?4ET-IUB zMx87t0K?8`t1!GoZprSS4zy2iZa=QQ9joDp>n!Jqjq%G81w;<4dIf}E&Ep^1-f#?I zJ_?nVtkJ+?$|cS14O-7{(K2xGz$%$o+x;0p(SB-k`&3PT#HMp&-c?j#=aZzL>80PQ z>E-Qb5!+^~H4Vr+jl5FLoU~qcJuWL7@<9BTZwqnyey{UAw9AIC3J~7D*PJhr+fVpfO+E48`u$NI14Z_)f}W@hvL^A|!0 z$qT~V{(JJ2&{9FS6*&Kn2b5~DPQQ;MCURo9J=1D7*`YYce{@{%DkzaF1?1|4ARJrKwY{gMq{GjQ^9ll1jqaJr zQeku+8|8&t=9p2}!l74{P$wH(4$`Je%{$ldu~Uwg)6vT3gtcL>Lp8O`EG$=ps+MG; zaS6{1xlCsD6<@-cixNW`^$WD9Jl(*&ll}h(gs-6-_&C3*@U;X1wbq3%Vn)$e;wn*Q zT^YTN!v!*E(&)}aC%O~h16h|B?MeIFFG`pZ?SF{vg8y%e;KxR9U{wM<)qtZ~!gI8Q z6h~k0+AcV%07q>WT}=F<7b8#g+z&2fm}3^wurh%3pV^`dQH5z0h_0&m2&|Rn424yW zkKnp+Va=}h@ad!Q&QN&Y*lgittIP>sw*cZq6f0(KUAb$*PuuCR|gVIGGj;dS(X` zC6}zh&o=x&{QnGD%htU0Th(tgMEt8N^M_mB&d63|MA0q)pmcKMRk;>qgSq>XlWH{E`#GDX`DM|Q$fl)T)gO0zt?k{`#_mlb? z^7>oh^|w;{tMYy`vr_KAQ+VV&Z*8lo$-x7{j;3FF0V&=2zIYzLzdHVE$07069bUXD z>*M>%imqLq+r!)AuSOf3bl@0re`M@b^^YmBHw z{bPA3PPtL1W9z{EO7HmUs9a&;*7Fs?hn6ps@^vgwaA{4h)L+wIg9Y7o1aF|pY~QQ= z1iH5AsXWU^cv*+TvyMzy!5^vbNU2XLm(=wM5P`i{lC}5jd+C1fW&6FC@An?u@12Dd zcl@&TRqXd(nR}OG56pA89DQ1y*mv&xF}z8Cv^?@u92xdr=g*Z__ygH@_CGO^VEt>8 z@UP{1MvorZ)#mgZ%z>C_(Xu@&a0Yhhy1i=?BdFFk#!2w!^F%MWcClKb1Mg==MB?3@ zs4YCdQCjdPpZY%LS$j!qd#xGeIh;7GDBcc2c=*xM?T1R_nsO8Mj?;4>wouP1v3LZVJ8{vpJ)@-?g*}b*#oyD2 z^PjjRfkZ<9FQ-J@Y%EPQl;Y-;=$MV=iH7nXW>pQrp2iS;?`f<^G*t97Rwf!MamOSY zs(Ko$6AjfpjWvmen)Z{L*~>aF8!)0UIz~>nTJe|eOvW-h!}dUMa|)K528{zZTdwkO zvq2cewSSaf^44U>H#`30k6`?NMF>`sd_?<;mC`;{{Df8JHQjB;{2asRGt%mG7Q*w) zTDu!Cabw;{t)$W;(A2j8&ApaV(>-WB=tuDXe)1p(2_hk_b$|V<@Yn4pFPgvN6Y}pT z51QXD&m6e^-2BdyuSCSIQye&dPQG&aZJ3(_=ig7CC_Hv)I#G^b`8KpFYz3 zWuK6LKYgY7ZQP9m!?T}0)BM3tsDGF~6MdxlZN!=b*I$*@S2=uEeM0@!2gqOj3HfUd zkiW*}&uTLJfI7S68zLPayr|NFb;0^}z!V+COgi=ungNDxKLm&SDh(I1|N1uNkJ9pw z4J&_&d4X9SGiJY8%>y&YnKFEx+M zmb@aEebGhc&2eg>6-G}qf3%MT5jfgxaG#5!hnQaXIS}PKdQo{RdJ2)$h`E!+AcbcI z4+_t>dB778Fr7R|A8SySui7)^;niB!j;De4V?`t1Z{>VGt}CmN?^gI#zm#hS9$7CK ztbn4mVlv(TEnV`|*#jpiB+Q%n5^ET0&NIFKrl?kIyznkv{tjX(`v+tY67yLC9{kMC z*s#@3bFGM;(LGlOBwuu{*bQDwuYEvE{hX3gTy;Ecp2BfVGmU|cUuiT*Dl9cEx~gB9 z4W96*`gg*+yd{8vEz)0gIt{#-)t@pR>(1?Edom1~on!dL!~LsKHx;}u^S|(FJ{-*! z&bw9lbM^H7u;oryUlP(ycn95p~+@CyA9^?|uPjeq&*^XM@al2mj*BBm<|O zezUHLILp^cjhMN<)f_2Vu2z-nduObmD=e6n_6fa9B-%!KdmbzrfmACg=l+<-*gApg z!Cx>#f^&%eNX9lJElHL$k>V0QFq2kpVKWElX*PfT_1l^DHh5d4uAl z{Yh4iNj9>A0GfWuYC&K9Nf{q9SvF~(1e{0wMsj6~nZjmxVnPFS$c#(72C1_=03o$v z>~7oj>M6{oO52-7ju@mSKH(X!h+7*A2v*#LLewSe4V5jdKTL2j>2z0<2k*vmIrRtV zr5uuFf>$&}0?{w!n{#U_Szl4WQNvqT7q64U%Xg&W>zsI)atZE1dw_MnV|h+qMa=Eg z_IxI2$-sY8P>y<+18Zqd>9WbC-%gY+lU1&@i+Av?e9DHX_yM>I)BnpV{}_UvPwDGC zDzTZXdmUdDLYADG&lib*Po5c0epMhp*OL}KXD>rV5YpE+n=g2r;dJ|1!4pOk4N@cO zW~jjV*26sPf-!+rw&^FQf9Uqk6*I!h_tg2gzcd(2`C_|$$!c*==Ow1G?)?-GR2T|R zD~RnTf}@^5W+^#5tvI%u5R9_jiS)|wv~jWBe)jv@_p0!;gJQc2qBoIN9iDb*Ypa(lr+q56dvx>)o@>L?j*RUtieAKXU3l8W*zV%!ES~Gb(~gbp9uxgM&(p)xCdGD- zjh@Q$jPSG*W4i;<6L^kl55gVZ>EzXY<%|imO;8v+BZp=2FCaZF-RP zAQ>mayF}{J-zS6G0Z=Ert6k@L7z+}68ZnyuCFL{CDTkDWvxFtWtF!XNUFM^!N`1l` zJ34l<3|y2xL`Vog=$oa~!)3d)2WJ%IRW)uTy$;ymhx&R0^Z- z|7Y&26>us>_=|PCnx|E~pQ_AT_V&{>Ny~4`&(opT->n{@BRW_SB7@T*SP+$ zU!y**xxoOs@I#UiW?4Hhf2aG%CGuSYqy0|mc-2|{U(~^t#^vARmofPux=yAt)r?8u zI|RBY`H(6$#$*&*fRD1tMHL*s?7mRJehw65+GKsUx&6AfJNX6Y&*}0=&>bHB$~giJ z<|HmZ**P6FGyf$jBG|TD%JD^g>ZV4&mL!IjJuetgr6+h#>^K3lcvMLO|;XV74{Z>0!l?LBx-3Uu4 zg2}2l_*Un{AF=uBC#wSCTRlj#-=zsh^l zWK}G@H>uK@J6V+r?{lMHAbs9sRWQ8Ii=NK={K=|hc%QFI=d#JFXn4OYdIafhlU3R9 z-WDCp`+~{S&fsN%V0y~#=m{vC(|lF+wN=SR(Ktt-aZbyR_2*a3@KF&^mc8-5E8AYd{0X+zVBQe4oF!{olwD-jxZs*-@!=%aVTMnU8}CY;TOnYwDWA)$ zd6=@vxwW@=BLpsI4C{?=bmA*z3>!+UFJ333*iU$)2Dz-af}2QWTz-sjylU6NnP%r)+eR52D+p_o$ds8qZ7g^Ayx4 zZUUr#WdoxyW+}p*;QkuU;lIa4;x8nx%nWXtm`a*?q~uduH`6sVIt z9t@xe+6-^a?O*fM-nxqv8R<7=n*e&tES`(lRDnc3mp3-zqHER0D zG~~^nbXJodlmecgOG%;;XT|&Gs@b`=J+BUwPF1>_Qc#`YEoXnj^7+21K%oq9Lmls> zOW|9A&(mcZ8*Es;dDJU3fUqO#u9UjPHw^#kJvkwAg+yu+I&Wnhg|*yf}C0Ql>eae|}QN&r)~%tc8IN_-9rmL@U>D($)Sa z%n+MiS7@CpUs)mRubfdf#aip#S}W02>&>aG!d;MAJl%Yjhf6YxXUKk79^t`(V{`aI z1Y|t`HZuip5tUH3Q+;^2W&>ri(lB$8jti{9{x-LlB0Hb5^IvAD%zw4zx$1(EJI(uhynv)D2+q!7=2Cr2PQCX>MHdWLmYK05J zWGkzj#Wf44nmze~?l1DF=Ny2N`CeX_+}Q$ z36aGdAe5Xnl5>vNr|9vrBu6)#Cy+BF0n&}GX;>z?1Hbzqe8%pGOaE4SxhT(EF{JxBK(4GiS-y}>RSvKw8>hFhx-~Ci!i`z-2nO72Y}PfO zmuxfKY-7A^(JO(*-Ut!D681wWEJ$n_I4o;lThAFsDDKtj>|)zPy5U?9CM(fp&E`AQ z4%{~g5L8$ZTU~PY24hgRH?b~1l<$1&my+fFY)k)$SVn5BOW#e3r=KYw&NQ1B zNQIE)iPDgH#^%%*mI!*AG$GXZ8Qg!fmHj5-5m;dUIZ2zqgovMzrQ!l} z@e8gbM30gZy2H{II3(Ml_#O;OIx51a?gcaG?HFMf0BL6NE|1=F^^_$fjYrH;(}v6B z5?Hfbm(4&lC&x7}h&K3wWDDN{vtgYF4x#vl0rM@SQrM7EU$ejnt6N~&bHK=sSh0(B zn~hd@UanxZG>5v*bK>IUG`)CItp+%plqB{m1GVgEDMj&>!9jT5_N^ncIomJ|Oz33hj71xaP*!@6PO zizCSVt63^h1PPNv;AZoO}adA^|*p+Zm3QeqfPna=Lga~XD( z%Y){axG284P|cL_NWLlTub4!JU5#}N7$<^rFfs#}7VsA`({g7c?}X_kO)$wG+TY)t zMb}NFpuXIpfPJB4sUpi`8k|9~G|v{E?pDlxo#(T~>)bR-l~d}bT*b$E6|0tKTPj%~ zw3(NycobPI6UsgwDSy_z*_z+NjsoQAZpyK_nqMLXoJb-v<5v5*?@LLAccm>U3@m)Q zz+B)hi4q=^G|?!-CHMHNvW;FtvU{*(E&SQjieh%+vR9*LR#DGGN|r0jocLU;#I^Pp z*NAsb2Q*h($+@y6{MC5s--(w|v4kyX1KbcD?K?Kh$$K%ztd^-T8IKP;&apidlNxfs zw)Hv|Y6o8&R$_0K7G3uNrdQD_ucGJ_KIy(M1@!7!tzp`=aHJ}~7w{@VwHWpO&>1L`3v&GxA-F;RT(g0js4RfZUi|9x5?27yeo`10q+5apC)ccO z6imN|A=ylNeGB`|T_l?0bq!s5-t`+4N%|$RHr1Y1`|RyY#6FAtN=!~0KZ*@{yOwG{ z&&aF8%)jMFh=wrvqS6d$r#W6|!dD6TZ*mwUtA@obV;hdO1pH6EDZ}_qc@px zaswqju6{c7_y~8B!ex=9v50eHq$m&e>;6s~l2K-<_6m}SEONe5r=RHCCB*9vw1ouv zwm5mx;-wxoUbh{rXqcM*C#9|`<3bMkS6Z1zhR^#CT|sa6ETzTa+y=+EOM8eCyr-IV~`qu z{Tn=TBb56Ahy7{pBNMlO$Ri6y_FSHzYA$~)gI>5;@g@EHs^;-H3rqYG8}LgcVwNp$ zB?5gi#v^36IAw(uV*FBNxe7*mo2Lg3|AO)pIadi^N3v@Czz za#H);oN!Z-*>bMdVV7a2dGcoSAmw&7Z2Pm&TTsh_7;VjANnJe{z$AjgdEc|tA#fl) z(|)-?-aa*5PZeJMe5&J5lmoc9_9X=~{aZk^T=h};zJ!@H{lic@<^b|7&b=yc(CxTp zg~FSDBU_)!ZpYM-&AzC^OG$d3WP4QoIwLb2&wwXm=IOb5Sm9etrt(9%i!#rVFSFC_QojYj-G8O>6u|eiY|Xt7iab?f zLC!E&vb!ER;2h8qxREK0f1B9{lTN*c4MMH{VTYIPoDhH_mk~Za~QvmOh4Fe zbxp4kKGSi>9BqV?ocOI4k80tGlc>_Hovi4RsfA39qel;)i~s%<7nhRc#K&oA_A!EN zHG##!EV5{)i8*f)dH<@N!kg4&O~3Ru6#~ol@CS2!b7vddZ5x|_!`tm{^`;=K)LhTz zV}uH@yIxXc6Z)O3MXa9Mx}}OjJEkbZ?Kw{6KzH-gS2<834M|PB}j2H~WZ?k8Lpqre_nF-sZUt?Ib__Nf(EG|JV+2pZ9_f3d)Vt)=%#DroqR6Fx6 zG33njhZ6pfo)%U8tiq9gi)oNopZ5P8RKG%{J8Oa_p+>v7aFtKfUx)IZes4RH?g-@8 zT1rS=S^s5Lf2#*Ryj|O)cO~gg@>%=B=axq`&)}n5FAQvYA6HaZ8YCK<*vt>DTpInX zSXqF#Ho09$AZV{o%d&x;&uUY1%vDxa)A=NT5^7!G)|zOX%UpJznP)4qg29BBCI%k# z>@jMW<5*hz)U-_Oq`?z%pYG&SuD_};U&B|nY|Yp2v-)xYp(*6{lFuopi!Fbtr!(_I z@C8=A4Rzt|-assh>Nns(6%|L2P*e@7 zsH*wc)1ZoKl041~iFP_l9$P9zJIOqzr=e0rUJk=zA8WLZ{S=kl+rVL%!&_wnAtr6W z+>Q)cp^N|0>Iy!K)CjZzb4O5XuOjRe6%YE|l; z5SN+XVW_E9IZ&1JH&W{VVeft5C7$9iWM8@4zB4(HfDF#U~O=FEP zt!Y}YuGQ^Ahy@EKP--cyNgxl?f$CNk*FTFZx-8cHqFXCsRi@A+RQo5aZS}kEE~4Ty zE%u*c+De=6`*ZFylN15}e0P68{k?weYw|qL{d4ZQ=bn4+x#!+{E_XS6!E(tp=_xtR zFyf(yqG}V~Uigpv@Up;v7?rMLKe<7&nxBT4xc~P*Qi|4b_gnbq{KUz@{jP4v z!JEsS9Q@V=Rx@cLChYp2M&{5?V^fP)5Oy-x!m#uFYi+YYH1|b`UT3%DAmvy78aa1E zo9K#l`=G1keE;tsEeJRPNZ+tf(dW4e>Hy~SiG~x97x=Gvy)mo~PpMVqDw**4{_`wZ zTl=Zrm3}iq6ONTwoA2k$Ymw&Q#x*);1b^keT##$yXH?HIuQlMV`tJUVvTq}TxB&g0 zw_2oWGOk`767V83!~fspHPq$U;56fTkE-wV9o6IgrwPYE$UX3FYyUit=RQCI)a1pD zzJ0qTL#3K1VEJ*wHbaUR+x&Na*T|Q9R@HIwhHdUY3iShS$ItS3-XuKz-6p6ibFzMn z@gM0v8KiUawHmC(*SN#|e}MFw7s^}+lw-xN3GqfU z1nm6}kLjyr9TFsl|IFMwEq_^umMDUtdVO#AnvTE$=Du_zOE_2dLA3nJ%OMk|$sX#@ZT~u`<*0 z>lw#Zy_1`EGo5Vc3J(-b7`QwXntrm~blK2>`C9l}%VDd5=24v`)PT&9@i#i5Ym1D8 zy4@+kJUqtr%@ou5D)!@HYoWHL{M+WeQ&QS|SL>5a^seh#h2jKNn+vBHZ@6xBa^&to zIu^J7_G&*zrk$1hNT2pHt)3Ce%tfr-t>9IoJ)=x1zrcHB)67t4N8-tb(XOfco5UY% zRcRRQp4qb{#Ip5_Bi#pQ>|~<>N!j$Z>K0qd=D=O-_LbD$1bK!3t|4P4Q=cDCJn8fb zj$&Pxxhb@NDCiHXXG{Qt?rwHtdc(Q*i>F^y|97T1^Sey-H_27`9-A4m2V9q8<%xug z$ZPliaP0efHubVDQ;1)f>bz$EH^#o-pX$7kvAqzFui3k(%>H}x{Alf6fx^W7ho5%s z%`OZq=d$uvW)}Q<#=cb_$t)}CIamyzPd~__-#}xi2!_Atv7isFdS~D0s*i+5_Mc_) zsH8L0?w?zTykPa)CUoUs3*5v0YG4u^6=p|l&zJ-p#~v~aVKfwn( z7*dgY-p-qbOqi%XAJ}_`0<~9D^zYDa9)yWq(!I#vgV~3#V1K+#V<1_IuEJbBEM+n^ z{ZQy=%74><;}6(|1RSq5#|x27Y>R3P^&BeVrm0Mec6bbB=8UqtV_Vf0c40`zNj$Yq zIU<|N>N7WLlg43h$jh+_gV${7R&PhuF=#omr|L-QHumGBZXeFf`L(x;)+_HhG?_}L zdJa$ac6zzeLC;U@g{i0S$&S8m`k}<(k-dpS=dl-|bSU8q;I6*GuKC4n4tH%m;r?(I zGdd1aXTCIyckrwAcbY-5vghPz*V}q6=a%| z7x;f*I=trbU7ti=EW@>QSA&UrPHRl3W&KO=6b;{Xc45`5_Sf2h*RsxTzH0nc!Pm|3 z{7v@m+#QVLw;!>bi~b96osVXx4=qqDoQ$bz}Fh*f+#dF5(ztsu%m^~*0J(!TlH z>&GGe9c0@m+wUSD&(;rhy?ON|*GKx)k5;b;y+6{o(%y=eNBVBEx8ezrKDnm)4x^-o zJ&gnt76kV#%=c%ST^EJ3hoj$))yCtoatx11?_t0=^wui)3`5V^7hLdX#|I~=sSAEs z!BQL43L6#tt_f>q=!j*cS1Wuj)eGZO?I{G8+)QQ;lqj>+dHPV~+lNq(`=rt%GFgO; zrRMqf6*La!LvngZREpkEKK^E$`F>T*2#%~8h}=^mk_7D&?)Vz;IGk|sOD0Wn`<%Qr;rjb$Id5{9u%-Gc9!WwU5}4kd}Dfz&_6Xpx)0#(@Amfi8`(Os=J9u~mz-qbBpi$bC$Z{(pENxu zF~Mm+e$UbFuCs5C>r$}Ds_T1>zOSpK=jcs1utq*SQE=O7^}h7;G}`S~U3x!{+n%{p zrj@RL&v%-#4yo#?j?VzoT-YGe-e*=e(;mVc;xqmor%(6z#XUzuw|t9BXN^DJ)B;2I z94)@(OZ$7(zR0JP{}Hz`-g9&`(r2um7or{4TX|A5_un1NO9KAtxYnYinC6zLd$|5& z`pTy<%yIww-#Y!P$vr z-9P2;rMiYK()%PL;ZkvAr0*m-(IBev$3`6@cP@eZ_017z*Kt#1b9B@#UXk7}OX}S- ziENju4`F}StNLZ6?<)d^VyLO{^`eSd^y>YLGyJKgWp~L3UsG6T>65=f1#_Nq7pq5L zpbc1@#&$^P%AUOb)^l`Hq*o((u|O7T5Mr$%~3-Ai?GS)}i^LdohE z(m|0s%PA<$F>bbq`5%Rwh0~9yB8px0MCSX{E%>&R5^_}NB+LI3k8Z~1DqGK`k+Xd)?#$+IU0`Kqox=AGo$vx zTBh_)?V9Ra#LF1F3RtRRJr(S@hd;3E!zS@6A3n_!WY?0n>J}=dsYLUKI z36x=_Esc3t;f~h{mK2z8eZi!Gh=NXX_a%;IW|6uec-P@}V+(hPH#egozc1CDh~4L= zIUzq*!`!)J@wz4&JsNC5f~ye+0ePtf_WHsM0-soUYx;(G&k4?xLyWixfn_F+=oY5F|HGWODty=V)nUt-MAS_^)p#44RX#N*gyQ6bA&ZLp(}M zKA*L08kiUnT@$36YjgLJ!uSh(d!9KV&#iqjSD1k4nj@?uy$`EV)a@$#PqIj(y>!An z!+U^vs|qS$ekLuF>X5X~-3M9@zL`1ubnj&DEdC5O*APEpu(?)`oIDK%>9mnc>9=pB>Q-wEZOFq8{yokNJz$}Z1;FBdP-Tll%sQb zPUG@5>o{J%iuvxE$Ir@WbSQCN%E# z+5fXv7)fw6rla_IcLjD$<;ZqnUbv18y5FWkTyI;Ro>d2$KVi#o#oVz!DL?Zo<45AQ zLeBaArQK#Yt#FgY_p!AA(N*Eq#HVl3q}YG2TX5&Dcf!jUt=(AI1YZkIK@!hf?fkyur+Yl{NfCVfi@n-sp@O~_p< z8vBv&8ZBmryZWg#Q^C-Ll>g|OAa$fqyKfQkooc==>_boGo+qR*|47fN=zFr;qgYDp zz9)Bv(mBn3Y=2Ax)7UkS|C^^K#9xdwGR!pb&bQ2`2Th9xJxKErofA5x7v;tEV6*E- z%|SoX{ot9V)gd}jrn$_!B{n$QIuT3<8^-Al=}G2uhSrqlvy^|wb9oBj_JOkizwLE~ zAz8QLhCAOgU*q;^pXKcHBDUt$vggvj^LAxtp^34&>s;rG22H~T4A+oWYl6)C!+Xd3 zw`#c9>fi7BEB?YzE7R@ed46PYw_$U&+U;nl`-3bigL2{*>1E~f{J+AyDQnge{W2Ig zWF1zCZ&-AmHhPoU+=RhW|36LQL5NlVfZ2=`a9=rI=QumXN(mk@zf6zu z!f}7M+g>ZWjie(#s z-A3^1e0?;&miymu+oZigHV~F|cS3|FRpTJ6N`uO(1fZ1vdS?a5?Ik=ve`Wo-#4r6{ ztb6{gO%*Uhb+EX3&WZxN;PUto8T@6YlSF!l_<&Bie;1UzJnPVwiInL^`O0nmTzA4=g=I#kvj8)?*_5c`nM|$VE z64Koq_rLH%HmOHUgL$32ysY88EqaXVEBpUYiQG`0X zp@EA%<6$-<7jwH1B)JfisaWsoRnLv~PsAL-e9K|Z^+Uj|p6f>({<*hGP`P!;C< zrU9S5$eudJH@%=3@Qr3xbczO-(a4zlM=@D|XSqL@cDnki1&D!aiGc!HQ~sUHsrnYm z6HSpU_gqazZ&&UEdKl5hRpeFUDssWNia;VfLrD4bnOrjxDxmu>sF|syR4%tbbSp5u zrb<$lW)ey(<=!i7o%kQ;AEV(ylYc$pcby2Rl>C#>3wK>cND6u9x_do!YU0=GFSHGO zc{ZyquvxG+F*g25UUj|0$tpZyJ4xkW#DHNW>3eFGR2vj=WX0&swMch-y5DRhO!+6~ zs#R21R6DQJvBRLPJ=Ub5y=yYvLXn?O zTYqmzSp7e$`d3i@+Lx<;OVFl^{N<GSAoKkRu3Vf&7W5Ly$J{?7AJYZ-I9D=1<^Qs4 zj3%7x60dkhnYm+>`H=0-4Jgwf<}vngl&aCUD=3iXMz1m^-K>AEIfY)_SHd*E)8yk7 zl2NN-$her3Rw@7M)&i1}jjS_DXxOOA1wfL3{{f#OvNa}X{mrUv8d<9-?oXa-&4)-@ zgwz_nxe{6g^dp-6tY%Ar8*x*F;!)7uT)%WY+k~vEGXQNGow00&9Yxo^ zhB3vipg(~L^bM9ldL9%#;kN}T|L;CLM%zeVuur-3I=PYxcZ`QYrw*Z?1O_s*^RJ8v#?>Pr&PN?_7=Oo6=Q#{a3__gc6b1U!XlR599@0<4 z2HFPL7C$>Dz}n3Ta!(--Y+N4`8FDrd$U9jrkaw-G8`pX6CkM#S^KbsA7Z1t3H;pIB ze9HI#gKHVos3*up6>^OP7S^8hBL86DVhXe7@wVG*CitIo2ebydaIIJZ;+!X2#n5jZ zyL*cBN^JPr77aYLlf-`k)x)ccbN|~GH+6SQ&6ZB^-)r!HwF>w%Ii+Z%AIfXcxE^~e zP@*Voohg6#ohnTBc8!MIk5mh1IoN+O%kXfp3;dDkIfoSvKz5#;>YUWs1-V}HS|gWp zGG_hdM;P^3{{jL0Md5B^HFU-K##$c!mFzfibDdH;1&%YCoQHWpa;91G+g}O&10@4m z_WzhLt_4vPMvQ-F@DILDMAn{A968x4cE=Uqiz|z|I5R<;Duu6ojuZ4uFCW#$+JAcn zHz4;b{S&OTmiBFn^!*oKnn?9M)jg%hUA_?l1cP~rHVf>E+A!fMpc&H3}0tV`BFug--a6iap7L44;b-5tb<(x2gt85Z7u zhUC0Ur*Km0h<8U1X=xL-=$3t)HmQmGZ9CN>D^J;%OXY(iE^|fnlWqT}3hgx(-|XV0 znb~0=C-)Eta%LjLDKzu1!WI&Qwvf79lgrNcat5^w1>;_HFXKzii{36&Q{&v4{Ty9cftXzXU=*9Nv+I(4iJQXfYQxjy zywRdL;_p->) zT+#k$etbnm?0t|3FyRRQL>%q@!a0N~TYa1jCmBUKUOtHzSD4~_N_nfhu?L?OiheGf z7&VU(LT0{yAS5h?dvxHk+K4v^*k=j?}q@OyH`WpNB$D;q4Xz}_C zj3L^&FUMBee^x$yS1J=e8(6c(60dZygomkiFapQUzF!nzA~=!W1ujwkWSfLY*-QHyN^tX_UX?q~nbrdS zzQXvo^ZML334RIw)@J1x+h1~@8Xx}+?fattmN^-4{Pkz|pPfrcD=g>}ot;9i<4zJ< z-yHSd8DQ8Aq##{lG8+#fK*@*&d}D4Roc|;9+c4C9#P+h8T&A;h%2XU< zH^L{i2ue#&$oY`qRDA>gM@+Hse{`#aXOtY8DRNZ^e{1qT|7zPmh3BJnCU2KomSW3N z4@Nrky@(Fb%JR%&_MbN45C-ZjBL71FwXX_Vk$&8tQ9qU;euKSWhX0_wAX;DVy0}g* zoR1YsqO~Cqt#SXK-;YRg^FWv(Cd+^9L7Rk&8 zG^<8;?<0$(j>*W5t$bM<&iCK=K?9%Pwy(R+7$2oLMExC~3gl4a?g-)j$&+RkKLs;c#|UWwXxju+~j+4~%9@z+7641mZYc(y)U8Z0+ zJsH=n7x<5s7y7)@wA}uo1^(y8A}%B^TZGSrfFcYVQG3TC&mxkB;aY@n&%Tg1jNgzJ zI&o#^1gXk#bi&bqFnO}UHnNR!KH!H=;{oQP_PLtXE%qO^Ep4W4eN&nZElb*_>HhRX znbx9{s}mtL=i{P7ThXYuhsZF)Mzm*3c*Y)v(c~=F?jwrBf2nd>KggX~fAEQYM&e#3tsww)wcf*(FKp5O?$I zcl-av#AnUpH+L1}*Qv4#G-~`6X7?({uML*v?Utnpk}swXHR>hQTBqR`@vLPil9J*7 z=MrSYfDCcV{MWx%#{*bjh|bs($%yVSiX=+<9Z*rM()k7{Y;#lo-fIGemziC97_pq& z)P9^e2B&_YVxLhP1G!7k=i`^qUuI@E&7CI0U5l?_@xlvrUP!#gJ9cvK#6m>*@<7?( zCObhp3Ij>~*QeOUc{Agl_JgDEY0?#>MDJ6IzXVb_jj@?j>`J~hebk}AQt;G z7P(ReWOeI$W2Pq${qj`jEuG7O{&!>0o#`uRmM^)K;m&4^22cG>o(SwZ65FWw5G5?p zbbLv>|1p!7s_xBrhJZfY)h7aBCcC+iH`{epdIE^Fbj!PVYV=0A`;;1(^5 zh?o$qj2i;@tD@Ly-eK70+>RBcB9W!qKh5mGB}f8Hp1w!+9=F!*BGI2!{KJ8o3+C+LIcyx^8m zHyY3|dHe41o7itb%^-`81I2_ssKQP0dH#hzvvI2yEM@pePmmh4hSa1;`EA*NIFVkP z|0B1gT>-_dp^{1VK`#{scrCmspnzJ+vytaAp7lgkxHj>denM$k%E|P+4`ySa?|(?d z1S@YlX_w%>)e*kkKYEpwt>&P^%-9yWM|KC75#;doxJ2tqmGEje-1H7x1QE5%I+vy9 zFYtXcJsFz^Bnk8<{D;K5Z~ayrXo=Bp=&}DUk;_m5a%aN9?Xu-kKp%)$HxOuC0ps3v z|7S?Al%aMM*VRB!W6brRHw%||@oLasX3K_N$N|n>qmh&LA1h~J%BD<){#~vNtOA!v zK%J7V#^KX#o6^?d_tG%UX~fL;zY1ow?0^1{_+=s5odnAQ|7#14gr54~@~#UCCEKwC zx?zVF@2KF^eBpUrLgh;+SwS5hsi3s({CxWd0)~)G(lBULSRhBa(%;+tqTeV1B;eH4 z-8MN`8D9(oYV$+S(KEVFXT!we_jONRecOa^q*r^M;OwPX+i+$q`Lxte-3O0gfxd57 zP!#)tNJezZkI~3rvRvZp==n|Yj*!o;VY!1@61h|RAzy;W4d^?cc?mYx{s{wn{kIE6 z?Ep_2`u~p2-}|(c7AS-Le+Ol72#D4h>AT2i7G8j?ip|$rXt}?$J}8|Oa!!imhQ_}lp+uIZ*{V}U)N?d$>wz8G=Vm}V*q_h- z=9RP~dilGB`z#5_rHQAk0$wORE9}h-r)QOTGfUF5%DkCn=~+>4W|RdNZ)S`o8*e5H zHx=H@iu9~XZ>D;#2Mi>VXCMx%##ccYC&@ny5-T8~0VpPtTXj#HH6z zLGSeR{E6P&aC-h^Z!XoFmUv1P45}byCHE;6G^T%bY|GbxK5bFf-^w~QUy62i=LJu< z?Mti7wUdT^(-H4FTi8Aj3o09MFBT;zfO&74Ul_v03h1+8UfJy z_Wp0_O(&17%#PeMQpaZLOiX7~W9u^iqCBXsuPLoomV>mLq^Je;VgASDllk8VC45S# zciiqnWc#?Cw-+qc>(n2Y%~kg3YQ%Ml7w+-E2|^*A{}&e;>$zkFo1~48HCE)~ohnl6 zA*Y`Ah}^BcXLjae3Mh>~^Ktpz0eM!vPqrR)j8o5jR234uZTz{9!AZsZ8=M{10~!s? zE}76XSQ?xHDKkex&X@lFz)!rirm|D?tL{L*D%UxX8<4x7uw$&IU%8Z=1GyJ-=oL(h z);#{R>r^|r>Cmh~Q=Llf!MZy^2gA~5exbQQ8$Gh`DAia!gUxscd12nmAbz*b_^!S+ zgwc<)l@ci4K;p^$lhNzC}-gKr2RyyKh~+;%IUA zhgYvSR@{C4>J`U}yRTin;y10YTw_im4 z+clx9@c-F46qD9^D!j4cIe+xQ+)7D{0!G)!ymH+sL6@aEKNMVZp2vFuXN+=hKPA;H z!Kx+5*()~V-<$j2JM#RdJwtJ|$n>M=Gr6MWS9M(}x80qgfuaxMU1r${Vczjg$T>gs zyx-t-nM`+RVAh03i3(1YeIGmNK=^InLv9C)zyZf-{J#lUom@NAb63DOuNB|i4td`@ zX^g!4zx$&5!>oUl8NQ#t*5S)p4rY?te8)m-FE~Xu&B!dc7yI5Vw|Yl8)s^W!+3>-x zH>_^B@OxZNOoBY!Yy1Q#YPf~&0dCzVxRUEFVyjK>2(3Q$XxH@B$G+LU*c*YpPN)60 zU`M=swBgaN+Zw)!ODeeRaQD9HC%I4WALy)|sr{GOxHML;OH-y|bgZUeYInPxRCViJ zg+iUa)#5S*N5FQx2+mb08|e0LvT$!FY8`Z>mBMR|OVjA8TlM-i$3Ms0BNtIr7dL7A zBOedHrTeU3j-CJMIo|k4QqlX3eII|Mj*oFi42`}Un2fG@{O#9>zP28zk#7qL{Say= z+7A|I9k!yvDSwA_Z2W9|k!@c*(N@a+zc0K;{kseAG5@1_*F4X5#9fvCP)wVZhd>jK zYn5`Yv+aS8iNlmYqb@8AO7b_+b%TG~7u}AeXjeH7&vbcn%Kzcp1Hl*RlLOn}ph4mn zVA$@zaKA+|p}Bc1#x5>t_wPsLlP&)~p3*PEjIzNRs?8hC9|tv_UD@>z!04a(bQAc0VA_A2?ORSKy#Sn}yR0wC3OU7$c>*p(@yG z{e$bMxMq#!`moHu><4*D_HH7zzq1fuNs&?ibz||mEnO2eEtKgO^XFY&$SlVQ<0J7G zIar94V;NC|OwP}pHY;_r62-V_T%eLafo|qjrryM-22z$n@u2HJ*AM{mW@E?vvZ!|5 z1CDBOt~=*DfQ_3>MxzP-tMiZpzQ9)%L%d%XWUA(P1K&X=-8rpH&)Pv_Lq`e$`@GoL zhr!Oj-WAXN=YfGDcQ5f{`VWY9`1Jz?9AlB*r6j=iyU1@z{163EB7XH znvUe;KNBU^|KBfaY0U)B-_h(d<=${)Q!12wCR(~JvZEY(CyMWzzm<1UStWq(}m?clRC`{QWo;mD?CQ|#~L?6W1Mhdn_rLtzi+lTFPh ziu$$aD1i$Cif%4|Gm_8mj-pPohVu|4GCpSMl0jrF+BYU7cz42is0xFfzMj>Y!b^6b8n>@P|Z2lQPR&umO&%0BjZ_GjgZ zectZ#F{o3YGVh3&^PUH@HQ5jU@`i>#6hDnc<8dr`860sD9^mK=Ln^Pk%sWZG#18LR zx*-m6_7F+{EfFU0NM_@kUv=*5??e$6)l0nRGxt3E?0+mb3Qiy9f@nv*JTYIHinm3* z?chab(JH<1K_mQ&C5GZzC>U@d?CBi= z%{+2g$izb{D!rX#^-e;}fGb~&;W+Ga(963?I;HN*3VVCSjz2F?aP}G6Wj4NT`%rX- z*B}zU1UKd^_7CbUBBys-b)l_ark&|tU@4-VLdWi!m!KiUgF7AVHeUS6k5%1d#Dp8K zz2QGI(}%^6NB*!rBYJqZ)&8DXHpKHtiv7IqI%80{QX~~O=GhRgOq}=jpL%=G7dKeP zHb(TgDuCvs+16xt{%G^7Ux_P0tsr?;)c?-57753-_e~Af0P5E8qIL6Ax$y(dcMP4% zjh{taz9ct-@k?~+G4zZZ8-FK;`Fxc}U9UvHck$j0Re$3IFoI&Mt;o>;z^8{4d7?}i=e+ktG1 zBrj~rGvyyB8%;1OzZfYmdrUAc{GCk=HGW$(Y5`uN(Ku4fn2s^lK+ObF{KD5lwC-FNPYiq8GHc&*$@hk$65HoXu>CH{yJnw~JIPjkN+}&ul8#X8^xA$K z`N|%SZ2EO}Uo^S)VW&epm0Y{d^o=W*T8ko}(Ht~dmOzPTOC&w^efYkQRY`a!4yRE_ zw@=@vu{yK%Z3B!y<}-i^zC2UZk9Qv`^CNwqhp3svO^ zycOs*+rIH?BwA+uIX|mC@9o~s^Jzryuvl+TLb!yEMK&EDKTMremGf%TQ^}21WrKXv zaw&L+v-`@^>(?2HVvq<%i6++vBziKr-c&4Hc?g%wSE7rXE$o_L{|EDpHIElBkbbJ; ziZCOMv20?Xph83NeknCIMm5n>rN^E&E)7bmX|N@wBjQerM>Q?Lm|{xoWT~AlVHwGg zx`077EhLLrGVM97wWMhq88Mjy3siehRD$D0HuTHT zVQ+i(7g2AY9^^Rg?W5fzo3MPw$}yW!_%9#;4ZWM?&M)XmV~Waojuk zr(XpcAc@Fy*QzW%;N%~} zNJn6$eXuj^qdovnKR;e{{K0IL7t4h{K*t!5{!6w&P4dR-Kdue_yU~BCZajv5p%+*S zs6R;8Sy7vwSNEqv|5vWS%k+VU zKb4->_CHMjU%AKl)2YLIx#QEKbi`@;^-f|0Xr!W$3>& zd1J>PNB{q4^q}7{1~0Q_K&3yKI40#gXCvxyy>5TeVEPgY<&hvYPfWlXfl)03T@vLo zS@xim%Rr?pu(D}^rtxCmIxO9nNgZnJF|^C*%j>+!vUn0}3zL{yuPlzK_Fc=9^H-uu zgar^L+RY^H7t*0Ubm4sgAb=<9mlcYiBe(x!R+}BN1tQ9^l$I@Q=c!jESC`@ znOga0J7MZdGS~j|o-lPJ=Pv!To-i#*-njTrxeb1YuwIy+w@C8(Pi4UTqb5vk$s1FD zTpRpJOqg2I^IHE@=>JDen3|F|HvSpYzdk*$;m?EqFEL>XY-e?U#`LdF&#U<#rvLx! zgeji9vGUK4{)Gusd3s*O|1kakXD3Xt?}*(bw67O(>K*7Zz@Tz2q$k^m|Rhl zT+x>N>T1GKeXG4(a?YaUUA=rJzxts5-nBu0SFB7v`T#HK&iZ6$6dsQyJ6Q=%&uK`` ziDBxFC+93l-nCXqAL_Sk8}0pJ-9Ue$_QpmDoXIJvB`;_XTPg{=1?EMM;f<}!u zf^>}~b|wz+6&~J7ktJ9LDhaK?x)C29OtOMbXq1q0LTX5-g9x=26BCLipKq!oB1S|- zcE{wzL98N`1lT5|#rKt0W?veB*EyPmCq+~(DKCr9>pEnzBE=jBM=K*H9M;nI^NspRx%S7VFDJmTty%u%i7H?U3>9K^6sW}gXycQjis6DThMBwcmAfh56Se4$g zxYtsd?1XVDvV+sITc?3+3-R$}XA4L*k*GSkqBXm9G7+_Guw(U|u(D)l8-z+ex?0qs zP81NP6Bz7h@*%NycIV{mKoLOd$q=LQ9u=Qvx0eE`4mjn>hs3_wol4V4n%d#*EKo0{ z8YlRwNrFk~PB^K_>!|jY%O^=))riH_6IWZMxEimc)>~djT*Js-i))+$_>sL+D3{%e zs{XQiXw+c4g_^vU22gD*Jz$M+%+aus_!_UJNmQyj>5Txlu`1_nrxc|w^Om=I9dwft z!@9G93agc)Nk-5e!vo?*AjFb4)w3#iAUjx`9Vk|df>njf?}- zzLR|Pevx2cYBpO2nELG2Qh+x=ghmRe&JLC)?@|vWdpu~4I@K)sRrStnHf&X{C8zqt>vz0s+bD@C3sx(;?*uB|K(bzwlwMpBRt0AyM0Emv0&6bC8?nZ zQQ{p--lXOXXS36iE2_mmtb#r{jTbnZh-h-fBKKX-HkRyZMw6U-X#`$H@*zntP;wpo zE|Z2|m1OixiX=_aWp`4-BoJ0j8nOc=;9Qs89)`S4sw164oK!;J-C`T`1AxZ;@T!l+u%JY9LU=O)Ee&*;i6cItVK>fEI~uv>!v^h zW5xO@BA_7lOYEpFo=R)-9#Pwpx5RtU+Fo5{PBhsWV}S5>ASNKd@RP~T#$oM6P}i%> z?wpdG(*%7*4~CrO+3lxM%UY7gvrmSToidSEl9G|CE4zIvaTVDo%d$JnyCxK3w+kgk zlaFq2c$T?=iCkqm2Q&tdfzZ%r!)<_z28nq^aP7o4wRZ)2j#X z7c4~g6ly@(<=#4jjt$g%M14RdS|2U(9@a1@+^ddbU9PA)kT~r1OJ0yK=B<;U@Q#<7 zNTbh&OZSng%lrNaxQz0U|3gB0M#~po-Tl8u+Dk^-%SPIxBki$~_QsL+rjho=BkfB@?ls`| z8t{7!_`L$Y<_V#t3wPE9<)Cl4J?grjOXFKS>lfqmr$)QMBX|A_hgGsq7u)f09jdIE z&Tb()*F&^ULg*$~aw)Ddl%qMrURLpuO|v+N)Lo2iv!J@W{rBsy^%FPpU=PS z)8(aGyraW@>EN25C;8_c#qEbaBK*@wSRbPkMknZ_r1Yq_cg?d8@z3Rllxv>R=N|%N zklpfi7nL4*!}s`?sq2H56G{ixJbQ?LTnY7bSRa%)s*jS=0dH3(c1GzgmptZ@?|Or! z-jaPLOpGPwovL1gzbf{={yYj9z8;PzZlnT<89mt&4v*oT{Y#uN5t04B*I5l(0jgJ@ zPm9c;i{4U7b5+|tD~e*fm)cnEVC`E@pfr$L+P3f4B<0A*uheiFSolhCj-`89?kGXr z6%|j%;ynW;{mn0MIaL1@M=2;A*|4od&;Isf#PVe)o%`F5yD#-V;(p_nSDH__<(B4? zdY1P$kM_`UO5AKBH7F!J{;cx0SOArT&^9i(_1)5fU!-U1RcI#Jd%;b@&&&8fR^_{dZ+=5WkZ7 z89gC>xOA9lQSBtJEFQUYt(vt#W0>ZgHQv$wiQGE7!Pm^GHqT5-Md5Ol6^zyQFW0bctk}O)6u9GrQ5!rNsw)fq@>6&u2 za8xn`n(Qv!%CksKzEvxbH)vMR>IQEdu^E?ilD8XDkc#9Jvs+HH91ulgxvt|XOZZhs zQ6&?;_k3g%9(8+*K6&d$uMQ0rg9WlnyQ{iO5pPIsIr$2g?olb%Pbod%?T&1kH(5Nr zhn;**(=SOJuR4<5QIyz5+Oo|0(*=y{)9Sq}T1be6<#&~_i=-^hc4ZEF+5w(iTE{W2 zk1$Hv%e3szN=hYi8&w`SHe@zT7aZ?!;#gHSJ5-c7hDhF>-FjMRJJpCgRUJ!Y*|2#aJ8)WP2Q-R$CjkI~ zBAc!(9|!x~aj;*Vhy5yp4NfgUZ_TW&H@Jrq3>sAjv)hXjdo$q~LRlydo)%&#nOVUA zg17lFNH)Gk{4zu&$iFWC@>*>{9Rk%Te3pU}S~Kgd$+-#dP}NZ4P-vHT97e(OAsP$2 zCV{;TbZ1tMgIqNZ@_Bj4uQ$j*tpsW+vv#7PyC-p=>ZBO#Kqj0(FdMQ^gE4Vtd>qI( zj05?Xd60jR2PyY2m6^4t8ORff-JVZ7Myq^LVOMAfEg0_N4nRuRSyC!r?QP}7*sO87 zVEc}{&dUlBniA?y7^qeT9@OFm;3!pW4(*@`=utVdU z1az0iiB0p~oPW8%L_GPb0b0YhXahRJmhGczsH&rhA?Ul$=nEuB9D~}TZ)2@DDA;1P z#)M!Wb*z@mzg#GG5E$t&wVB=-277N}#4*E2Xb>XBvX8+C00K(gIP$(_9Cr)o!HPiO!o1Av;U)zSaqg&jp6TFyJ_-Pg0~7&FAY+K`R_d29aV z5_e{Az|&jZ9GYzZN%)ZvcUth!t%x8e8?54(wznGMyJ z;Sj9YRyCA;vM6yhId5frVM4Z? zdNk(7kY-K`Lwn&x!y%r~bVL)1w&ATD39|B#w%+c<_NuKCU)w{^b07i?pC?fRFl2M8_q)D#yn|}HdQ(GiEM}sIYw8g z)I_aX`PK5PA6CC^%JfD*xBrJXV2VGUki4e152>N07_=nmzWk#68ipT(HCi&glPvj2 z;$UKDXpmhcq&2T&TM4{Q<;!;pwSylj2LnVuBnz;#)-CsWG&K_S&c-N z!ct_4Tc##&Z(`6gAwH%llZco&=^eC+w<*U-n#>BWq!byj>iD$`XEVJeRtnQK?^t3O z-pZn_f@YQ~#i>dSzj|oHqt$8^XRNaAlAYzfq~cq8MZ*{kZdzi7_6LMi!fUnuMTNzbz9=NWr;FeT9)BN7A6=f3TgTmBV8T8 zR+pv5x*iM)YsWGh-e?)NMRy}sh+ZS@~Ktb<~o-26cxc`+*{yV@otn~!|))gTT5nhy(MQTbycO0D0!i8kTk}x(UP}jHowi1Ge#zM zh>$1EQ`thYsDp%@*|N|(VDin@m7v5zx_ydqkaNR{EaXv@g;XWbtNGQ1a{O)aPIx23 zTdM|XNWQstNKt2)jUdRu5feTohn z+C$%qxlZ21Yuwx79U9(3k(tfs7z*?=Z(Hd;Ra*iKqE{V+lx-l~QmQ^oFjP>RazKp= zREz49tyH=gNu%B{_X;1Tx>dPSu}y1euMHDCn8s7L7!;_}kONjmgc@LMoNDDGFv-&9 zZ7n?!I)bfqYt;!41_$|a@U1W1;gC;-j__HF#2Jv_fNmVtH6mKwv(!CTbn;z=6wS_goJgiQZYW{8hvHcv7Hh;VXI)ojBazPEIkPDx!P&D$V~h%1WMs}=ag z`Nf8}WHz5=0G_92^`%?E{rM^eT~A|JwGm>WI*4f4K#nF2S347XG^%+=XhaiHRHT7Z ze+J03%p>Gp=pC*)Kz*{MHoS!_OzZ@kfd06#F0-*jS&bwbW3up$GzqYmO52tv#Ua#e zY=|^stFaMNN#5&?iRsghi6vD$hW^s$Lr1C2?yBcK1R3bJfPSiUr&3TZ0Xq z^l{@Pu}bMaPBZeXI$X8Su>$C7T#AV$cs8o5!4@F1Fc?V03e!{xjhkYgBi=yiNp`{x zROPBpmhK2iVxz&kF<1ka7^8^>+<2PReJQO*q?p$8ONT6JTh%esg-@k|7^0HQ8q35D zEjEBv<~hMeN6bg12dgC2;DLjsJFP-$@tQ)twf>@>*lP8U=X=sNv@louobK6%{0+33 zDz0`@#Z_&|BJ8%%B4wjCf+Vxi(SJ7*vzj&#aS-y`;i-e3(~!8CTf$6c-e{&~8n7D; z24~;Z%(SE0S1MgiX7k0yO?yfQxCVTWsxbf+wVr^2rS4b@3#v;>$% zp6myJ6mcggGhsIGyg2(!wy51?B&XOO2nA4Z~)ft4}JlB(~EI)erE#Kf#f9v3>}I@UzXpibo{hTOo71W|Q0O^{h!gIXQG z7F)Hd#Epk#LCtimK=)O0v6l9!y9FKwPfO0Q`4&rlG6AcJ)kPgA^-a%o=ro8Sj2W1X zI^Gd=G)IAVOq(x^kx)jWS%V{g>5>M2Tb|X%QAdJLl#wuGftfx>4|WuKKCwNa`AD8X zQpRoIBdL^|YWnKh83q|;J|Pi-{&SELWh9}Y>OdhDQkQH^4AW8MCNY}WVj|Abhk*J- zj%4N3G2g#LrId{fxOJdQpdf6lReE|xG(nx!xv)cou*HXD8f%L$AxlY!1r^E)hcH`_ zw8CRy5i65-p?A6b*+oge2#f6UkT<7{h(+EUTrB?UbF3;n(P4ID^DLG5j?CNGputM4>rPRtZ)>cw*PfaG~;}Y-AA$?teQO#?QW&PLC@0-ih&5N{5An%1e zCoaoeQE|)EOxtN(?{`_`4y{Fer;$HM4PA;geK0g6*K7^bPo(^dXPMt0Zfy^|7uz|x}8ET6-w!YC^o@og=A9VT-fOLHaUqarY1(3Qa z`}2v@Px$W)aH9PEpSAmBLRo`7*Y5&$i1LW}hx~dA^jAB{L3kJ&_=MaP@~eRH_Xm9s zPgLyxI9K$R2Z%TfSDC(IQRapUE~FS}npUy8=V*Q8&f9_T=*2*pzAfbI4%eQkgvgQB zEZNtaapzv=G|WUY&MsEQb6ma!Aw5g_7ZjzN!-|}w$OXI#>VngP*ok;i zR_qju<<(+KgV@RGX5l+KVzInh?9?E3TDloKL;vhEEmkH6K|bBvV$S=l@H6lrb?W(z zOiOrB95G?ADf)t*JwJY7`cP;~&oeKGU?0^@db}qd8?@%YA9#4iuA7eJbg{jf<=0z^ z@Z=xq{a<`1p1j6ujh@VXp7(rvK6;s8J{J!8)3?o&m$02BIK$dk;9CFuocdMt(R$M1 zU${+h$Mr99QVBOftl-rA;N^~!9rG?W<{c~woj2>+!OO$mm$n~#I5c>9$;lr*df(vX zWjD877#+Mkdg#YbJw9eV*Zv`IkRE&2R&h|(IW-g3JZEd0xUx#y4UIuEHOt5qg^IyQGLSGIa#**n`%Z+9hztC)MjxjV!zn5p-` z<#>kAZke2rIV?1cq})L{VK8B7HL~fJiC&g>^JDOAiJAQ{HctvP#W40cTzw&#mYWK+ zIq|Wki*NL@HqQuWpPZ82F_9%?MzcwJAn#>WTsX3)>Jamk-Bl+OhrB%@Dcdbo(*77@ ztM)LPYDqA-Vc2AeeAosE3~Sr*Ka-to`)Oq0SQy%2hD7bksSdFqaRvS;noH#<0c$5X zH&3y@lZgj!tkhI%C6=n4zj^FyfZjF*&^#vMnF9;zBt6W!lVa^$R1HH$21>&&T6LHe z?G~>rE|(+NPWCd4W_M1-5^HD+v16efnTDw0BxzJ_dU^`%W8hW>KIX(Bz%639O+yRX zF~uP#jcCV2ru<*{_pjwV=PntV?SWolBcJL40r!sVtwPNP!Lq7@37cJphN|{3>CvhI zo}7eXvX1=*Q$4T)Pa$at!gVd7!y(2G50)?#Ap_V&!Hz|a0_Dy$?9L!b*pQ=ru#HZ9 z&zANXV5WsF47o!S;lZPrUg1JsMt0dutE>v8CtViD9u})3B9O7HIWVs;~Co# z>3B|!Cv86(%7)-?N3vF6J$VPd|JWOYOaJt=?z1Pw|H6 z9^13qC*lOn7Hzgp;%%#@LJ%)DvKs_2?%UKdTy=sas>5hN&wDCXuE@%(n0`-H`-5SH z>lLz9l^BMhZK181x+2+iw8hNW4Lq?_H=jEW$5$JUuQD8In;7V6TLC792R?e)$JJ}6 zFl4Cns^{8*R&)eo1w_Msor7jlMZ|X{Rl`+GJf_l`n%u{X2?#dwsmm(Osl+P_h*tse z#A&Y?huG^3vDXH~o3#6{D!v3?xC^7$uLALoW4PEkk;7P0y-Ko!lXx8rs262B7gKIH zPIDjQIHTT(Q7;VjD)Q7j4uUa9z2j+CrA(w)^M(d9WksGAj@m21u8LytW>RS0^9;k+ z=Sdd@Ic>#(boV_p=?CI8kuJ}00lQTldqsvbs(}m*t44)rFJ`!~Xa>E+`?hip)jk-2I_&9%a6!+q90 z%Q7`3AX9B5L(tBxVZrT9V<^phvrw9O0o~-uiH4VnSd0UY-&Qss{O$)oHX~^Ty@H-( z9U#oS>!8FLf+;3pmgj%t#Ap>0V==#L#_@d5K!uf#RR)bd)t;7k+H0XvVho|?q|xZY zJdG;A!EGEW>U!_DZ-PSXKi%fB{;Li-WGH#rfTv>Wdl*m-@l{$nY_@llsKroYKJ!z$k-^|I-3|_uzhkWQ($IXsNg17 z%Ee*XOkKp(4r&1c^$hh|_dL>-l+viZ&^9>E^CpiQ^v1&@!!S=} zl}Q3)l`?!$oFGBrCG!Og(7 z#0i=j7OKzgL)d~-xMy$*&7EGkxvO~P+AcFnm03MYif6TWZNNT(7*_R!Ga76bg$Gj> zdCL_s@)Uh9UM2fWrG-{l?pW0chH*6p%kWqzho-WeGwAv7euLVRS2d&4C}l6%3rlKJ zQ<5%=XJ#@-6+<#EtcQQIk4*#2E;Z-Sq{KjG=INrG_!r&<>VO(>aB6lSg0d{VqPAzS zY+S7php^%_SlvqUZMe3Jbn)VrR%^r1HufApIVCZqt;dt}V4d92p?qYRttAdowO*xK zk7tE&;N9Au_G9F)cO=q8Culp`)CP}TB#x!)v|S^fX+ACAA+ex3K`@Dp_-wyvK7-Dc zIHu?}YDUGUx{6QEJ{B>VRhKvt)Vml?MyoKv9I#}#_+2U3D9&_@%5i~^#3y!Xv{fms ziQ}{#?G&|ks?@qUUDEMrS=9(@2--i7LSgHx4cPB6JHR!v>Z2m+OKrA`9VLtsnOF!b zDWihAU|N24GMAs(Gcb{!W7VVcV0W~7u%lrbD)0_TjvbQ{w(d5S;eP~KypIC|5!;Z^ zWZkTS{GLQaEi0|tr=+_!b`^Iap%9Ix-_+9C_9<$j*Gg0i3kk*a1uaiAuVN{c7dR3{ z+~!v$RkB0JZRT1Y%&vBOd#i@w%?4>8YBr7e8d^0qL)IBhD?y=-{)WVoK1mVAn3KFg zF&145V%6dR53jW1O4oifamxmQ!$A`{0kgdzU>Ke@b^*6Bfta(mI$N!b8&g(#2%O>t z3yT^50a6ZI@0g;+6=@B&O$f%MUFl%nA=CI`%&&*oWKv>crL1Z}sVV$IjWayrJU!&c`b!)pg^=QIUJRXQk z5l+n{G0C$gp|ymP;7hGU^AH{`zG9KpgjR|%G}yq)+_Q%Ut;7t_#Uy~?k_aPv1+#UD z!pbToj3y2nFP77P%c@x7$8wG&(as)Z2oI#0SW^7LBrr78GuoJmCFo_+3gVHzV_ch! zX|)AdOQC5C>7pTQ+dRv7wt4l0>Z{ya9_F=;z{Lj4o$o2}ma8om6THx4m!pg>Ajjt- zZ+VnYLbU~c5up`?F2RP|5%Ms|tYoj`ayhE+pr+N0Jx50)eIGtBI=bcw*?!!{^kBdD zczaWiGc+v=3{5}y>}gpHO_O%7yvPhq=lsXAS`1Ayu9`N2p(!!tvC+ZHW2c|Buw(G@ z@_)ML*pk7^D;~J=__qfyUs^#a7@=e@dj4!b91OB<&pMDSUE63oQJ$eJz0doIC_+{+Tm8aOFZ|Fv0s z7o&5?;`@Fqd$TLe-unUBgRiyNB|+@p*o<11=xfY=yDjVtH=A9% zJ+N!H2X^iD$!Rns_Q0;)9@w?pr=@4huH9^Q?e@T~-Hu(`tng=~XU7zKj%tY! z$!O4iRuFr3dN#&Yi?S!?{d0q;SM@i)ntMK!_jQ(lSJAKiH9>;co_gucM!VnRciGFY z#eV%#_VO!b*M?2<_VUa4&fCkAysr!7&;Qpbocp>ee)9w!6q>+!8NRr6T=yG)me*IR zZO`pXCq?d9u2iqcS)`j1xg%xiUWvy@7m3_aZRuW#+emk2HF zydnpZ?$wby9=3GwAYAv->`1!TMegh*U5*>1^Y@Yb*80gk2U$?q=N%1J{rvNPe#-jE z_c@|)%K8b59iQQ<&oz(Nojjj~n3X!1z!?Rzv-R|jolm%UxrCXnI`5~Yg2w_sH8(h% za4o`)!wJh4_+Q?qi&$5ChY-Gx+xZ8B|NRrc4S&fP{JpIEyafD1sQ~_@0{nN4htK`D zUlR5=8}w*i{`x{$6yj)-FQ4sPgJsX)j zX$9*ylOqz}H`}+8E zd=RF4bu+#3M;IUYs&-%X?(6%O{-;Xc%kCRXSkHqmXDT!~1|_VHn_aawI;=Ois<~QY zj_Qp+CZL<+LwX$L>P}VI+YtYrzByX5!Rqa8j6Y2PY^8dVe3!m9Tm3=$2_@bT|Gpka z#m_OKWrij^LxDfuEJJ6zy?y{5h9KbfT<7%BabXTL>WjS1#U=V@^e8E0g7< zbU;c68Jr9TCLq!XDynIiG)C7hc7m~bPVvjrwx?d4u$nSSD=hiC&wYt|*ahMmf~u_} znAlw|)~>T-oyD~s;7WK^Bk@}6`TPG8c?c#$N)0KM*QGHqXxAS1RA3I!e zBikZFkn?`!Q>vX5`G7vits5Sx3YS@e`P?{FQZiiwwARvi3mS=UES^8XyHe+@o6dY! zm>JWS;s9PaerAwx0OJKI4I1ep8}^)m^YRUYXK+|*T4ck%X&j%)V)~?lDv+(Fkq362 z6M5kHIc$>|q%j^;!EE#3RmMUqcD;qFTq#HtWicD#t4VNP4f9ndtu~EXj?G}LGqo?} zfG{RYGitOjYieYh>K1HQ8{!X>3vc`D<5J(fBh*15K-D+;RFu@R)|Ft%U?<7x+u;_i zsFaIym4uzYV5bIPaZxj}%H#%E0`~ygj8C{D^Vt+)VWaVT;^x=US*c0W{)F|!h!m%=7B|^9B4XEE-Th@Qp>M{bpg0joKDnoW_5s71`>sNRYat(LF3ux zcuE~_V|WfwUO2ozm6{(arItE>$I|R=d14gf4Nft-P*vuW?>` zUE1ZOJ*ro=r&?=ed?m3jxY#^dBv1n)?0=v7u_m-yzD8z|OWX5ZTNBQAE8jX`qV+jl z{}9V}8_Z84C$WT9K&^E`e7%j!gc=6vK4Xzjhz;Pcy>QruJtcHSU1VKLzB)K91gCL5 zWr5RbDNW(%;Vekm+DRqsUk`u8A#4Mkevh{^^1zPb$OC(e$;=_h?3sjO6fOX%1V|hp z6SMnR+%h0K?3ThDk^)GZI`Wy?IJ&EN7S}DDi3inTWC@$Js2>pxW|a$jvs~|(FWFS) zae3~1;n3*4OP)iT@*TaqQH|*uPVHBmIP+GHNt3dYYBN2O{Mm#2$;+T^c^Q-^_9;S0 zHBD%@fn1d=wB^eZMATe>Kavt>6wNY zCa0=naDzUOY*-;Um!hjiw27m#ScVGlJdy=8fX}udp%({uiv)u0HKoEt!ZHOgpRE-f_f#6eR!Yugca%r8>GEA1foDf3T zki_x?(%NJYB038~9aM+gz=7382}^+-1)CVvSOy7esR}kf$P`qk4K{aGB2^8s@t$8u z21zQEkjSXTUC$)4uGku1`PL1lc!=0Q7az&$tzov2u;ql+5w?=|rbyq07cd!YG^Gd9 zNoPBq;a?=$>;hSjK?6{Ldw4TIJ4~WqxkP$+H)^rIoP_1RS=uV~|IY`!8!Iz8oZmj?}b>HI6roWxJ!L+xK(*(Vt)7Lvi zaJ}hR9=9#rTIpREr+U&4y;L<6XbG)%x>JkXNwl86*6E2Zkd)Gn5Id$>IPhLdJ-wQI zPgAtlqQ$5h^8HkJxF^PfC)|BhmNW!_@B}%Lp)y@J_EK zeKqMVp@jQw_37&y=-p!Z)xu+~(_90tqXK}02ZMU}BvIuQ7}U{ql}y@nd^g~U5Om2X z7>Tn0{e&L7X}za;p@CI%x`4m|M?HkJkLh8Wr!@>xf|P0;le$i~Ey=JZFYpq{^l&~a z_30)AsHe_<#Y^d@242~ITR#RK%}lYzx}801elc3 zO0XItC8DMThWH+@fihZ+GOAV&l+ki2qg6VGR&C0tqD&cmSh=CKHWAT$8}%uI|1rv_ z!P1~3nmq!fVyB>j>$ zg(7A2i2F!_PI`z(Fgh+LLpAKYT0!ih+4%jMaA0?uhT1-5?bv-rE}J}Q0bftU1$ZNi}V`k!%qDLqh7!g z*XDAl0xd2_4WX?rw2@G$$&}edXqOAEB(%eYYBIf4uWCZ|AUCLx;Aw?!aEihPHxp&~ zB=b$1<1eKjrbpRQK@nJn=5e@j1YdXawGX!@xkme)`9@jLa?7Sy&@m|{6y zcI7K*rfO@FNHbOI+sW+cf3IfxVmpGR*`)qK)Q zSM!8mq)?J47O;f}<@vU)hW;MOLktow%=4wlL6Dg$Icr$B>t0qng zgg2MH0njb5gUzh><~FQ(;yJ|5Z|Q^N;=sT^zN_ur!N%~=#h0!fY%JOH{U3RQjb+z- z^2Z+@Y>a;N)1wy-Hpc$t>&IU+*jT>vAKtuhu(2Yx`!m-LHda3PuJ3=t(o(K;%)_nLwKe=VFv3BU9*K`gx);-wwnac(n>p%DLJs%rvZ20oCXPiFR*a(gj z1{<5)qs2X1?Xh~79{d|zEj_1#pDo)wo?lNfd}~I||3B=#4SbwsmG|Fi$97Vtok4~Y zG)QVkOd&#s21p^mfK3}AEdw+OZz3XKj773Af#8;xnnW^AhliDlZ|JVV3aj{zT@cYu zAxW)Lib`=^U0Gk?N<(Q{gcgM6`Tovz&m^tj>OQ#t|L6aI_>j(h-`Cr@&N!vo@P4s&a24?W@*V#=`>%nw`qkmJ zrRH?_-Jg5lN5HEUXW%`2{%0-*UR!ofC(a9<3xXRUCNnfH4wSVXZ+lKBV4MunzKZm6(? z14Jigm>6}%ZaV1=EWlnt()^b~V|IY(9tMRD5WO76>o1 zySqBpcg}Qx_~a{M`cP^>DyVJ4$xUwykfUC~qS0i~~G?tn7FQ_t!5jwM_)Od83L6B-J#qL;|?{$!u`VBM6%H(UQvgHI<*MK{fbfvu)w+D>z>>G*mnQSA z)q-$d03k0{;oM0ODok(*Bp{R*sq_kjZ}YDMOAZ@oe|x^QCcm`SLwJNiSQAt@KY;M? z0EPg<+Tb;S@EyUcL3q@_k|Xm=>+`L3f^b0qAuk4DDyZ=2y(_HWyTW58S9sjOl4J8r z8}qFVs_=xMLSC%Gg+YbK?_FWz-W8rWxx$kNmYl@uqKSUfS*7*#LeIYE+t}2zn_Xn7 zb+)Z%1`N&aVXo(!?!n@sIl$xEzp0`+p3_a*SX9D4zro+`GmR8aIj2wSsmJZliQ2J43>@3dqug1>28hsCftMg6T3bDi%r`vlk);g0%WnC<^nP9R$H=&b599J|_w|p-xLN#5 z88;LACEUHb)t|j;qqFwfF=6)5N-J`J6_GtuqqFOMj7u2=sh`B|+&V4amCpApVx#zz z(?VnWzqIg)Snp%XAV1bA>HI3QpNPqH<|3|2J+Jqb8)7$|f;8=Yg)_vqA%e};%rUA9 z*K^Y`8!Piu=D(ObHA4d&QLTA7x9G^15xdFxn?fU!%m1vFb9bxOy~X+uZsgPa;f1eU zd7YOkujoX4ZN|NQI{Oc`EVh#!hxNndd4W6LA22qMzD8mC)_*B+6ZWdN9MA6RITGr< zOPWKy?JZMAs>o>jHWv=XJ{sd?^hv+FMvV_?PhxGGyGJL!X}b5}c<4_-_W6a;8p>OT z!NaaW%qdK}DFdfwVtuoNl-R#6s@ZcH$k;RTM>ZfK4|5I^wdiIDQ?|6{-t?>SalSrz z!~8)mFsP@|+~CODOK?K}0i*vf%(yM>m(j2L-L8NKChu2VjysMy(#QeM+S7iX%dLhm zHQ?+A%7Pr2_u4GA(EGcIEj{(`E^X=2RF^G7`e}F9(Tv?^n*G)&TZTF`pKW*742`nJ zFvhdrI8@qiOM9=}B#77i+pD&B=R|vb-x2)UqO@0gvr6rSC$~3apY{T-zb_303Q!T; zC!oIP)3xRMp4;H)D2y8E|6%ro!r$#qt?PYiSGMB9@_h2tS}t&XS8ixwF?VHcwr7A0=vPIS*7nqR z8>em9VI{igs0s&8Gu##3H8pnUV|GzAN3*y{wSqI+b%Yt<7DEzQ&GmOg@2q%{*O_=U zIP8_-E?vcw7fp>TBxmz<-Lt6gGdNOZ4;4A~p_8m@sHs{F>HL=}wqo|QU%3fB zN7YQvtO~Am?V4S>Uo#T#ZMMM4Lmwi7xCDz0s&o$NJ(X~yl z{V#mq#sQzJ`Bt6l)`2P|g@>DJz{-^2CjH9~lMOEDexdu)tGaU6)#q^qcWad|ylU5_ zmtS$!su$jS<)t6WT^Ggs-K~R3t9D&}#U*^;aNMdL7hiH|cGa%;UU|hOxuwZfFI@Wm zYggp1OXRw%a$8otaMh*RYkPOcbKTY56{~jks#Gf*j3b^@x+i*{^)T1cFNXc?77a07 z8*n3#;ViVDz#E+57T!oMtW7}rEOO*C3Ej*qhimy`RX$UdPgn9$8(F- zkWhW*&r1DdzIP>YvFAd&a{S2%2LXH{_a^>C3o4=k>Bp1KedHXf57H~Ppbgfh8_FMe zIe|=^=&dY&<9ba|vL(5K)W(YSL0Mi-)M33z?ei)j;3zt!Z3}dYgao(zPXNvt3xl?qteVh$}EV=eRyuwe+7VY1FbU=;DJ>Hse&%Dfze=h*w zrBCsZkrry^ntWfN#5-*KDP$T_>$n4d`apDQ@4CuP2UbEb$!Bxk#>>B%>-f3){^9~&JH{e1jM)4Q;#Nt;E4Ql(+zy$Dzuud{Z67v|D7t zv71MM%Y>E5F%BU~&qH_-N-hM^t*R^*7ENMsHi<2VKfIh0_cfALj+(IK(SO0;k~$^+ zUSxQN@A)QI)MN(7z(7(}nWUN!WL#TN5}mdC3aXkwQ0a(h0zuUg>wkwAR7Pm^3Ph+^ zCaDzqB$C?P%PLM>@PpeZU5ANdeXpR#Zrm|WH>=21nQyA!ODF^wtC^5j0p7HPEWAa_ zP%hsWZ($2hA*-bt680OJ$;vd+bYiV{D zMYfPFxA(C_e%o2mt=JPYvBEy0Ph$4MR*q#lkh9Ixf#Era%o#TXGQNQHxrEUUdhR9 z9UQGH5nwD|pY%sbNe_^IN`xC1UNWp#=ny7BJod|N9%y5#76JDIixn|_Yo*+o%VrL= z#Re7=I(_AYd$Me=+_>Y}67!Gj!6RZ>M&@ve!%tXjYA|WOav!>3eA2tg+wXl?^7iZ> z+mz2JgbL^%&v#X3-;-L`|3bC`I@I(YAG-$m>3w)5|0uJ|Hh216_~Z~agYLbT*_5s| z)9$vsfL7otS#-hhlsL>l(TNU}%9Eq!Rg%m7V|w=%gYG*&5_IN}aHnt5L@thi9Lmnc zPG&|mTVW56&A7~cmSkWhKI5Ms4xeA1e^K8if]=+bh1)$Wgv0RPZAHp$)2^LgjC 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
    7U6W&je{G!aI;WsF}pMoNW*OD*&R6Lx= z-~CDiR{k8$Z= z6YAQoqo`$&87&)1$qJ~#egTRo`L!sy*l(&~O+bJ+)`->lO}$Mu0D$gnRr(DTR7Y<7 z?t&}%GA%zhR#?lMK{`J_H(p4vJkXRd6-14rnD4o^kKm8>HrjlRqfPe45&9Fk$xZeC zibsIE4aGhVx%y{U`UiTwUeDV6QN8LDx4(@Mp1i3qB>DP6`Vo7M%ADWJHC1>mn{rK~ zyp|2#&Y|0rqy454?#?0TNr~)+gH61omh$u%MDU%|(c3gagXOlAm%2T9_ho`(4&9!5 zD)*faqvbaE^;?+ZOB$Fy<@crt*i-oH`!hfRXHod&?oZuh8% z*L?_T)TjU8ZE`+U-rDA!y)hUyn{Q`tjFjdU&!=yrXMlP7S7L)bMf$cK7ir*rQ|-P@qqw&SxXG!>9w%7P zrGMtuWw`%MXfJ|6ITng>;s#{5uW9ru%ICw=$Yb${{Ep>X^Q*o;0o%^5!Sjarv76sPGJOykK{27l*(o5FK>e^} z*$3-;#>Pq?C|zIdFQ!opqgcarE4E!TpdSczQ+ugNwnGVTcCtR;IN8VO;va8egB|{&krtE9i zv@`X5EAvF^_58{tU-K*H=ywhmDFtJOa)8xDRTT1QvxS!$q#*t!{_SeFZ(UK|-Jn$3*|iiNeje;(f-mf2jY5GI)h8 zG%UN`3jO-GDfU0H!u;EYnTNQ4+y3UE+`sJr^HAa6cCdM<^lv-NJXHC&iRVzS{M(Gn z;Itb5Hr;~dO-uN<9cLa!I1k?>SL#__>nJrmn&+GemguceKs*1oF(w}k%ZI|7M#GKf zfrgvS0}V^4d(¨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 -C=HpM*}1CC$B*rDfiF}nwB@#l2Lu>9@hMwS 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 *m6 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Θ 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%0Dc;wu!N_F=OpL7x$vw=;c(%sKszmw1%mfW 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�j~qgdBIl5+$Q>k#nx2}8nw^?JEl4d+ zO{UhM)}c0}Hl{YEwxYJ7wx@QZ4yBHyj-`&H&Y{kyE~GA}ZlG?W?xgOe9;ALpJwd%f zy-B@8y-STj;ZOvW2ucZMfHFauqbyN2C|i^>${Q7c3PmNOQcyXlTvQFJ3Dtq>M)jil zP=lyZ)Ff&VwS?M4A<t!r(E27$Qa-L&hjz^f1O4Q;a#r24jbD#CT!+ zFd>*YOd=)~lZ`3Flw!&;U6^;6Da;~f8MBVr#Oz{lGz1!c8W|cD8Vwp_8e1A?8W$Q5 z8ef_qnlPG3nrNChnq-=EnoOE3np~PvnlhRinr51Inm(F$G&3}FG)puqG^;d}v`nQoHdd)mNk_% zjWv@so3)0uiM5@zleL$1n01pC#fD+Svf{xa|b`f?tb{%#H zb{F;#_AvGo_6+uH_FVQN_A2%U_Ez?8_8#^j_DS{y_Eq+E_C0nK2aW^Jp}?WUp~j)d zVa#F5VZ-6U;l~le5zZ0G5yz3rkdgCCDYoMdniA(&94ZvgGpQ^5P2P3g?RFO5{rCD&{KVD(9-?YT)YT>f;*X8s?hf zTIJf|+T%iU3vv^=$=ovBO5AGPI^2fb=G->icHC~O>0G?=`WS$hBES^H1BAyzaI-YKx zNuE`nZ5|As8_$my#4F%c@LG5syb0b4?|^r~d*c1@LHICyI6fYqh|j=h;dAjt_+oq& zz7F4sAI6X3C-Lj}Z9IY(#Y@YJ<7MY1@{044c{O;Ac};oEdA)i4coTV3c{6zPdCPg5 zc-wh9dAoRfc*l6Bc$axMd3Sjc1bPCNz)esg7!yngmIMz%5Fv~ZM@S=N60!(6gd#!( zp@z^z7$i&*<_L>~Rl**DiI1BP&nLnM|Kwke&ydfQ&yvrP&xOy8&yz2NFPtxtFQ2cB zuad8UuY<3XZ;Ee@Z;5Z2Z-;M>kDedLufVUvZ_IDbZ^v)X@5mp(AI=}gpTVEWpU+>x zU&UX;-_GB~Kg>VIKf}Mkzrw%Hzr#-{fDyn7a0~DY5Cy~qWCT0tA8t zA_d|E;sw$Kas+Y(3I*x}ngvD$CIw~$mIO8hCD>N+hPH0SMLTFuRQ)ovBK|~R8L{6dz zQHH2N)FYY@%|Y+}(Zm#DIx&-&L(C{Zs8u`A>lFMW#M&Ub`eey z1ra3?QxPi>8xcnlFA;B%0Fe-pNRbSYY>^z1Vv!1wDv<_}c9Bkzevv7WWf4kIlqkI@ zPLx}eAj&T)BdQ^)C2A~cDQYk3AnGjYAsQqaEt)BsE7~O5EZQzQB>GNtRCGdgNpw?` zl7u8Nk@!i1BrTF5$${iX@+A3^f=IEXcv31Uo0Lx~CY6y|Ngbpi(lBX?v_M)St&$L8 zI5E5!QH(5RE@mUSCFU&_AQmf@D3&aiDV8JFAl4+-Db_1CCN?FuD7GTDBZd7B1jRX zB&Fn}l%!Oow4`jM?4^9ALZu?5;-u20GNp2)3Z;sqDy8bA+NCWC+ij1C&fsBcagN(C`hm5yOfJ~%JnoO2Vu1u*+rA&uRm&}mN zsLYbgrp%rUMwV5UT^27(l2wqklXZ}Fk@b@Gl?{>&kqwhgkQJ%UP<0S-bUV5-bLP1-djFeK3P6ZK2ttNzDT}8zDd4Y zeo%f=enoyy9;3jnfLD-IkW)}o&{42da8vMA@KXp;2vZ1Gh*n5ZNL9#E$X3W#s8eWG zXjSM?7*ZHhm{V9*Kq{gXnG^*TWfT<@l@!$!O%=@*trYDPofW+ly%m!cQx(ewMn%pwRN>UHH137I+HrPIzgSJuAr``Zmw>nZm;g9?xpUh9;cqD zo~d4}UZdWs-lg8JKBhjQzM{UVPN_k!!KuNmLD1mWkkpXVP}0!S(9`hM2+#=92-OJF zh|@^Z$kfQuDATCWsL^QBXxHf0=+ju$Kx$$%v6@Vpcuhe~k|tSGPE$wIR?|h(O*2F@ zS~FfVU$a58S+iBML$gz}TXR@*RC7{uPIFmvPm@-QUQ0bttUandp}nZRslBa@(V^90(qYx%*OAjv&{5OT(y`NV)A7;?(FxN@*D2Gf z(`nXe)#=fh(^=M8)!EiT>Y{WxbqTtHx+Gn)uAZ)yu8pp}uCs1{Zn$o&Zk%qSZkleU zZjNq^Zl`XK?x60N?v(C|E=mupN6;hciRj7cDe0-`nd{l=dFmzWrRb&W73r1gRp`~| zHS2Zh_32IO&FL-bE$OZ3ZR=t5Y4zFl1@%e#YWiCG2KpxYmikuucKUAmzWTBHsrvc) zMfzp><@(L~t@_>i!}_E8+xk2DNCPGVoPoH3jDe1Uv4NF=je)a4h(WkPq(Q1dp+UJp zg+Y@+m%-of8~nOcOO#d#0)N90C7unE02Ar|brhoGzkc=!-zWe3{ayI4A%CCu>xTKi z%mjDn|7W)<{?nT(@O>HhUJ>p;UHae8{C&S=VsPpDSX8%@pHD;7{2{`#iK~Z#KUzrN zy1Ni^$Z+~_hM^C|k3007-Qvn$hNPey3B#v&jFR;*+E;Sp7uWV(Rya}6$J^nx`aQsO zE~1%ns4_od$$`_TY#Sf958cVL>I(Wm&dZw5G*CQQ7WjcdW;@5g_07RgkO1b`ggv*ls|DpxtWO`g=~AZZE_B-~eIuB-WcVYgwU`hH4d$fO z%05$TlxYZf^`zzP#R=Kc+H)bw(=$JreXkS-+A+0w^KM_AeG?c+YcJW#{Kd&g%RN;S z{D4v2XLvqRS@zmDsn6YqMve~Q3M*f5E`Dt#Bx&5WSPvcn&BllFsYR!WjP9I^qveuT46S9Nw!lz++nyUMNPKEfrjy?`nzcp0m5fLwi|9 zyQC(D?)pCR>0?71KLdSU4#%uf;{E$sKgoXme8uD`;(4rH>%c`N#9Fachl>aji+AfFR^6zEskoAa3mhN@IWM!UFNOG+r;zVfSTjv+yL0({-QI=vvDB37 zpQ_VKk31L>Nuz$nV|1E7c#ONgV)*0B(9Cozl7o0 z_+n;te=Y=?zm%^(#^e&??uQ@tqk1xBGl6;L;OD#h-Zi!*U_wqgIG?p;pKPMz3uEUH zCmeJ=`Ajo_BKWN-Q;%W_k25Rou>J*G8U+GJcy9xw95j^z3rwl27g?9l7Ms%82}aokMtlb>?Ko zr*p;`Dje*GGd6m}$GZ<6@cru0S(93T`dknzl1+JmfkPtX)|A>yMX7zqF3X?06}ES*oL6t3A3$>$RkGXF>PC+S7<* z$AfF)rVSojdV4EOnk%t5e)Fagm*&<}?XBX>SRSL2zZ8nzZz+(CQ@hhbOA+|OBMEIr zLF(suAC-Lk=@a?KC-@6Su-(6P|NB`;`^Ep(|Nqwi|F!j>B}4tc{QJL{f6oV0|JQ&1 zfAF7xz5TZcOvTu5m)`vFpK{9%vUWV^EjX?)eKz+k<+GZrwL7B=TMGC6Vme-xtX@AP z_7>d{#zXbuCduk0Wq?_H#q8M`s>>oy&S$E~>!Ujol;1xO1c{t2J{CUoK&VF0z}hHe zD`8eP$DV5+dpxRPU?tl1l-^ms=3us{9YNLV%;#z$EMEG&qWEIXjv<{_b^(EVYoj!Q z^d+B;WqwW%-L|PurzKx2D4?hnwNz8HBbTu&;*?ZT5fA&nvOsK_;Wl?=p$&-%ri;+nh3tob=(Rwi0z!9OZH zN26n{4K->Tr)Y0EWwRuPHax48kAC&lKFmrw>ojdr z`qXl~N5sd*(cIDW1*eH~>6ezM1NXAl@I|9dVYk^Yh^jlUDRJPo`an~nvt>-nl?UX-K{n65i&$bNi?(3w^IF7zBQnpQuu|uV2`P!wIwQsDQ ztB1QB`bQF-@JEd=O(!>4e0)3f;ltA_Z*WFx%7f9Lt_4m6z6o|C-aH^vaEn%bFDTyG z-)X)x^*ha$+|4&BRpkvd6<>b;4@cK#pQEXPsiTL#FX*=MFK--OPPsXQmQH`pf*UXW z{y*QZUTMjHbO-cr{}=4^>C;e5ObjF;Apw2<{28jMs)9sBM4+~|HfUyM2AZCphT`Jl zAX{5oNI^jX`t<1&L`O#l-M@by($Ud@1O)}5<>h6_%gYN&Pfv#o3=AMnPEM$(s0iZc z=ZBV-mLLWO2FTpp95ORAgYbAf;>8Q-!Gj0zDBDnAU?9ZI%nXT(i$h?jKIrS$uTW)W zC3OD$c_=F@3!0difDV9B?|OQApvR9NL-O+SP((xo6dW83A(2SP+uIwetE+=bOG_ac z85yX*zaL^}XNRb$sG#BDVTgr=1v-5AFr=!g3OPGFL*wJ)5H~kB#Kgn|@$m3Kva+%e z7K?>$-n?$ko*q8WQyK{ zJ{~%H^e7Y?8w*iTP(Z!Cz0m&s`=QI1FGF&2a!>%=FRzCOw6U=Pt*)*@IXO8{WMm}N z+S&?z{P+<%c<>;Uot+K6eft&?78Zt{J$nWzDJelupFV}u)YPEp=xFHLwQG>CuPux>K0ZFsqeqXROP4M|BoYZ) zUtfo|x3{6%+FFQACPTZsyHIs?HDqUJ2c0={2D*OzIz&xP4V^rB5}KQvgZAy)2l@H= zL5+=#(CgQ)AtI3om6er2y1KehLP7#mP*4D+q@+OKzki4PK`Txa3I#PZG(a{sHqh4A z7WC!I7wF!-dk_r`4Wy{32pJn2Lt78V9IH8nxq-QAF$o*vZR-VU*{vO-f+Q&4$%IkdL628D!#KwVv3P*hYDbnDiw z)6nVD5XQ$U2tK!7)Z z_;!Hs9stn=0>Oy`v3&(XI}b!Q0R+|q#3c`e6%0h>4FpvR#MBRjLAnKnzYm2%bO$cYy%%K=J2;!aoj* z-Wn7LgImv!IwUppeHv5yyi9js?Zr3kvr#DB1u} zup6LQb3mcCf+9T#3iK@~&S#)7pMs){1_kL0iV+725wrz$SpWrC42mxo6y76HbRpvpioC4fRo0Y&5w3a9}T&lV`0d!T3(LBWWD zVo?W$vI2@k8x+VOD2^sj7U>{4#)hIsiK-fI2?_Is?0l>rpSh4|7asWsQ06^*kI6eem ztN~C=13*Lr7?uDK{s0iP004Xi;1>?Smk6Mj34mu0V3z?vw+A3M008#{z|9CUGTH=C z8wEh41TY%`AkzX6y9xky6u^rDfNMX1mK*?<2Y}To097P_)JFiQYyc-=045~>B{cw~ zYXC+j07NYSLQ()gp#VM?0eE}>bS?qltOMB80?_ON$k+kETnBJD3Ba-sK&24?g$Q7x z3qVo;Ao3jm1O?z>1HkbGK!XMV!x+Hg1OSCHfW&P82vGosFaU;b0EKn{ged@nH2{Jx z0D)To05HyBn}RI}wn`Yauua3*ge?t532e2n-NSf;?G?5k*k0k-0HY4JK-gO0*Z|`m zwk#O6Fz#RrfNcz*=9h)RHV4}@j6@h$u=T>IgsmO6d>DVQEyA`BqaKa}PQbEYJi^$9 zu?$-_Y=yAZ!WIr&9*j}go?y(v*oM&yTOb@~U|WH44I>anFN{{$E?~=ttr(6GaI}GK zAGR*o)?q7#BLi%ku!X{rK^veJjvBCaz%~Zk6Kq2;{$Z+mGJlJ|* z+lDO_wnx}@U`vK04~%X&YQQlAjt_7of{_nfJB)eQW?}1v;|(0q;J5?FAvl`Bwhvno zY$>p9!LbUqQ#gvjsE4B&Y{{@i!?6R7K5(pqtqitq*z#e^fh`}7aA3*hJo$1ylIz%dYxk+8MGmJUZAI0C>i5VkD;&Y#=mEz#I99Q93#|k)J z!|@o7IdBw%Z5@tAaI}DPP0s-KL16)!c zAeRbIl4NjdKLV-60d&vb5>o_Hx&un66P&6G03)VA&T>FbyP)jc0S*s?a=8X@r3$2u0cgnpGGYX$ z{|rFKTYxrQfQuKP)R#d?2?IIK0Ax4=lyHF((gJ0w2JjdIq*DtJI0{PRHNeDmfRlNE zuVjEE3Q$&y01-4m))Ju9@Bjl304jVz>81clCxEhG042!@BpnZsYz8n)3(Bb!lo}l< z&rncGOh5*a02Km28grmz>;Rr70dhvbrPTlueFo&l3}i(G@Dd10$QqzS8ptmK;IJB? zM-<541|aJMC?N}g*A`G>uYmNQfRdI0`0oMbBL=Wp4rGc2*nSR5?=+DA9zeV-kboz^ z7#d*hIIMqwNg;rlejtw>fZs+S*(Ffw2Ea<9L3sxN`FH~foCm1N1!edJ$YMW0cL%_s z6u?S5C`km6`z){qBEXgrz;G78egi;w6|jmhfURwSf|mfft-x|7fNl5zgpdGQdVx$% z0c_y_E?ogavH_x9fPLfu+_eEKG65*61Gp*zs7eG@;|Oq33DD0DFu4XS}& z1=tk?NUH}H=>RPAB#`eFV4Fh#Y5V}$`T)b006$LwhQa~XRe(%m0dn30`QHV0cMeE6 z1lY|XV9Q8=32uP6+W@1i!0zOM74QN(0a!;fK*tzB$}~WF zKCt!=z>bpuQdWRHzX5i57GSptpkoSHnKnS4dE1q)J$*2#fk_%nBrx%Ti4#n#m%H}5 z!Sh2fT>!7k!1F2a+yI`f!SjAF(Mz*^{INII)I73SoDt=!P`8yB!p+=13$Y0?)XYmD zAM}+nF_AN7XtL%$2lih`=SkNUV~U;%R$Z2?{4qABR5^ZQT%v=HhIE>$WEN{M>N*_vgqGaGZ zwc+?)r4XWZ_*UU^U-nIM1l>i()5aEqO;i)tNn&es*VER#v#rJ=ZW+a;QKKSy4ofWu zs#Wfh557Pf4)lsd@YwS&-u^hSqON?lnv)~gTvx>@PGN4GJ!e*7Q6y}mqPu>*QL)$K z38s=Uu|2F6Ke@%#OO1Yd+Rs|O^p1MjrZF^Kj|4KtXHTASE_fQD-xVdoa zK)ukdx^`AqV$nXcnc*#`XeG^}-i$LvtT*ElG7V-OyTUr?8d0NVg~8Ok*#ePaQs-rc zbBRL!Yb{&#KOAGfwXb<+RIXq9@s(!x0Pg1l4R4E&pO~}FiQibi`349Uh(4*#4K;p6 z+`@Iq$45Iqx$blJ(+{8ibEo1JSx`FGD=c5eTSO`r4(Z(9pO^J)Q+>Aa^A&G|$Jk;F z8|%au-I8jj#@(Q>%PUyQDZX2e-wLUDs7%&t-C4Glj`vgR`&O&#Dx3S_Hfs-+0oQ|+ z@adHq?)~TAPs}x*9_i7gxgXwp)_&f08W)W4-Ity+^(VtsPRk>;|hGWR6)8h&MLT<(>3KTr29urTW zP)dvudeX7DdarJS)pqQR{IajJ$G7PoqxNIb2QQalb&k0SB~{;!9FdyV4x2xpcWGgA zA@T5!%Y)1IgQ&5qhm1xa&I~If5dOB0#u)-|GOqUK5ouQ&$?6s{%)YMs2LyvMu7!L^ zJ=?y`&u@SBT77)Ksj4t(g3hur_uN|ak_%J0n_bu^AAgAJinKOUi1!HOJVv*lav!1m z!Gyh&Ysb>9lG#Opq=C7Yd5Uv+4R>5^FtTxsN~w!o&yjPISX;|P@fgg+DK5|EZ_~_o zu{;LxXA3qya2k!Mng_2O5a$V@KUCT4aXyw_0sCFqZuORmE-EZbQ3G?H!CA9(f7n~6 zSi0m=f`qa$QxP$Ep{}2W+C+%RU>F-r7n5@9aK9ZNJ#Uly?HHPoE$Orssx~v9MpsMW zEPBB?-l+127KjsHKE)P1Ou4n5{E1WhL!8IDxZGZ=qd7@O+owJ77isHbV&EWXm>o{3&7|I*mka)Ft%=Tj~8*hzT0 z*)8ZSLCCfAy-|#Nc~!>+C!A=>#9P{LJl+Z|i6M+H7amrn-lahDDzwpxt$VS>>@hDg zc^XZz1(^=+sfL+xd+0eTeb~4edoSAfrMs?Nolg42HtV;q5>Bc1kVGFDDm4-f#RpE_ z;U&B|`@Qif9co2M|9IA1E!*1x-2~=qG(K%blODGMaa`yh{+lZOl?Fn zXpwI8X%ph+N0Aa98$`++>t^b_^k`wDeT=-&C)v|K1Y+?db*?!zE0Ne7q8Q7b2^hk-LPh@R2cqD zdW`~C{7m+ucSFnE>qW_&!oju9S!SIk3Z#|4Q@a`7SgCQts&ur(GtIDT^q*5_A^zlch+F zWpVGA;PZ=S#J&_G_n~e@9kV&n=QPfb`$~;9CK{$1XHy(&T`TTinH}m<#UM*=g(Jkj zoz`N%-ND8?wmtlTHNL*mV#qvKJf`u;@#CS0lQ+5Bq)L;FSheTah9!<5wFPbrq~Bzy5y2I49R3P2@%2a#o&G$K4M+w)PVf zM}JZwEvA2c@Sgqtx7UYvt`^)naH#K~`_I_x(a0xK9abvAQl4)R==Qup2DZ8UI}_ig z;|4T6ukX7YIL07;;81Xo`58GC2XjH$d9{Y*qVq6A+|)R#)6ndC(uF~y_g#2nLV)k5<6X3K zqc^@Oq>LRndNJko*N;}w_3qd6(a%18xq9ctv2*r!s_+8jJkJ}}Nzo^KNe^GDo^P|VQB3@q zG}}silytnhRZ5`G$oC#GKE1TmZM4~HZpU}-%&y0Ri$W=FySV(N1@8QL`oJjTAK~a{ zS*_D4c?hQbpwPj{HsK>9=2?XK#9q;irChn)R{1ma-Ud{T*DnwS)Sf-*ZaLI0c{k;_ zdFQcp+ZGyukF7pw0~z*RW^Encgt8p^b@L+Wd-p_q!oDWGFQINX2p|jcu3ZphQxH!4 zG<)@doZPpk5v&z~;!4v2L{Fo)r3;A^Y^(U?u9i`fY(Y%0e4>>Ox&c{}{BBKj}NmP{TjSPxvuSUndgJw0v}wGf&m; z#_bDAd4&{@8)`7pxk~juI~DWn!rW4LfZUA^B&4Hj$&NXB=h-U58-FM5mWs{nW@ZM*QwLWBX-vAykF6n_9A|1%eoWxr}C1>F`B(7>E&B~ zfziV8?_X=nq27`8B6J=fqdO&vNl1HpWqm`s6pdVs$Y|c%sq zefFlU`RPa7b2=lcgGU~p&s(!b+C)~ioKvuS#@f78)|nYu({-e=Vtk`k^`@aJafHI^ zWQ2yBaf-0@r;yv0_CxFz2@V6p!KZNg&q}DM`15D#ldf>pdmdhLx@O;*$({B26V5K3 zv{JW=_?~hJy}nUVG-pT>5!Nn#0bs>d?2hFKXEq%v_3#`fA z#xkol%GS3<{g5OTqk6pko#srQIC5Xm8!Ec)h=xEPi3xXxY^G4TJA08Q>(>tt;`MXJ z^ds41*uSsrpkFYp&q3VC0jTjvz*~Vjv7TrbWmTb#duMlBJR|1{W_$U%zOoq^KZ$Bz zf1%A5r)*U6fVGDsd3JC7?g0dik>lNm%v3*Et`k2lztTym);8Ozy(ILLr!j>hyHtmY z#)hlMEwyoO&C;L9UX(HXnYx|kdQs-x29?f}KSNDjHdnuCM^&6Sbc=2&Iis2>;mG3T zgIP@cA-@m9#Xm`Ak~8iuP+LC*^3uI0e(NFWVoFH5Zwhg?6fMpI-Fdoiq6%;m1NJq6 zZCU&$KF{#Ko>$+os#+?4)*V?Q8l9D)0c{hGW(_L;q}?;4`-Bprt~4j#4fbp>M`mqohPkJ_Qch# z#Ha-X{hE#8!EW_h%7^;T=FJ3rMbw>Pc6~Z|17FUGi7uS)>(OyR5ZbVe; ziTd4DVfwix-SqR1i>PXqJY3jn*Da>p4ZpQ3KEE`I^ueXYuKZLwo3QhGbM8%d_)gcv z4;Sh2#P!+{9n$9v_i15H*F$xk%hnrphf`i5tgjeF_B6I*ZT4o2rO~zXuWIa%NDaqN z`kX9#>8>i!yDI*4I}UxzP_yR*7I6yAH;*qE_e|~&vE5kR=%D!CF%qF|F;vxKicV*5 zWEg%hbf$`iZpZT7p^@S7=_VnaL$uGY_S@KEeP$*v{ej6cy5pvjLns9NuN}xl?aH7iqqaoGp4xz zHQ01s4Sj=0SCsmyk$(LFp8!S@rv0g7ck|Um4d@2_Y$C+dF}_dvAT1fwM~qh$C9cli+SM(Fg$ zsq@i6d~V-gzB=5pnIL?EYX9oi2KIF1&Ahy_eO98U7LFD!1y4pw-}4$Eolq*pD#nTZ zoMQLLtP|q%DqYVY_P%N5-8&(nZxhr)ox5_w?ZYFUMzRjqq2f`Wlj#=^%jehwm-qaBI&w-nx+1xL{>0HeM{}e35$s3^VHNfB znCAS}+Kqb%k-136FZBb?x)an%*|(aApVIv&_RhaVB>1gUnY__Z6ZS2D&cBYBU5v2K zJK(Lq{$};mM47ShdRN~4_KR|g=@D8M&U_(*lghPBlnfUBO%EBiq%1y^jfbRsj^@p@ z-REIG30cc^r^@hoW;Nl_MN}PoNDc+lsiPW^Pu-v0DSct@@X7b{NSg1JT(ZEv-0*#A zDwn)li_D+sF;T>3=q;M@zp9VrqoCuc)#6Rx;+Q?mCaURUBz!t)IJtc~B=Fn^>KY=A z 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�H zw=mnzw$6|#g^Y!CBSTIz&MwL>wB4$?Vjb5sZ#EC{sYE-&v{OW58Y?9EGzG1QDL;-!I`u9t zPnFjDYbXfyWf5J@gk0*SAlv4NrM1B!0e*a?mGDDr^yBf@)Hnd0Lpm!`-Sw*GJ>?bt z%CeA+&_p9P^tmMMo_Yvby_bq!qR`z`Pkk+YA4NslbBUjRsNWL`&QTqxQ$5sDkEte% zJVK5Ymoo9Cawac*s*tLR z>q=+)EYc&xDgmmLd_oTDQ`dkmlxkxVo<>urzFGddR4We-E1=nRbwMP1wO`J+8fP9^ zpn)7}sYPnda1VG;7ugV4e90_8h9n=1WnT+-{G!-sJAiet63a8Rd(vy>AnF+gL zg;X!ch;JO~g;NR7BMu^sVN&6yJSZk$RTm9Y6Lf0?Fl2Mgc+8sw+NKI>{0R>FJWqZPBng<_)h)$)!z z4+&pH^bR4-$l48+rXgTyY?_AcQncErl(}(rY8$Gpnb%l*pI5#RW9ZlFm{Av&9@4b+ zx{|`1<-DPafm>cJ(#Lsj_E{b!xX0&YrWa* zGCBKf>)V?#B_~sTW;L)@-{}R6oQkpw3LV**p8UwKu%Kp~Hh5T?Cu?H3lak^xk+uF2 z!#rjFQn;E!OjxqzG2UwHqhg-O+L~Hr!#o5lrq!x#DuWgmGJb4e>M5xVl!RN= zm%v0tz*{!VJHsAeQ>@v0W|J-m3rq2(KV{0zmfglm1amF)R%dry%KURY74zsr)KNNU ztIGrG!(XlH8?qED8dIqyNTjn-S4=}!g@-vS&Q-M@gqW2DT~?0Zyg5oXc|uW&QRqtw zQ*~HWdQ2Yb>5WNoAjNdb!Uda76r3?a-btyj{~^fIY&C=Q61o>IL87>En$oCuwc(pzaJ`xmMZ8Z$2sI?4h*;?s)d5EH7wr)vcV6=@~n zAUJ1KkferbeO3S}k%2O0BYN$VGSymNadnwb_5H+5q`HGJeYiEMin%gST;`)P^RuV= z(hGA_eTrZszLY!LL=kPsx%#wSl=;hjrNxz%CB>z4lpC_3QzijOO0uWt`!aL#CuSG; z)Q~{T?Knka2WCEeSrehl;;LE|qHW4ti1904eEH%=X1p7?3)M-;{iz`~a8*d}aeM`g zSosO%IWoJ}R|BuYxm4Cd*@`r>GZ-=s1*=`qq%$Z(8|sbRYvU08ZUX|kfzDNwP7r=>wb2I^*qWSJ=< zT32I+ekI>(Ba(-l3=<&@0+(KUgMjAEDX$9aEvvUzVfuK6 z*V;fnGSVkB{MG|{;mO6b^hfRN$j@RHHq5}^c0|5m^Ez-9ur(X704kMkiuRyB8H`w# zwPg&f#8Ug4nx5%X6;h^ny~({Sh*)_ltqC@s+0vTE&5^1#VI>v{siL}~aUbNhQ4ez% zS2b!;RbMB=_bJ&E(lgKY$-J%N(X8*Cn*M4UN27rRNBJ8yucaCqwXh;BEk?u!VS)(0 zn)=c@CEu+PjuMFs$dH{fFxTQqkC!W|)yPrx06fJtv+8AY9-YE4Q;U*3LD?fo&C(5- z<*(M>DWkA27A`!+CAAWQXmO_dr`oj`vN%{D4F9fUPuDCl4l|?&!Z6wHsOS`^&1D{| z*CMs1J!o6Yyj)mlqy-x(J*on7S6o|~R$pCVf1^*sEaJPq zu6$I;fDh$E6R)09*I$%^PgZpFrzG6gvlo={zDk@A(H&u4kyhr@broSQmF%mf=}EiP zfl>{Kx@t*!LnFya16L~X+KkBuVbjKm3OqPc5sG%9jYvwQDg8FvSBc-JGGPqzGqQc8 zsbU_9GG?03;7}GEQhdQtH0|HDq$VDHl64+B`Bl7HQeu zM@5wJC?7$Sv=a6wT2pU)t1hFi3F-0Ch^$^Fcd=PKH8N{-p-6m0xFdb(MMVX^>DdK2 zIfaE@x>)JCSu(4hldcC+J|$jt*UOq(lhE`erwQE3PQ@&l(Y1z~zT&z%ON@-P zg2-}|4VL_%_!**927+|^Eh9hKrSBPTY$ow=t0+?j&eqD5)XvBu!8s#U43R9=GA|1# ziNF|k)4yLnx$38vPqzN~<&#BVEf|n^_~gal7`P$f@X2SJ96otU&{kK-(Yo{Dlfyt6 zxCuPg>F~*;;1u_2SFfa{B8c=<%vu-)RiFmlng%@N(xSg0lO@7t^;EGL(do=G^zg9! zTxl~+W;diHQ6Wu>%_?P4SO2ut7TNC zW_Q(w^jZ(8QY=K(fQQtCEWjux2GJ58_u5fc!{&5m|(4800Z@V}6`c3Y!oS zf(o~)@>j8oDR8QB#PqM3l?uxgKCFdRNKenZgv%0LcanX_e0DUGz%T)+zG!TRp$O1D(Z>+4ir5NN?xEa?6M?#VT`BC}zvF)Zc?)5suHwM5iaZABHwMjFzHCFGD{ z7V{H+ApO74e_iK1I)#Yudh}oITWQR zB9)N^Y0p+mnlk?&VXMsRfr44XV^L8{CZ_5Aj$ATd3~kP;uPm;yJXqxsR?1A*5W0$4 zLKS7Whxo+DJ!dhd{SGKndL^PTt*Ti z-~1}`mRp%eGh`47LCy22)ln6J@*E;4e^`*R#u;*Bl~Gvm7|3*Om=j^dArHcPndvL8 zucRLwGG=TOYHF6bnq5>xrIIO?=_@W(3mK6aux!d$Dv<&)U%nE*9K?z=V-`N#q^_>G zbat45DpyufiDW)NnuMY};Zk%R%POp>R56kq!-~hF$Yk(X$NUmiN8@v*WIHD2P0ePH&bGrR z_da>}o)z(1P3 zHNGPDtUli)-@g5(OxKSs_WgVH*JpeZv-`Cn`^&q$5qIpfcNZ0W^~19JYaSdv^}_zQ zbUZxwoHjXilkYlofxG>tFLoVCuWml=`GY;Le>i{rcfr$cy=3(A9@`$f=+~$b=l1gc zC3VpGKd<@lsv91Pey?BBtjfO~c*XJYOYh&gd0=T<=b1A;xbnWHqlR^QVCcy$f1jA> zd+L!F20#1l+Y>&zd+q#$dpxs$yL{(gYf6XpmGz{4cE!~e4`FS=Cv(~&L#HA$s@VUO zUsx#1G}cr%3`+>gI;1z+(Kjb|dOBOCJmM%cUCHY0)Z*GX5$n&^Q3Hqe;Ha8ao@yD% zX%SCf-MsrbnD;C!uB`Kz_4bqnj?`gc_M8%gqG~u#%Ql$N9;`Dm!>n1i8$@CpLA4ge ztgu>d8ST(#8%8^(T8A7)OGJ)*3+UOP)STMrx@+^n-I)4`T#sXJA54*XfgPw6|# zs)DKf%uRJv%;j9KO0ycc!0#pef*kgws^uHQW;C^y&YlCUHZ-(mht;eF$4RO@EV8R% zsQIpO}UtX~QX>F|-$;zwD5$N?)r~x_3Ag-RFGK*!*t%`_M>!onZl+?xy(;PCw z@vwM~0F^#=akU()@xTKu8@tQU;8XP=m|S5@d=cG23B-1)>@)#~tjH0owzf<4*&q}( zq2ehE(32MiZxw+V(bC^2sh|f&&xK~MRym~>luJggvuf(4OGUSiX%;G`QFD(aIU<~= zI?5|*=<@^+N78LoQ^^i9rL1G8JlIWRo9ZPy%Ddh=Fk+T+d|$MYtjm8+=Q3v2tk~$r6@feqnww7P^*dHBRMQ>Nz}Ln&53W z3r-uFYBrb&p{qhA0NLCjql39Jxb%kKO@jk-FY9=wQyqkPlr|=GKEGQWYt!C7>phtiG-; zPWC9UA5C?5r8B~0n>4EkhoQ0y%Z`vB!y#*4#Uj^GeFH=Fr%;Zcvw3EdUL-7k4UY}y8NZ3=W*knXs zUBzI>eyWvCZ4p-Xq>UAmHNO-x)MRIE9MI|Y(KhsCiBtoewYttH0$$G!uun*RLKO34 z6+*~fmi~Rg+FDpI%M|KMe5e_oh%fd()`aXOA)zlFzU|)n*45*X@KpAFbpc7De3#T$ z&~~e3a#>akgyUOT!65RBDJbQmw5ryuoY>zwUI~zGE>$L<5}I^rd~&|Q{!ra>W5f6& z)!MNjo~wkB1eNqrn={1^&Q&1HK8TY5#O0HMgUd&xBf`SWOND%>?nWaXEOX;tA~cl< zlkzcCWH8mhQ07ijm8AY1E9nI_?n#K%m-K=q=qbiCU}zDBR=u5)V$1k< z(rj5a5`$%-;*c^_O~a6?${Ir(#)(ogqLZB}%AHWOMf%n^1TAA#<=-}e{A72o@=#wA z9;_NPvpq5^j8t2Ai(6IYh@58YX7!>Z>be4Aa( zjMRN~CH3W;4XTtqz)VBbc*2MIh7l1#8%?BtY;P~EQ;TZw0{b|%J7|qw8}t$N zD5s%m@KosAfy*)6))dDEsQkIT$-wNHv`-??S8F8R~a zTl{+b;F$fpo=ccnn%SeTC$4YSxGcBFn_wrJ^6*P0uz z?sVwooh_CvSrM~;=YjZ{Gsk)I^T#Ev+qksHu@9dgkmzjM^s%igMy$Qz+AdQv^O`^Q z=oKSp6in*4XV>1C1;L4nZJE>(<%Lg}JH{{iqpKUXPm$sUcKDFuW z;+%e$1gDINbH>NVMI|I`fAqRDzxeQ_A;-VnJ#^2`XQP)by&|@ClDqY<-@JH6+03k- z?;L)y%fRl<22aeK+@yWWgpTg0m>5qtXSdme8>ks5(V|6;2iIRS=$%(y z>bh?I;%+G^j+9|TV@E!?;aaxz#*Ap)BD#&IdsO#PDRHB|JHBVwrj1wh$x6?To-%Gq z;-bZioyXok&~MqIW$v49yrSK()ac>+cR%0c;I0>&jY&xy6P%l#n$*JCV$be zV|MJ^>D;{Gs{Y%yUNw43MsBmBY1wT?4Q+DzJBJQ-o;`D7-%D!q&Rn~CRp&Pk?QcIZ zV^Tse?Hx>v~>6ZkHcV960Uh2YY*O*}8<&*3Q&pA3WE;vUuvC^9u929zC+B=ken^ zQV#BXq3Oy+E8|+XjA=V6En)PG{E6*fJ+!Cw%#w`meY?f?bGu?=Q-->R9y_wXZ~InF zI&tf8^n$rLr>$PSC~0=dr2c)oC-h%)!&M!rqER?GMs^26+M6i4gOJQSkiZs-ZyRL( zAWdW@SuLVU_R!R`D56TpXEx1n2Bg1(C}$E?3R!!MsQZ%Lb+CXVRQo1a${~t;HC37f z>A7jDohi!gkjXGeaw4Sr1=(0hl~mIFH^VYoQ>}Z*R%=M-JE~*{q?1KcIRcA%6*eK& zGlnW%MRQ*R`{_$nOo3f|M>UOs-E5-xexw;ELZ0tX6>n19eIfNSNO=KGtS3!vAXR=G zmJoz2#!+mq(sai`Iy+z^LCB~K_V*yoa3#(3J4pRONPZDbxif5UKP+V+WUv|183r3W z1Z#?em3;wOAA?<<2Z`PUyKE1+{s_w|qFFo$D~O|c?t%3sQFRAlKg+20ZIJJ;u!~C| ztsPW#3Qh4ln&C>SXf`CV1y*$k*6M+rU!|$?reSvvEW{1D&8DdYsb)8%{3fh-Eo^2D z>}Vz=yB+d5N;8=OD}4u+olmu|hD_g~%Gbc^*1=jf)4UJS92e0<5^3UDu!r`L;}KZy z7qG8Yu$JvK`K+q$zn|M^j+)`(c$r_G=--QLv9h*v&wi$Trwk zB_zET_BjJ~d>j_D8a8#D<~k8px&StP5LVHe=KUjLAV^cMqX}ICOBemisEK_A#2oF=2tQ&N|p?d)VEtG}m#k<|Gk8h==WvyqhNWBVxiqlQ|B_ z_oaEAhsfJZ(=0-)jYIS;gI%_U)vQD`tbzS*fz2I-9ZaOTEPzGbgt+?^(bpN4vk2Dd zL0qk(Nwudro=5YpLu3}wRJR~DJ0miCA~xjdRtL>Ji)Q}?O>+ifAs_K_47Pd+tn5uh z&wg0{udvP(#M@1V1T2b&_olEG3C%TMIi_4cR0?Ry!cKZ^-(~ zG*u79^C3;WMv8zczL6&NGR13?R`k#1SDJoOH!-}^4kL2SxU7>(L^`WRFMdog4Yg!G+M zaTHDTQCR4QG^=l6FFUF7rI2$H&EXrG&P-VOVVYxiSZyZFyCp0*%Gu4+4fb6MODut< zM8R@S&@^v=?JS}BI$-^eLZ&saheNQ;8dyUnY~Ti(#ru$8cUa*fSmJuv>npH>^^kB1 zWH=Nyw*j`EMw4z4)!ow_(UJlSKaLpK2n$b#49CH47Q-grhlCf=v~HxSr$Vy3A2X-=YS`K|n&J|~#17c!x3H6Rnnx;ZyA&3_ z0}-|xcKHh8YYVK+g{W8po6mq{^*|I|kEodm%Y23AvJMuWf+#pab03GO*(IV4@sf%- z>;^j-2P@r*SV==A?pLM%c+p)GT3Dt zC1=DQsq~{>XyP?09&(~Kr^6>KXPlD-c1ISF>W3l_5kHnp4P zngc7H2%A0#tB9s~KaUs~M^n$H3FW~OqG99QYvOXj!m=R!sWA+|5C>VX+-G66%V-kM z!2;u9o#SDv@vyrWX|Cg7%~6P;9f*f(Ao*yT*mH;pCrxIDbb4uCxrn?gX`15^Ynh0? z<*-XPtmaBY!_~0gMXr(8$E47X{5y;YS+r)zRT2>}?%Q(STPuH>S1|32HC204H}CJ`+OqHRv;XmJlOua4Tz~It(@LL*Wbg_8HZ!)8JpL22O3&bW~wcZG!*r2^Y>Ad|=n&Q3_)dfoLUeJ2M{$+7d`&RvY@|o42SLSc}VdGEFe6wKg-tG_eeM8FN1^?GQ zq#TBvKJ^PJi|ub;xme0$)Z-Jsl``pYDEbL0m)r9?JS=6?esR@XQa%|`u8mSg&jfh{^ z8QZ0vuK&xAhor7jo+*lv`f6YB_3Kh+N%#4^Qg8h|bI+2x+xGI`)1?0PA3D5E>ag&E z^l4I$w|;)@ds3I1C*JzBUu*@Bm=zq&l{((nHkXjgOptm85Ftl7We*-J|k9%}m2 zGwwBKw&*mWbF1M^=5|_ksk_Jb^WW}!W6yo#E`H#-wC&FvXp`{FonxjnO3^C3*R}mFKl_WHUmyKI;CWxW851V0>X22LI^@-p{XlDQa`3AsKLa0t zH^4zq$dS|Z!in}&u>Q7pbm*DMT6X+%6T=X#+B;aSWn8rxz__eR8&X@9#x`&EC@_gx zI5o|esm=@3aVdc#Gj#!2=*S$(sQ{LSxev_VK)_{VY7Kxj21h+dJ0dOBLY)ekJ*Cz% zp8Aq)-61=^LW_Q4Z>7*z%2h4w{<0m0Ru09HS~s!6u41pM-&a*T%O@Fjgd0klxCzAy zF~a7ea6=X;)&30eYSzj`AFSlg5h()JoCFd3`zifVR{cSg{disfnH~;hS^LxJk>XRca5?sFy>fN<{ zPR8lO{1=>+zxbls$~$hkZsk*3AK3KTi~Dw*`0T@Xn#P>`v0wL2t+USd*(k>}|^w5FlPtTjUux3u#x#zxiZAQio zhwi=iv#G!Q@}HQYLtpy!iYq?wfA`(k1Mj~3_?#It+UCCX)??NA`K_~>G}-ywx^;b5 ze*N{2?Y3+gxVClc=oSw?IN*vq?kNA|!VA}Y^Ur_Ie`xdO{!4!TdHeVzCIy-|-|^D@ z_iv7B(IUHO%9K{VHEVi5)2r9Ss*W9(-Pyi+Y14Q+abS}^O`B%qJ^AEUXP%5 zSC)QuJolxCNv(|=Kc6^#`d@ZNMJ-u$`Q`6yEGW2T z&*z{2)bh30>eioe#x;-r`sN8Oh1x&+Xhfw$q(=-hKMF-=0i->80amzVJfL zKh8U^-Q>?c+g8x5+2ZT`{uyJBA0KnDtgOSOx8MHJWo_GDasAk_xwRWM+#k1oeZ~I2 z{`JCrF)>S*Klj|0i=KTp`1tkL`@fqr=bu{#55Dr=4?p~+{lgC*n=ocf^Pz(VO`5fH z=iDu4pM6%ddGqf2^wn2~zrSEXm-5xCdpfjnlRz;%~xHu zuK!Ip^?GFG%I^1{IC1H!FTOba4L5zVWy`wV{r>w4*L3N!{Px1aH+;!K{iW@(Jb&z> zi`IVpzyqIV{Px?^nf?2(+%S3a%eOh5>EpU~-ShU5BctAY{q-k{uf2BtkoVsEZou=; zpBR1m=`Z~IlTUt5UcP+hM@2<#(pRk5*lX$14`=@EZx6PuuRpKf4L95~th)Nv9}XQF zc69dajx}Cyk@JZs9`2Bvd;NR+_ow~5gMrr@Z~VJkTH3YS_wIeP{<`aq1nTONE8c$l z`@vUV{r-j9whg`|Az{%~x86GIw*dnVe6Vn7)vug&*6WJ{fj6Ig=be$Cw`r3#?c$67bsSr_P!`|K0n(`R17^|M|~lOS7_CcxTOe>*=|3&mR~aJudr_OS+bhW5T1N;@q^- z(zmzu?VHd&Hg?yud-kM$-@W@)n{T=0-qevJU;OFIFE9GbzyJM@oW~v;bnDA6*Kf+q zd}Z~-i7n6h;Df)-_{(2Do_qN46J@)0Z4LJBef3}OzI*ly7hG`j^ZoiwE=ge$>zs3L zdhuWXn)kp@KV81!=9|k-eEjj>&)>K2o8dis#t&-OZtu%aJr#JpQ>SO&ZP{|gO*3b< zU$A@kw<+I$f60}PKKk`}$BvCYTwD9zgTseUS-6OS^G6>oxa04C|8n}JmtN50#~;tw z>+`*O^^hU^KRJ5zw10K$mNWbH)t~-$@cpq*wtb@YuD-tvj2)iM68yI$#2 zFl9v4C+qg?zw@(yTy=QdzEO{F{NbAye=2UX{>Ve;Z@PV0NAF*6OiTHG)gvD!|NDc% zOUj>{xuai?2bvb<23~u6WcIuNxps)_gX#{o-1gC9Tdu75%cR6x=3nN2>O}mr)q9tfM2gk;hsgeM zPE6{(%W^bU-(a8)@{BTD1lbd2UALl)xfYw<*j!i=GL`^FJ1Tieq;fVl$PRJzN*PtD z?vIfB9qf&Sebhw@a_fv-xR5CquUJ>BIf|>;oL3*H=L}BxDKcw^xFy15TesTTlg7@z zQhSeCEi3JE_lC8Js+dGbme@)rw~thEUxhLe&uY^>JEhcKv52!i+Jp{(rIUR)mQLO4 zAzHPW!n*xJ3d6eRfeYO9b}O?fj7Ku6=pnGVOpb;JD(M5Tv5C_h^ilk5Mfd3BhVOH* z_kl%jf%40fDtf0?O@&8aO2lQpVSd?r$Z;q+0%+;1Z66$PR_0O^A)Sxgj?A_XWi5G= zT}fOKY`G#K)eg0#M^T3yQeyAFPwvT(6NGtkT)eO-uOORkNpc}fxQR+bm|s$o!eI+V zUb1T?%(Lukl?^JXKDn6acWj`MM!m>wt&Q904ZMx|%9lHh8rsMvr$$qtEJ#3DcH~5! z+7*>OH6uGKi+ep93$4+_Noc>5Hf1GAi-@VB&S%}h7b@>5dFff4HpYE;ysEy!(ox7Q zBbgI9`NEE~iefI93 z+Hz|)6tc%hk#L~8l6}7RO?c|;kbX_4!Y_Bt*2_NDfZW+dv!$8T)Cc9VA+`f?&qJx7 z-9g+AC|l4hvQ)$yNt^6mu>IAaqGA*7IV(%jHHFU=~A;r1|IMQ8MoTdeb zlXQ4Eq4L$I%Jqrz#@)bQq|ur}lzvfITp@lD9-Ga~g>PF0A!84uKqEGmc<6Oey&&1bGe$(W&lSQbHp$gpSkD@jbpvgbc4Hz`oVR5msj(p*i+Iih z3tE~`!s=>=)YWoXL$&Nh$!52d9QkAynQDB#>1=935O6hQt%HM&6{QQ+Rz&4cTBk23 zOWepHN}Z&SEZ>H~g?m$aeNJDW(Jw0Wsk>%Tt;=GqP4-+Q#)yo~(U_-aW_k;_(M0re zHL6M+=hozVYT*Q5&Qx~ibDe-mP(bN8(9BTJE((=nB$?dztdDy5>bS^C@BHM-s|s!) ztLE?(V$&)=XjGn+Qin+q$x^T~8bhnci6$JYkR0mb8O~l&V$zEA0Gd0*Dme?~FReva zS`$#ZQUvoH_6%|oUam-!0A;Hb39@#9((rt`4%mn)_nU^BuzS@yA|N*jSn^0NYg1c* zX`dn-h0jL_)NpgXZ&Ynk=X61(JvL`Uu@nHuM8XZ#QP?uSNFI2A?hQzSJnYPafc0T` zNJgJJY}9IAT9|FPCv$P6C9ut2d-^l7qcU`G!aA;KpQEroC99lPtFNh6y$E&FtMn?^ zdsxQ>!?Gt>ipZpsNz>Hy@T zA-~k6Z?zp=OPF~Q9=xKEX+-`b^;?3 zz}|KaYDj6)Qz_<>#bBMfYCuzDSii(mMc(ZrG4nXcDkNi_L(#M$9R{i1at>wSph7~D zw!#@sxr@VB%KdD7N#;Z^6iLCV85UZqqSrQ^MRfkKjlV zJ~ZuE?IYY9F^~&u1^_{y>+aGY^ZN( z@KzO^Vxm$XawL4rgi;v@%wf~75WQqkIg-LKoK5osoJ&7eCr!=v;W~`>s-hC|l2G8$ zR?#ujW|AFdtjZ z+3MfWy{?jQW9iU^e@ki5uLlDqaPt zMh{8^+s-A1aHl4*Vs00VDKNzuj0?RdT+FQNH?T0x!K%Qpd`4KvoM~81M%dZa8DSbx zrx7-~8`dyxC1g%9L_m`jop4iX)-6V=(xtZS<4>w=!-XEFjB0`iT;3TFs)SIakeHP% z5*8-!JcUGXWJkg3t$FC7)^RCwrK8udTE|5CJK+aP<#xcSurPIHH(Z$eeHSA3s{@Yd zoTfsmb7f#zf+Js5pC^xdkv%e;G#BtDaG;W|G=`Z_gAsz}&Re-|(7xl@>aJnstFNo5 zlnuy*`u<>tzG`uW;r?Xm-RN@>)Jy{E^81Y`#RtG#WivXk7dSN0)wT`E*;pKER9 zwjG91jJA|JilYx!s$A6xEOThHIQ0Igc(iX{@Zf{<_|n-nPVJ~U2C8DgiAryTKNcOV zTd@Doo5Y2zrW6BmJ)O{jq?NC*B!qf>%$2CSCK%Lkbd*t_nac^K-YO5Bei;=?R}6og zH!YLfILhkPT}X6-I0T9%nT-l>7GakMLRsN4T16+NqBEyD zc!M2_hvbvn&lw6^l8iUp z7RZI^`b(_&qJx@ljdXPK#Uu+(J6<<5niqT}^rWxp0{hD>rc3lzpV(iPZJLRLW*|9> z@Mu+}=8}$C7IQM{S;&d00s4A1iXTC2j`G@`bHp%I?wwL=u0fnQQ!NJ-JscP-hm-30 zB56pfK~NORIt%NZB&AXoJwPZHm&Zzw^tzKK{-T%w8zH&+P9zCe#e58 zH;vk($EqID50CF{)V+Jp+_xh zqEWy9{@d?=iTRi5{@@D(MjG|nYoo4puX0{x)QuaT*f_V% zxrdFKn3$3{b4>e6qh5URiHlEO_3vdy9X|Zk;g7$6;Uc3ZC)Xt(s~G*gQI8zC_ekM{ ze?4l{H{Q7TjekG*Xg8zo+BIa?1z+B})~JIAZyQ{7%Xyhbojf^pa>+%v^fT&jzrFX{ z#%}MQZ`8BSNtA@)`_6h$-OqgH>z{dEY0GkT zufBTV>TfrH`c>+le)`JOcV+w=)IEIouZRD1+@DWW_nv!BzUR!lUjBV`FTM0{mp<~P zo!?RS_~U0EUwg)^I(4^fdES=ufByAJbq^i-#Gz95yEmyjckZooYi{p2R^3G6>_pSX z=a+)l=e^K|@&;Hf3zp>{ZA5r(UuN{8v!GA7kRri4h z);#daH@|UVHa$Wrg)m^jZm^H_)eq~zSH@#`qn|2?(;K}NK^{c0S z^}H{>^nki`b^GcjUVp_#bwB&rFMamaJ9_KYJ@LeIPh5J=<1SP8{qKL}`;WPB&28#l zamBxt6#m~SLZzQ8-G;yw9}TKHo5S;?dpE_yQS~`{GFdzsP3*^ExX1){glJ%-g)Qe z?|l8v{9JXv_O&N`?P))F@o&^^ZvJNTXAbqhRNb{}SFF8m;)W)5r=}j7df%L%=G49J zx<6m{*H;~Wg}OJ~aNP}uf4!ohZck6X=ku4|`9^hpf0zH1x2#;DZh!x0`nP=do2RM! zYt?=D;hP>__^dDfP~C?f zTKCZFZg^k2x^I2!oo~&b-*cC`uXx4dUUBXVPJFexD^?s{@#n8xcelDX-PCu}y?RW!TZaRHZ`tfZq+o0~B{`8wa-Seb>E>(BIg1Z*H@%PVozq-Hs-5Y*) z@%R_^t9#jHk6!k(FFfaa>UMXxcHemJd%vvi+urt(x9vE6(?jb1`q!`e^>M|o{7T(o z@ukJn9{%bx)&2CRzy0Y?^$#4UZbQQz4aL`7^K^CZx@+!T9lvvcl6vJ4K96D-GBY-JO8@9{uis&ZEv5~-c`8ee06WUaqPxJKU%g;-HC~>OuXuj zU;jhh6Ha*22@B3UWwE+1d)eb(Hs|J(KA`SLKJv$p{C(w)b?W~7=b!y~@1}3PP~FEp zZt3Gj7oYnabZtPO`?|=Wo-`~*kyUpr;@rw(;*!P#4-mY#<&7PV?AAb7j>TcS!W78k~ zkGxOa-McT^o%_HOzp3un*muW1@vcK(RCn33L(9JV{jrDDZELG*yCQ${nd)A1P4Swq zUUJ7CbtfnPHTjDd{{GGC;&k-V?>{j5Gj*@Oe%AG~Uv&J<>VE56z2ExMM?QO&y67v%#ef0iEKYH=c zI@O&qtBD(>+kq-LyfvaL+=^t-2c6&s(b3G&8PM+ zdva0TfBfSc|9HWoU+qx$hd;dXhacbl_5pRD^PHbO=l(Z5`W|)X%(-FCihXO(R`-%i z9=_y@_iy{Ry6=16>)zM6V%;t3e*Np`fBn*LJ@5DGo^eL%jF)sj_4Vq$>QyJa>Xerr z_X2f0I%+zezV+4_>VD!AKmWwHE-&?|`yL|cYm;dYD$p%bcn^XRDuDYN4)DJ%O)-5AXQuhf@XnVrVJx_bN zy7T9MX#TTr-FUgW-}%ng@7(vv+mBcG7r(gu7hA9T&h_dJ55Hr0!#xL=sk?vwlKsPf zdhL7FJ?^+uj(gH+C!C}1`t|AcFMGmm2h~lbPE9?z^(EJ+``qXL__;rP)4$)M?t9+z zruSU1r1K@}UUbpBFKT~&Zi~9N-+tfiA0FB|OWn_X?!wQl{>htPtZp`YdG>9`zVi?2 z9z3|=;0Ip*jxlvlK6(Dh8|R*xRrif=?0Dm?-)g2i4 z)WFC$zkPzbC!I9sq_uUAPpCUO`u)*&z5hq|tNZbf|K#Hj=B^!4_nY6`^3AV*;xp%| z`^Y1&dE}DkeEB|g@4fe|d+Q&1;ZM|Ewd#qhF50lWU)`H;zT)P6pRb#*?%uuc-P`)O z?nl(Et$j=F)i23RsC(5_LsxyT@slr7_iumu^50%_*&|!kebI}a`l8g{Gd{2GlP>(y zFJJu0V>%bV^V@&kG4krJXWa3ISHAs}XDxclkM93`{knf|c;faYKYR1j#Uzs=S z!*AL8!p~fN`r&&nJ$}ofxrvv*>)Ee;;Ge(U+4udk*1YMfb)P-){a3tTp%qN+w|Z+Egv1fKrGZDH&{{RW6zqzuVsVV9SPS z;x9X~nY&{xHK^mprjjva>aT-9fyfs1%}^ z+8`O5L0_)=q-qzk6D?)NjaUUa*hY!u{-RROT;%L`L!8*c8)$iRCz^umk0t<5-EAyG zjRY9n1eH0>#wWgHq01Gp=wb_+HoEn0>syi-X<^Hx$u+2GI0)Ew6MYEmqfiBMNfcLbo{wgl)}0 zXQXOHuo|eCjH+Wr02zwuXF0DMOlS!r?w|F$P-bH@a@1>fCXFy-Mupi^3FAJ{W}H0&HAU zMjs~5i%X2CiugK6HOp1@DM}$>_6SO`Sq2=H z18sRLkcNr@^~7Xfh4$1Tyhoigxx;81@`i1Th#o|684hWxssWXG@lhm<>TP0>7i#|) zyN9huLd4ic97z<0Ay9kH$Q5_7l}kyo&lHCPYzEmc1Bh6ryNpH*k1*4+@+4Vdz;k z!P@WuRCKs$!_5*QhtIL=&jA-#i57a;VQ`V*MpTXHPZ6ioQ`(BVeRJ7lB9rdPX4bX# zY+l@~>iy*b);uJ)UYJ;t%tO_PSG#i*7LRQUMXd>wo4m>;UUFrZZZaWV9j&SAft{&_UXt*9V_XFY>=QDbL=6K24hWSd~m#C5RHi89{^4z4=u+Egib6+?qsaYDKAHe#Be zWKV*iZz{J7hdxrUCSnv)I++X0-IRH8lEp45wFPI*?h1`e_bQxx;11yeL&SO@cJoff zzA81(AdMqLj@C4BpoGb|42n6qqJ6f^4;@g_6{4B$=K50S4he4TF-qw1AWDQI!gL1er^L9wlLv?L0frAqS-i@D%~8GBK>GU8)rsGK}O9 zkb53{z_~o5ubRR<0QGpN@JrF+`nFNm9_=$6^Y(6?=5WE8qtymx+83%Z@uou5u7eJJ&AD|%~jIx?zw zpJofBx*S@Z!GMt9}2Gr2b%`yoK0M zPx^?_`Qa%K=--g-MZfJeH%B?zUvBLMO4Q+TSEyVCt&_Zas81UX7oHczw-tzy8b?X& z>LJ7?l?kIst(QGmZQ)2#*o@HC;$_1TpmMvMhAuyH=#>p_3=gDAY~wm~fVr!S_1;>J z?C=}PkMSzA(mdjuUVNld_heOACGT=948`SkA4}J%T6@mg+_f>^#}VtiIjAIB!_Yy( zRedOR41m12EyxGedT}Ism{)Ldn06>eGOqca4&Q1nN6M>fb<$tBWXUoNhvpUv_DQxI zuu!~e1k4bkMOW2u96Xh=E^M3}edP`)QDYp+Px3w}OJd&VDuFSU1tb=D1xJk~>)Gb`vY&7ySbxn&FBYkMwVN6E5I*d?w z5}DMzRy)1MvKuJEa^R8UL!jAe7z`KHuIkOilMKgmi0h!EFAWCz@nAD2$Y{-n>L~;s zqUi}yP&S!^R9mk7MSYu#a$Vw)wqfVCd-L~AjrZL*RRH7wDL^w|4q!H52HfC3-~NCBDwa{#jeGXRG-<9omXz<$6!z+S)} zz;3`epa94LQh;W_9KdYA48UQO(ILPAKpAhpZDFN_fH8J~I?ez_0lNTq0lZ_Nn{2MZ z4woR?Mu$Lzr^$QGqCgIo8;MQqb75y{FOhn3S^9k`%8^rDQQ zHJ$akQXQ6BxcrZiGb?w^idmy0eb<^(Z$gqQZMmz=7P(i8hxvT5zeut6OkyF(LPdvj zh$KP5Gt+7}WK5PF<)ir>tHi9k9InJJ@>)vAjKaK|{A~*xMsb{6Hjfx%*c5CCWlt3Y zhQS3^4B%=20aw-(uJ&psAyF48{3J#Ct(k4j)?G|jw^9&P65U3`|sF0{Z9>aNuG@diq#=VJ*suGYB!8E)0u( zk^>{6pT&Z@#|BMEIXUi+kr@A`WrMF~K|wvMqni)717l1wm>a}`okSst{T-gBAyt?L zP@4S4MCtpPv5`Kb@y?@y5fn6N`8Uf;q}pLUfwI!}282RZSdU-P`V8_-ZwA2*p^}p9rv(XJ&ZW+f*qv=#r79#7jr7*~yx-R4a z+YXXRl<9%j-9L30Fz2TGr&53d;8wsLbm5-@%(w;NfE-{qU@zbR;4om%>+uY@_162R z9({v>oo~8-YUdjPaOrn0+(Cq+`;H8c4AHVw)|?JBeMPorol~!zm28qr0|lfR6<<@T zqZ16DT@a(8HT$U%$ZUqO3yT#6m`xsWN^ml5#R)3xRC!~C0eFPL!LXMvwHCsGjws<6 z$K9uTFrK(BJ&`p-8CP>yLYI%&o4IH~8q0=qUV+2{Ptn2$mU3C$sYdaOPw0X3z|a#I zohV?fMwu5Dn(pg5tdU{yM+|QADswIzBk$BIh+=Ryji8W50(XPLK9?a7zPRi*(?s(0 zlV>i5<)OE$OE} z;pTEk>{2A@{2~sa9_5_Q^U3^hxbeZAr>`4R~Z|zyhft6 zGqE)#ZGIUWM3q5Ah`*yV*9t}r(tY#UFoyna*yJ(())TWkqZsGNo9S$8O>VlpJJDvQ z1>VJp9)gZJTB5zOLOm)GN2r(vi);`j`M{J9Oy4Aj*t)tknaHJuEID5!aWyXi<&b0w zzN<*#@3x}#0s@iP6wT7nV4)6FuY+xj>KkJb4Ie3M2}&l)16py#9u=P`r54QP>Gn)+ z)1|XK`6N4nt@bVmRM5REG_bKj4ovve@X6i?Qo!~I2S)92hEixFT)avkhI4U3izqBG zkLHj#Ii^}+nIzLmLq;^8J30d4oO~s_!64yaWEo|O^DdQjFji!UjVUCcA;z;fgBI)i zP^x?|Z)3Jl#b?5FJdO%UY|lU=42Fuh*pIw9FA3Z)4c!+xubPC&YzuoU&po66;xP#h z#sqfu`8Y>s*aBA}#$StDKjo@u?7wa)`aE1)7|U;mr5@awD1M<=B9f3q!bynX1Eh)) zsUb`<=;$>Z{>a(etS=PU~0dGLvUxzdSHq! z{RRQM0awBANN^i)js$Du*!3X$0`wB`M`Ws6Njs$q@6RE4bvsM=r7Vywv#*OdUM;fvM*69+={D+f$6Y2ku_@mlerqFJ&72#mN?r zBe2X=W=l)%ct$5xAwDMym~Ddbxgv*1GlTeT=${j?PU220emDbx(cieqC|7Zy?g_*h z-e@nQX_HvONQ~gw(B>)uADcPB&QKa1I+e)h{9x9z-?R?*4}cx=ZSvY7xFr`*A>W3V zvT{BpW2u1mBNg+eG&&$zmhBtlm6j!Yy0eKj>7GowtF<##A%>y+D5qwV{+{+kCW9f^ z3OfuhX=AfekBA>icsV1)z-MI8m$J~8V+8@Rdz#iA#G|Idgb}%MGGrCFr;p@tGdvW5 z*{6=;IP8ew%riqVVL*)O;mC4n&_3I3b23sa&C(F8A_!Nd`{}_Q(IyPMn%FSMa2M=< zKr|+wB!+iDWz*QqF?yH9L9~5uq!;E@&7;_gft?pvSkowJ<^+}-hDL=3hf4Xa!QU*P z8?XVe34pB|?>T^{9^-iz0$vTc34)|s0KWk|3@B?4C2*oB9hC8UBRO}pWjD_AIQw4# zWf<~i^JV%+BPb^_Ib0+kp4|vlEb|v*S{d5-V2LcFF+@SN)(K>d2F%JZC&npGoE)yJ z^Xe8%dVP6Rh*;$t7=@@pgfH?6-jr%%n{khMv9}415k2Dp3U)NX2w~7Trb4w!hoPH; zt3?Y~fj~Qv3Mgu{q3B;nt8*A;g(#)#Xdbd6Vu1S6AOTlN7(|S%7#n~Ulj9`@WFfW6 zqm_wJ$!9t+(y4)&;v_f@4t?t3q|@<4&oEN>&`)GmHb;83a1rJe92IH|VAwPlPHfbe z!7+O%(9aCFtYk3<1#KXk&6#}3tk3k_nsb0z5izi!-eF2&0d^sohkcBI<^XRwrtB>6 zG52vp^L?xUE>MX|=>#uiUCVtWIdDh@*M_r`C;6Zo9u#!I37x2YY2W~Tv!Pu5%NjW>Nj$Q)y z(1W}gs^P}D6Ns?}-AVV4I9-`0?B{+g1-&QC&{!oP{-!#yp ze1kAeYY7S3#Uqky)LqRZnVmilw&5_E_waNGtbg>1Y7BHRq%`-FI!^Sk};xaSzxjmhD8*8$-FXVd6u1Mu=B}ALRi(VRk|=dLP+zVn+MX)9Ysn~72&^AHY`Otb8 z9PWOgjX)1@n`9tlx$i=Cq^36^<_r!30T znYitE63~N|R?q5mBG=uO_8=G*t3U(2>=1T->BZUH&V^;4LJ{1ndFaX5Z;|7&voY|G?C~n~i(h9^=w)C;SS4Ho$zqqc=eY z02l}404^@^|3CQemBFpAi_+Q|dr!R<;e;cU`;00$hfvQ4S=XpXwkaIOFv1117=y~+ z@IVPxurbhcA?CarWEe{2>cPB}FvH+2+m*}oB+}W&rlmc}_MYt8L}Sm=1r@y)HmP?a z#ZP+p&6;F;%ojR2;>&nOafgU3Y~%&Yl?m>K^TlYP(&-t@@1U75T6^azGC#;3ZumDJ zVs{*!>c=1O)$+V~q_D$06}X7#TI+SKs!Xv&?GGm|JTB}p_TVZ6m;@nUO*)5VdS@1Y z*QOIGJa^*}19?XpeOG^1{f9sOPTj@-;V+&KliVJx2pctoq3prS|%1b7b8q@#L zozmYdeVCd(d$xT(FYv3KchSZ3>*^aWs;#Y6&){Jy?zbK&VW{H6kG~Q_CYe#>#5C+= z8wAeTuJv7>Op1xNwpEGbx}Iz@yWXQ^wYv7yA_?lsCVDos=GOMmx2Li%+IAFI+i-GK zk`3QWtxeaZve`P*9qQaix-Ju`G;Pj_Z$qGHr&Q3@)i*}l!Hr}uC|nE>WdWeklSBYhWb?up z=tW$3M~hiTrzk$tSruRDmqly|^(?KLCIpqID&l8jHY76Hb*ACP^BW1!^pG+Fv`M+? zkKnucwfOP;M(~wB^BW0><~I^#zp?qXu>hZ?YVvFSY|Kl&bdu@EU(@<5ZrocFS{b{H zN=53@x7q)gAtA)Skv`7Q3Q<(>W(=V>n_C6)L9fJff+T+-frc9zx@}wI8sPnsSIHHT=T*m*Gd^a0UZIEePdzPA4ymtL#fB zKIgkg(+mokzU=Km%M3zDg$*!LSMaQW8X+C@Lp!LK1tLGekgbu}3c*M&mEw3a_v#(% zy-voRkXUg!q*&$7H%>_Gn@EziK!78?p{%6X0IC+FepRuI`K6Nz>CdJF_?Z*J^w~mi zztO7ENbp5@?YN}$15I+p4;W|~nH_(ebVUQ4WJLp* z0S3}kEtJ(z9;VHsJcONr=}1B@($?0RVE*k8MxLaCcl-;c-hRO#Mx|dlK`t@Jy9%*j zR*z8<4kzvxr(v^DMnnDGq^O@$?BxYf9%ysGh7%NR`FHUk=PN@}Dy#gv@<8XyHCXI4 zEm+W4$A_iMtm6gV(x~~itl4@tHd!R+Aq)!e8=Jh=R2r3M$5jqf$bp#?84?V{k&tW} z5<7eoVan+#gR_oxXkvy?89EE83_XZ9g3gMIp*quc1XWvNqRTXCXDD}rSgy{rr!A?< zSJGcWF!q(Ht_t6T0kJO_kBpaQ_(ue3Q;h{+9#eZ?BUprq@6RueE}+@v?2DFC21 zTQjkBkl>!Y3_S5~&}q0JsOG&?1H6Ny4^Hj5_Wzx5_$bqU%2DKRj)Sut&pE)j_1n*Q zUi#qFzE?dswHs~$Kv!We{I3VhzTv^C836VF|7UlOP3N9hPM_Yx2tNqe54a7`jC`H~ zXahXf{0)L$3UKc$9-P_>*a=t;aOpPVeYWFw`1%K@4gmH54!<1FfPH{HfI+|<0KY%{ zvM8Mcc;5%e0hY(Y-1zi)eg&Kv@VgD=cJ56`^Xnd*TJ{>mgJ-(cVDAyat9|$XEB}2q z9~$4G*FHE!(06t3h2Opk{u*A*-Ggst0}k#%{Q@2av;pGybKv)=Eyn|JZ>vzId*Qd+ z@h{*xW#13ph&Bq?3)l^a(|6x<2p_*0Z2_}L2G7bjA_RpN@!sfZKHbH%t~I2Gtb;vo$? zgKK&t;ru=}!?Ro>I2CA=;Z&g$DVHjAA~+T4#PVE`P7J3aoeKFPr?Rw4A0Q1U9E_I; zI7B!dwEyt?vhdjV!tlAmFNX#t`|O7maV(u_aabl!TBoC<`K^c}bS%Gq#57gHD{DDH z?+^1A!I9i4CB=!=W+YWra4OPCS1j*n|E*XK4mIU`4PGSePP*_xq`V?{F>2G)H7UmW zYt{6{`fZi;In>;E%hKmi3;P4xbhN!|O;y2ha;oi>F&&9c8BPT{Wi*_eu}wt6`Mr}P zhI7n{;8ZBf26G+1+LVQiXBCg;&f!&23fX2`5y&tSh7|CSe33bQyzhC zIZdY#;8ELN<+N7EJ$ky8(ps7Bv^1wJQ-_{|cXafQkUmSVoL000YkQlvzNbxFC3=<8 z7R8hPVE1&jDF8#o@0IyWMXb=iD$zsfl3p-2nm&lXLEqN)>ePc7ik zndKdh8H(kUjZln_Es9q;osqe9nljS5E|0%5UFN(Tw{lu5<5s3?>fy+gncix+amvKy zRzcUo=0+_^2@X@^FmRRn z%QUnibJ-E-1^x60^rCp>>63C*or-eVz0>}k{!%5*I4#8HZbeK(t2|v{oljp2)$rmJ zi5IlAD(NrBiBmECG1AYbp;eAonO>yNOhd06FGkPmu7!G*@PKaouvKmB$y(DTROQFn zOIWrW6Z6#6&<44@#T3BvkJ-9mkn19D?Y#CP2N>(pKoC(}o1@3AKSZn6MSPa(zV} zbL)YnPu%crK4S>XtqhHd=KmP(LxxtU9IkK>dT;9!Rf4#?-y zt1udOcC>8@-;&Ul)ewDJ)&$cI+1f>m=XneH(71T%Jg+O+T#K*y&}1ICGish7>IN(|AxRvi8N^Wl6BN9euP_pY(byLW;g+cRf@Ag4 zWtNszENIaEJ&in(3buv4+K$eS^gND2+ZyW^K%*8mtJ3YTE!Mdjik*>n*mX{Hx8=O8 z=yKlHbZV`)6`dJR9OB?m5zX6*@kB7h6+d}Gn7CN#cw3oDFHbUg48>la(~Oq~GJS}a zC&q$C<6^^F-n~3O#^$h5*z$_<8Oq+4KOGdYb(X>?fl+nvl=JsEjL07pqZGl?W$lS1 z6`Z#%^xAP+y}R98+q!10x4Jcx^^ikRnLwl9X8A(d=%yzUUKjN&*TF*!mR)O+LeSa7 z=!e=+vQsGKmJ8fsx5eCYfyrM@UDLvnUsLkeO|Gb^TUzoH6L6bLG~0rQWhK8o&xdAM z=s41keeX=$ht7g~I^LfImwoVTxIWw`!`%h<9Jnjto(mWMy{GUGezn#$Z~xg}#(%1% z_c*wW_cXY>;GPbbgToncSK{&Ua5*MC0j>{sHe9CniE#OwYhCkpbblE?KV!Tr?ejd0 zF^s1HF6qAofj-=~!rcY;KKL_T-=qt_`|0ARmo&c}e*C@7y5_C&U&envfT*;s$Fv*| zVEi=z#{X1+58!Vl;O+Qm7u@&pW5DnDG2jn$L7<-L0fCd~g1~d>`kwbfx-0Q5-Cdsd zBDx?T?;v2_XL#Qb|C!!D#68{XWuic!2sapKja3{oNC+ECE^fi0Kd}}fI#OAjT!n3TSm((172Aqi^1VA^Nao;r4rhkYNrawDBSHJ79U~Z; z)}=Sn!U&DW;cz6(l;FSDK2RtO7B`PfGLiXlFM&xO)|GHF!pjtK^1&J{fYleIl`lB= zodI947RHWC{V*M-7*Wq*IdilSho|JAfVw@6!BbQ4v=BFvpp<}0rok)r7W#X5)j4v_ z&rP|SgC(Q1yaNL%C?k`1lMzL|ovF9D(?M}y?0(2rAn`5`nn8j;W7h%AqE+rub4n$Fjbi6PSu(VTej zSK1EjC;x{(jyn9wC;^v47JnSV`1AQEHyOIIf*%GQxgdF1zX-9D&&l9w6?6)yr|%C>+HN2P6Ji5$rgQI*Q3i zAEpj?F^##909`>$TETWS46DN+)3}ep&j-td>yv26i0I@ReBr;5wg9g-HP4_nIjGip zv&H63R6P2{gN@_Xk^&ytKzuo>33^T|N4j8Rb6hTmK>HJuO0ue;2?C6jFb}}oi9Kc{ zi)NB&%G=mI=$$BGkfs#}d_Rl9Mq8&2z6w!VWnqUbO}gxW3G)?ldkc{f`~^C)I4X$dlA z`Iy4{aaSSk1uymJ;RkJJ`1_=VomHWXBE5hmCQz8uwcW*!Ve_yyeyjmC5; zAGW1%934jfG51Q_3(JP9Rvg%n(qe*~c1Bw4Gre*>7@H~Qsb02p+jnGio38bQb`>lw zHPlev56KJ3eRt^SVr~HqcoH{anw7V0xsty)o|#O!$PetsgVwf%NG{J*Iypj5t;X$3wX@(3p{^ ziesz?F;%#*2B^5t;380Jb$jEo4{>8e=i zpj{lh(6G{7^jJ)WsJ{q~B^1Y@D3nHLU6i!zR)2y zN|OT#PNHu?ceCGXIBb>CEUPT5VIM=sJBh>M*g2aUh+Yluc??2*4MMvhFW!T3vu6|wVT)G+Gg%!8v?}GrbolKfW0-D8 z#~E6jd7y_Znn)^S;H-|PBTyw;G9pcsU>XL78{%I(q@v+w*phpCgV`@m16OCFXkuB9#bb+Z+O}hHrfoausTgDB zz7R~JFftOSZrrp@^Sm9O3&k@>< zp%b);itQ$b6KgkSQ!+BeyHl6cCpbWi_)aBO7`H4A`$N^f>EKjs>n42q^j1n~tm&9E zLt=^LyN=CH;!QhNUMyegso2l`h8teFM@REfDHARY zyDZnitZ#5&OFtP97pGE>cEc<6<_#Gbj7jG>34tpCLj}WyvSG~)>>ggvCWav?Qwt_q zv5acwd@FVFg$tL}mPmjFL-xDrC-Od(ocNn}1S?O2=B|p3kK6_dQ-Aze8n}=!uf4sp zPPZ?{(7NCSG9&>B@&HU{C_$$!H=T$XJ=oI3`V&zH6J75DC7qlJAOP!L_>5wxZvK zqKQ~kMv{x-3GsP3hw1y0j?KmK?M0RW8VI=l(14qh%21F92}!h>*%ZstPlaBTJ*cEj zK7}<_$3nAPhcwh|M<1yn3PdR$r2t3dF)9W#a%t{}Z8p0K#bPWa!HiJWl8g);qixUu ztn^vLKv-&FivtOE1)e1uk!1+j5nP90r4vY+cn9X5QTa*}*bsO~!E#_%c?O%FZP`I< zvKt22lHm;G=V8~m*HiW$J;5*=kaj`d;$cr10}%vJ{^lY|r$`BRFXUh2;}G&==!2z5 zT?x@Icu}j;GMf8NnR^3~hy(*Hy=#8kMtQGj^T6$G#IHN!gH%dFrl>}@PzCR7f%JES@kzNsO)1U+kic1gf3x;KJMuV z%(aKgr3)DTY!5a}g$AHIR}1Px!nvP~6k`(vq7eDgR%pcEc5>Y-iG)>*6`tIDcecYc zng}{(TI`L9m={`Dm^j3krOfw19OJO?Z^plfmkd)VCQr5!Wst!(wZED7u3~x;Z&4NK z)l_T7%oN3#faJToxysVe-0Ew#%6L1&792a?sF zZ+RsuXM{5`i%E9fgw2I^3~rqa{DcjZE;>3eS{#H_G+=FXyPVlVS1=W-B}vw^)ITv^ z7~%ax4$thft(r>==#9MFNve0V;IRZvpMeJj+CGdA%SUX1;z4a;Y={KAfR+P~Pmb0* zWMmzY0()^-0$~7|K8y_ErfxJS$flhrecd9`cM&`X&BihZcAUVjFGhA&v~IRoCfVdS z!p&;YVQ-ka4Vbez!F%kQ@!fJ;?}jzmjys>^YI3eRWY8&5FdW^GHSx)uAYslLfw)D2*d~L9L!1?}Q>B33eAFB54GSZ19HKH~53fNr7g`%UDqwgVXG7oR1|4tg0sA9;RlZT~(ZM$bgk4&5 zOS;irkcF0dISt!zaY2At2?sNC%s)y*xw-(!a;N&vQCatXqS1^pC_+qYJV-UWgx0BT0gsJLKzt^~bK6KZg|orOgNWJB1@#8}WH zd<LdCMLjx#FQ{ooYY}JFC zH}|i&R7{ZZG1}#FRRuQmNE7?{ovMUILsq>?6uY=p=L zvou(2_uEc4ivBocuEIeFm?+Al)T#6*Y_Im>99z*tvki7f3{S$IEQ%Bu7`@nfi!)|5c6loD@qgUBpaB3e0NqIIKxPhZ;VPztR8E$m4;c{No0OibD~Cp?5hwC#;Md zl~?rKt~sLXMix<2io|DzH%b$$c%y|?3z0;y#DouElV+UqVi^Pp6h1)ejpLczlV=b| zLX9Hhfk7deF#U>@qLm&DRb-5fc8CxS{8bNwmyjV*9KM{*+`tc)j?r6S`$_g4F_?64+Yn)!2?T`5z#Ze;Ere< z00m7(!f+mU{LH5ku8T(-8t~ll_n!Rb&B!+nn}Ho?#9CNdYkF#2JCMF(mpPv69_(Z*(`L+@=P zP&y34NH;c8NFri>;ZP6{2*v>hgyTa%B=m~XaQq`ADi0$hUOt4B`9`CNd=PdI?Grkd zTQ(~;*UDrrxiHgutRGlU(-F)|&=a_{Xws>^Nlb(^d(<_qfR;_nsvJbXtbn(S(P0FB7Dqv zI5>z?B|=k%H(9z1$06Tkx>lPo(bk-3Tx{PeMa~WtYDzUqSH>k)jb#%m2DXX8h$~ zPzC(3Y>`7@M9jBL42mDZB`iP#nFQoLWs0G?*olQ;zQ=*hI6i#2AydhJ3-rw^pkuqK zf-jhU{c&bTZ)cXw5Xhb zm`ox@Nej{WfU{hv5FNvJg&DCR+mvKWrYuMpN)^(@L*4%3Bt(TGW_1|<$aW+bf7(ik zvT~fBveN!Ct1l;jP zt|uEe);Q)EgVdr!TjxIa1D*K-zxceT0oY@ypfInYkpWvhjqnnKNFLPKd|S!*;sB`=283&&$N9al^s z!YIQJTM3k10Gd@N_A{{^!tI2Zq>@)w+NCLMMB!0hu~mULku5K%UnbtFdpy!RSl=)9 z*kDK~c40~jj__B#Fhv6S4Xyvdv`=7@c6QtMrf%(gY%qTs8YzV3rU}=$2Z1vV*mD%P z`py5vJz(h{{vX6MyZw7p^8rVbuGCTDDXrbWKL99nd~fPp)K@N6XV>HX@Vf6!-LW2c z4(!GA9>8wEIG_N?0aAcwz#PDAzzo3QZu9Ly>mGn#9PUNfKENKpZooKT5D>?^3VzLi zL%H&>IPQPr{oemUJo`X%&;Nj~=J#+GWdxW3IMfv@C%o?mjK2(Z3fS}V?@irr-Lvt` zcNcQ@oo**2<`6@`^auXseZOge-!ZZcPUF&GkQwS7?!zcE--rFc6>uQaUE!5>z_j2H zWXW?rDM z5UZD!MwKL*Pn{X1>_beiflfhLprsnioa7;z98?RfV!0|6$aA_2*Ccm!WW3x4*u2Ya zNM`XWf8-SbnbwY0++_{i&UHR9)&e6df0BG!m*y9wl1(ufo*Qs_hJV+~J1A~g-P%Dc zAuP`u*76I|+CW+xviwYFZ6K`;qy>EbF%hiyQb5OFB!G0&j5f6F*qv2H_$?@>7g@)vIvjOnfRx|3eA+smx?TGL)f7Yqsl&0E#wty=4K zufvH4#}rSfZla4ZT9I)yCRIbqRlaa5)_F#S8e1B!pVj#Y^g)sd&xnlBrpy*Uw2?e8 zAgb5{;cxVN#{xr4eaxKZfV2)rh*Y-(rVPVFH8?jF>jN%n!}vyU${Mb(NT3s_i-`Ud zIyUc^hjkgz!=iy6+M|fYXPdGUZB?8|mpC$=pifqd)5@8BtCJCl*XA?SmsRy&C*BB7 zBynLL%gf6y7|Q8@+uQ={Mn+M_7;^~eNZ&TX#wbcT9c)e7#0Di0(lP0Y=R6EI@l?pR z6OW4%$#xlzlN8Oiu(>dx!3n{PRVE}zE7{;iJC{^MKt1WOW^w~jt2rkeYDwXou;NHe zl~JNN5!v-nG~7-r6~f~sY(EduA>lT?&gVh6-9UGS zeQ4Uk3Q08na&AV;4F~D7bdjR(VehhdR@K?aGNaLx1Cjl-5)C1<9{Ls`Az$!pHU?ZRxFbvoM z$jo|Z>PkQ#Uum`XkFb*gH1`${8^dm#+C~!!p888Ph`v~|mju5VCI(!=1 z9pC_9KVTnVFJKQ~H((r40OSBEx<{bfd=xmOF$Z|Fj{snJS zzI+?SYgW97H%QK6JmJT6&<_Ox@$CxC-TGi1)z{@B)vsOb)Yq*m?ob~W3rfSo;~K!@ zT4ZS{g;zgJK7p3MVabqxNkTGYw~^aIMNhxBrZmsygM0dZ4kuTDJ!sMS%7ZLYU@%!& z3!T<^Qbg-TM-Y=34{708P=P7JcS6w=Ydg;TrA3oHg+p(kIx#C)E00goOg%Qrv0O6M z#?tp-0h?C)r8G>k%JYX46~-RFEgOjx=^BBFpLt+&Bzb9Se$$wz(e6VLahDotK(&bg zk-CdR4dEUfQiBN@M|pT|9czhkeXNKL?U!L@zzM9cZ-|N?ov<*P9%>p#KXd|VPbwNH zlF%Xe;kR!;#)&UrzJptE;NacHzwo7~|IPPc?D*{O9U4REQmH}Z$;$e&@0J^(>hcOqxXTlQaS^aVq{50&p>CQnsrvRRf zbR2%fxGA^~0EetQ$GS6~Wc(TS zzk=&4#8E(egLMY>Uwm-t0N@bdFkr^~gHy8sa{$eNHb4QO`2TBnC*oRe)0VTY#(5jk z2VTKmXW;Sxb~@#u6inGu#~gR!Y3E<|+^K&*`nTWz=&oJm^RC&#Ot!V+mX@BbL`SN# zofG|0{F;DM3rGSk0;H^aCfo%8-XKy3I0?Y;bFF(8T;5l4B48ol900>l0TBOW`%WY9 z3{Tki$HOJvRrdWd>psr9r&{+k>z;1iORf7Pxcoj1$N-)UxEQb!!1&Jq(En@z@t$Da z)o|(0`-X@&!@9>?_c*x3zreb*QqT9<)_tONX+)lM_^StexHymXxe~oc83*DUhr0*xeZal+ivhzlO({J8w}3R`w5p{kj>k03 z`1HZ4AAZWXe15F(_fHrakB9qpOZT1A&>u(Gz{hR8cs>u%;NZ7ede>W=^)~Dpyb}rt zpZ&?l4x~Q_I;43$Xx;($4}iS@`c;bK4&XHdzKU?BGiP!Cn`t@#x{ozYdr+_Y0CXQK z9I!NI+>UVqaJ2La7Ps&pq+u^`$3KHO?m#`jJ!qf#J_paY!R2!$Xtw?b;I`da8D}|Y zoO>7M<!QP`rKi`GDgmVV^xXwfpm+T?O{Q ze=lGkpa8fEFb=4OU&)`}4F2`t)cn6yhTRCe6|fI*FW?a1Q9w2PO8&De(9VH|!#mj7 zq=GXG_pqGco#j0VQ{u_qv6#P3#UwrJ_+w@qbL=rQjyv`^;X7zodbk(72KO^W?_L(< zB2p-meneuK(%&q7n40~>Gwt(vfnV*^MHkPnt8ZA)*tAeRm+QmS>NWb9k%#s8dxd&U z6@sVXk(#;>?*dPntPv=E*Z>%shVP z2{Y07jz8vvr>EV&qI?1zsIPm{=S7k@?%Jz z_ig9-JI?a~=lQ$N^L=<8wcp6_;E!P#&huCCyi0sN@6Ev1=X>CPm-W9F&ypB8Z$`cC zvi@(!^Ii7&9e7rpSu+d{KRX%EKZ46=>27k?$BYx%bk}+ugUxj%RT9h8sl=k;3v25FTKD zfR}V|LzrqFR;ViiTO;4~U>9rDw`h3jF9k2XZb+{i0#i02tzI9Ox|nF7szUn>1s>=Z zWeg9d8!*69$F*^xuVqR_Sd6?$URpzoY9rV`_IacXLS`>1M%KiurX(U%?t)X7#)RNR zg0X@G^D?yFf=?21@kgE9?Nn-kom-e>ICWMPe8y9cxMA>fc)YGn4kA--KUlyg__aZf zUWc2|#3~uZ-t)2H(Nw^LU(*Z+&n>|pe@%Pt)LBS^=NY>XFg(TW=?PqP!-!fM8dx^N zB_2&Tzh!S(0Plx96UrYrhQ4Q zO5%3SHEUa+zOJpkqcd}PS2owZe#6F1SL8SMLNRYk|G+c14i1@#XMAGY_Q@UBaSm%< zw0OzVWpzE%5Qtr;N!47in~-Sc{P~0uDqt@>K1I+Bnq6u zYf5--LA{|)QXN^?DZ*KCspGX!#uu|_FuoOp_}gI}3UY|S;(Y%)Smr1e1UG10r%~B3l9C^U%pb;k{kb)zxfjgxx{9!*1M5^ab>eLdqp7JQAmOJ( zB&9T~R_F8js~}S}Y1^A0LuL&A5z-P#Ly$)l0COgG*=V;a$nY$b8Jay?bLencj{uVZ?`Lzp(*ZtU0f6Bj0%Y)f(M3LrbprPpZV9>+?w-OmZtU+qta`{TGSZV- zxV~Rg_F-_*lb^+rYP`xG98tK+p>m|F(WsZB3NU%~~Ny=X33 zWHu>A6kEItXI<#8rae#^i32_KKiYR@nbLe2Ejq!jow2xBz(rQ*%=5(*Sp)lO&2G+kWLhlx zVpd_E>-+PQll7%yLt&)1)WDEBL$FleKRz@F>|8&_6q#5#0_eeGm|fhV<#vIeF3`I0 zxW8j$V$6p{M}KUfw6%Vgj87X9T^+3*Yg#nD7)W_c*k+#hW+9Wn{L1OI-rE2x0iQgz z*1PnKTJLPYVZ3)0pJ{GYW2sAdLk}-c6X&(u8$|+Z3iB@TywxacQ~{#EI5E--tDi$7 z7*T2K8J3~#H^A%2wY6hYdKeXI6lZy3Bena$3(#981~fzy7sfa+IK0nqLd?eEO=?&4 zTRB=wK5;oN26DNp3Q52Sk2hmN)wCYU2@F=e$a*-fz`<9Y=xJ&+>wI zSW1xYimMpSb(NA7lYii0+?Q5zBnE?VLn~u)2ReWnFmLhK6^o;Fi9s-27aJz3jCiI8_B_}Tq`B2<#a=cK?S!o+=qO^o9khk1#!Y8v{rT&iH5{p zeG`SjTs<--cCCYQ;Hb`l+}wwbx*WxbAw!F45MHLMbK@p_tp5iG&~XM3X<9Dn^coi| zz+{J^co;_wj9-hoz8i>7$O*RuW03Uw;LTR9m$Qqsy0ogt>C-)o zyNzXOX#FC~MX%MGpU<_nr`IRiy3^j8G)}yf5jWjlMi;YqZSgN^xCm+OM*iy(n5oCT zn$l%hSa!)x@Vsc9w=j=!z5tqG3UuMCX^y`K$Y!m}oZ}8}j5ipSStzDtgrJlWX!D;I znSI3~3O<+6Am$3|)b!e@kPxilZSO5^wJp+f$M6+4!6pq7;`NP>f`{R%r?e7zj8APg zdsK@O@;lJP+nTO;(1= z7RXaD?aSCwR&Ze}*CrAAm^z7xH@poSHq@~nTdt+M>`oqWjbE`%xDcgG<-2dzESwF54zeBKE{FK`;>Ro{P`g$yBFpBqq@x|=T&Wc{%yDj2j8?F_B zSuWVyz_Z@rg*15_E(aZqshLD~Hf=7Qj<9#&n`4wX+d<UEbZAqv#?hyo{H~WYR>*wq7BwjR;(Y@Q$()1%FY( z{Y8|y)XuZ33CS?EMr$dnTv5|M5eXqaCR4X`FdgiyDeSB%?F8~pZ+=Yy|H(v|wSt#P zWV1|3BAGJ%6#S3Ow5n|hflr!$Fy5Ob!68!*e?vXVpCy6nP6c=Oa%LBK3BjxfZ6msS$!DYXld3 zMv{gg$!M{~nE6&24ovFZxwWJ(WjLm5H>?f}qD?=hXQTpWbT=VMX%T(Nk{8Pgv#1Ii z0d7hmZ%Xc$D6_oIY(w*c1!yk0wBLbKy{p@Eej^$cD1v$BH7vG)n3bB;TKhUFfsiUa za2u^n&KfXUR)QSdn}s^%`B<*(nOA0?^dTY{D2)tr3boQ_vTQJJ36TSIp26~mAy_1$ zRFOk-uQJJ`GhI0>B_XB=CKWXF!iY~%KBuW+EOy2Ic)*>(qT4nsh%j@=>X#D$Z%&Y9 z7`h&o1GBs}#c_(b?OL6N{y8%scM>W!tNgCbvMq|$kPw)a2mMj$ut7?RAu2qRha3bn zA=0F{ZI&CB%_WcztVSrjK&7wh?DEJ?jp2ecxXc94R1QLd!u|v6f>3Xk#R3Hhu!1bN z+h1U6ji*Kt4+k7`1$VK4#FRXw4O0aZ$_Aj5HAfFt1S?w5FcyLz(1ytRawur5A1(v~hLs}pI}u{w#@8&edow={)rw$f|oNnJL!BRx{f0iW=AUulQcx97_(4yCmGwGZ6V@g9%wNsu0i);?*(NuYpKZIFHB&s z52A=74e~XN!Z2S%KxWo5I@S0iy%1A!ST#4D(AYSmi%vOgBUrym;$F(~aXO1*qi!#;}$r;u>d0?kMk7GYU?Ov1ph#3C)njC*ofi)Mk51oZ&6 z0Sp1=737TpCK4y7Xu^Wb<{)*mhC`+BBR+<{I$Iz?p0|S?_nTl;gM%$3$Ra;wIk{*4 z5g}SM_IOz#x+}#YH`~TJ9D_l?>;ORwEK5hyIhKdJhl_)LZ8DkU;h(JOx#so~N`pz) zo&d)aJLeXeW-;v|L6FTt4!)qdK-r~{UzY8R#ugiBp-0|JjpR`nAS)aY4h*G-w&HYC zh`zDc3OSn?-KK1lTVMtOW-R1{Q$F(9m!L77lJ1 zE(z)gogJw}*Cy7x;B^(j6>r9VJX$3tfjm1H+Tp;Mo%7@4djdQF(ixeT(Z*;i1^kWW zR}e1pT`PPi?XVkRAH}wz0V5JX&2a$iTsL1hQ8Y;W%-D@V0hfN_E?rzl7N5a&vf|Wh zcqX>bU==Q6X-ydidt^DlWDL{)cHLR))qb+pJMf8G?;Z<2{4T$v*8B7AwcdLH8$VO) z-H7+6!~aEicj2R-uJ!VOW8m+@b>TCgs`V6Z#WP_&;9|h}fNvsR!j*s@eWli$`BkLl z9;{;l&$t(1cN>3(o&Jql@8)k!55!SC_gTMFKgDtV`5gDJ<~NVuJ`^w^Ep5sD2h6gVX zu4%^*cq^|Le5c+lCog7?dawu+%wm)nyT91$qpAH#-hgNyIyx<7tcEEh^z2Tc+$PEW zVeWKV+$a-6_Qss>B_kXS<49!2#tbgI<8(m-G4p*6u_6b--be<<;|IBQY`ka5na*G} z8nQUY5?Jt?qEQZ|)v7%*Qqt66KCam&WI%z5PYIU!T3nys@W&3-1& zsbp}a1WN{+xn?VmIv|*VYtYzHzeOzVS10|&OP4gGHu1v(7jjn2TrsBI5;kjG^2or> z=m~k5rCBTC-B#obWkrAz!Gvq|6Ht$KYhV~xDUXcdqHzes$NHezz#er80CdsK^t#^S z@HV6ern|Ajj6i?I3M*L&8Xk1)VA95jjTjTlq8`-8dSybr#O`=oTWiuLs^!tn;cOm4 z(5~ohZm|~NHKizewhO5*8!eJP>R(w?x*BO${xPA@I9wNH%|!EJ%G+lTCT zfx4n$9AjU!ixLh7IMlr@Q?7eO^@?dV<*3$j(18mBSQwZhl}P1sZDr;&t(o+O1f(TQ zZjmbo^SwhEnL(LSUSwCUqLaavz(Uh;jiNvf#u9}oAaI1+^I)6vSaNN5(~9f%umOy? zy11(3)FOhk=p1u_?blX9$6Y!W7yA&DHYjIP5fTPX-X?2C2eukCnd@N9KyV{yAyaHu zd_WRik5OJ>R`8({Yqqm#g^uNcvgfTa$SK2RJR`mx36Ag7 zo5R`gO6V;0P!q(q#W)t|GIfjCxB+@|fwYP;6?XDL=qlUU9et@#^8D*C-;ihWd+V^` zEAi2km^ZL+>EgQ4-a2T`PE6Kq8J-~LhMUz!Mj?Fh28QyZ@~7mDj*KppKP3+g0j``H z!ZjsBn{nCf5G?WY53U?24q~S9#zBI4_)mUoy(aJ97cBAG|Gn6o1vm}x7|0<-`w1Ec|M0RC=no+ogFb@hEZm$=nny6^s*Ve$A$`#;IUV@-=2 zKWRN_k%5)g)%WRK;#Py{zWZ;6#p5UK|0EBOH7#!Zq=i1cplPF5k7>DTmv~0YJWpZf zCFZ#weuTeS_ZjftxO|@X%LM9WL@_zJXZJfP8x4VeLPlrNBaIpPJG1uNQF3$CLNyyo!a4nLH)}?Av{Y{{Ul7) z!6Wj0_47I&)i&m1?yqTVT5{zzEBvc#F1pfRaW&7#l)N1E3%re~)@-J&GwF4tH}s@C zp!U!|0j$Z5S5pOHRci-?$yl_TtFFy_uPc8NF8QsAq@P{od$m}{;#3CKF_hN&P=fGb z?wgBZ!AM^)4>)P)SwM$iVzUt*U@QZLT4z549*`D5H*FZQ=6R5W7smT3ukkPO*A{X8 zvj}fIzcuUm*>pz=PaUf}8@ke&woRU>5qKik_WYXqCR{!U$vBrRvh8AbU2CCd?xi<& zX4Ezl@uPd3sml^CwKnrF~r=M7xPJn)E zJ2d!x`MfKcgZ=45XB+=y_$S$wqO&%aHIBTkUMb1xFHLut8x~}Wx=r-7s>o?TX9=Y3kxN&y& z5=b+mIH?O&#BMOF4-5$+f=7>|j+0=>NvSFD!5#x8Y$%eqn}dXZqL}lP+DdI@lEKb) z9G{L=9v?vimj-OtE|zA9>GCo6@yS=>~=i=bv=Eb?-P%+TW&Yp8~ zu`|XHclJQBbU6m4G0s9QF!~iioDA<{LneXedM1(zLvw{;Pjnj0zmy;YE&%W%#DI$h z+`*{w2Q&q|fPYaS*6L6LE*&r*kOJ@r!~*D-27Wj8^G6)Fe|Lsxf`m2#usr^QKdVvx zI>2T?CZMff7cL9t9zY(T{a16Y0On!9@)q5=<1kMF&I0NK>H;(YwE#tcfBWm8X31Sf zx)Q)Gz-74C|J0o;hy70g2cAGxKy5&MKvO^~KnH*^pc|kkzzN_6@BxGZq5$IoGXaYL zYXDmTxqw2zIlvXbb-;bV6MzQFu7Jtm44k;AJ68{;M6))>lhHVCVIuZgKsZ1Kumf}l zbO1B~I3`quk7EqDTYwV)3fm=^)#Lr0dlk~%9a}Z;@1?nfI7a|JNe0{i!1v~%UpbDu z5QogU$Zrf_1i%5H9Iq$b%>m`#=?mp}|F7&1QIFezV!(O8alk>qCcxDHa4aa-eT-5b zVM=!8ILdZ!#Bl~#SBq;@%}r_azvHKzmlnbyl`YUJ1Q|}+@FBh@4-5#3BzbGv_2YQq zgeYum;1B_Uf;M4JnPsG^a8;$W6p=JQv|wT##=JNN-BJUu5cywOR@joUHVcgG#*Da+ z{S*XC5{jT*Um>k zRS6v+-Vwz&;sW6xu-bBr@l|}V6`v%?lEEiBiEbGnv%txiI1g2qn1I2GCw!17p@nyM zvH$Rx6~$t~xT?U-MPy}t6nXP|7OvQ-5hEZPD*sL-!diY5rpN#bI{5#9qy#|xjv-J& zkAi=J-8ex`C<3<s5BA~t1k4In?*zMrEfzMZ(%L4sCh3=yT%L^g&H zI-N5Xf01E9ytKe28C`;i%!fpIBlfwlka!b`Vt5meAb7XI#V;q~eE_?Gl5{oerWm|L zj3!ZECW|V_=dk`mM=}C9&(=WHz#q1uC@iVehD=(3XBq7bO%B!BNI}_0eS>gUlR!;` z`(dErY$&p(LyQ0G_8yI!G7?b`v->B7;;RIH6Go}03efl^zFrcK6mByZcM&h~rVtHd z?IFx~^a3vjidW|YXxj3RYPY7li~x4U@QtJ)D+0G-yo|pcT@xttYbi?wp(G``D^@CA zJdYOyqZ^{A2sz%!!QiXU)WF_XGqDR zxv{E)MvOQ-Hzmqu9f^gNza!ztvAqLMopydQPY-+PK;lY-LIl?FSaCz*!^KM>ifpU6 zAHrQJUAO-@GT542?QK2%++1CT($Jww5UV!N#EO1HZAf~N`T^sfzsRAw*QT66NXw>i$jnHLHbxM0<((7Qrql0B!Uj+6bTnc#)5D z7Qh`4i?C0PEjjNdI6DB$0lfhyRJ(AVxM7jUVETlEV+GGD;nqVg@aJMa$cd*814P6q z_&#r?l<=~bnac$z#UMCfVj?&pd_sf%%Ku(PRxGk`_IykJ}vN^^~5 zAQ-Jd$&V+FU{YcdK??@ckgpKY;TNDPg-|@2WK~3Yz85b(9;+2Lb-XGZ4cXtn%oDnn zAo2gt;_~fn z!Fp0P9+gWGo$XxySv*(IAud%i{HC`Q3?Y2K@tyB1a)}ViLz`zTS@?^2QEnhK0J~KZ zwBfLI*p>L)89R}}AB!X7QDTc_)u7s3KN?dQEWAVkV}8L{6GmBQTsg8uoL|1W?3kFZt)3IKNmFnf$ME9?Y1usgvN!KQ{GH=i@)a#Rckq7NFpb#HWhOGW#36@+AQl9kK?b-a)wf!EG5(VuwU@n;Y(gc~m!<^m9^if!_YYwp z|BLt{Ri5Sx)B6B45vQlB?*zujgeKq>LY!2HuMX%@OjtDWHY#c$mM{` zK!=b=M*J4*E5?pD;ml3Cn3$P#W2U(|2WA4O7~#NYM#mwP#{VR(Fb51US7288k$+pv z3&B6VCFqEN902_iGA+2sE#0|0Es?GR<{6pz$q+t>;_G!GQI8i>UvfVgX!00f0|gGR^TxG#!&RHeM|Y3u!;dhB@pW^R#;K15+##|KoVBW-z5f#v1mo(1ju=^)^H%vJy)Q1jL}i>B%v~p ze}+WFV0{5QrQof=w?&$y;4e-d#km;wNRWl0u4BC{o&_0OBQ8T(!I*k@Hk6b^gBoY~;W&x5as|8NI&R~&`<^_SN1Vm#RT4+{t!p%AVr#OH+_+4f&W=#|L~Do~WFixZ?fsbGGQ;M+%0KIS9VLM3r|8dhvc6owd9 zHd?{>)Pn4z5JbexF6bVd1c1Kr<52uA#X?6!mI%y1Nhc;y&VQr<8@=@WE7NMjFAxs= znMkC%i!?6238*QcBFI}JQF-O6_iIo$sG6_BT1|p_c(n1$cgm4 znlcI%fBs;N%!V0F*6L+ct|p8q%a&6bBf%l0YKfL?5TL2qguOz6uVH*)0!6`}m$L_l zDn%oDKh>QdlSEdk9P&cT3R6u{6hHNmrjmY0BUR}>1YDa+O;cr_NEO3YF|#N!FIR~n zOiQ)6=L&5^%QNd!Mhg&zBU@RpY`cyo2|uDpqUr+uE*vclGA+|F6973JXcFS2z!ik; zQE7IO^g6znJ`~44UXP-Jk6*F9p?xvk!z7)6$McHoAjJtg^%R{zKo)27l%1Zx*&6V5 z;$!cKD}0m41k5@cWm8uW?SX|egq8$g`B6tjR}KnAOeTZDx|E$U$e$lTYC zy%_J=U~V$mCR%tI37zel>=uP-8A2UwX*ma-3NPxR^e}8faEW3Eptuh4Qw&>SIc7?l zsCg~Il)gFDBi#aLoCNzEJ5mA_^jG)b< zgKP|r4urZ$=+?u<8(l(DgYa2GhY3l_#wsGPF)M6W%A=Of-q34+)sTObo62&KI=g@= z2JM`H=7rd>GU7sG*7Q4j2cm!Xx4aejM*um1^8li&Zf?t;-6+8s*eT9Ezy~2*OJd3C z1G)h!5ZW&H0J@)w?zw=MGV26!T$6hJiWvj7_a1%MauYt-J7y9B!(%qK8oVg3R* z0jLT7^HzYTu!kc*YuLR2?K<#oZ<0r&)<{%YUVeAtgU7Jtl(=nE|Y$|}>_M|1rHqB)0a03X0uz*0aq;4rlZ>MyiP=Hytn=Fb}W@uoSQY zuo|!qunDjQupO`qupdweI0Lu>xCyuqcnWv{r~teNd;)N$STg}0!o@x>WMwDyl;ZHt zRMG_k(~KnYHp3`LdRP$`R9!(`i{yJLNYfl?b0MTw%mv9A6EII6;x*&|fl-7@q_zW0 zBoYsHcw<~JJUyQ9Z8~MrRX@9d5vlGy1-0|IQ4ucIsjfgj=z#)WIf$aZ$eX1VE2CUN zJ}Q&(@}uXuaY~_jlW-ag@)Am=&usV@_cVRmeu-R+)n10_Bk`lxPJwQ~|+d0(FFj zDTK9YJSoKk`o{2LJ|Z$yjws+-mBb4%p>pm5zK!ihQO^Wc3uCA{wKnE?zrLwzH8QNV zWN_s$;v0Z(wK()bwbsI6gUEqE4Qb2(TPDS9M8Q(>Wt1>rn^jeVk;pmMlN8?d=GaRD z;QC4kh!2X0U^Fov!Dg2zqChNh!Sh`0Vxx&Mg~whL$8CNnMgg%U@*qzGBSIT0D9}EH zky|-)nD8SM4U}EGd5>NV*L9!)tG*sfzVFvr@ev>J0vCW`dnXtRGKq6X;en zI>eX~Aw_MD?;b{$`z9XKTtM}vaU%Z0-3__$K|Hv_ZUZm_=#W3)?|x>Mz_(ltxjRD< z7bgAuU2sPz!+nJh?kQ|}5c4VMSD7bU`=NluMht{0bF&>F>xS5ii_&e25G1MPt> zJS+301yE8oAF%_GUu8UDM*kox4&0H5F18V`DT|cdCB_k#i$KNhELtQ`p+f4Kp#r2E zB_rAmDua9Si@_;3jOM(R$4Ht3pF4Rv-QxO&R|m<{KCi6hM?4zGcM& zFMo9*3?S-2=uM1Hz@0EpUkH*%z=>C${_nm|tOwBm`0S~hF|4B)+o4dtpz#VC!bw{< zUGt*G#u34|HT}=)BHU=8VOb+!LjSXwQyE{ecZt{S3JoQ+YY>f@7W#N1Bnm9LeIyVS zlMKU+{%Gvt@azqyYEtu|s6*BH4$Xi})0kK@cJ097{+YNH>2gjnwS+xTAU>k&M7k6I zaejjGIyotc;Jto4_Xo3k5$b<7p9I1fKUTVnV-)RH8Bd%~-$dp2CB#+WMk1mi-UR_4 z_;D)bIa@imy90v=G*&#wfYB+;oA1_1_}XuiDC#yC9m%MWifJd%yTzpZMFjRjAbJMi zQKr42yTnl@quU%@lo_L!NqH^Pq=E4%uBSkfh}NX&B-9UAVgZ$k!D%sow!!ciFm+&k z;R#}NDTM{WnbEPpmWf*xc|;^V{s9aM*eRw;)ryhI5uhpoY+BHeGo@ibx*~|rm}sF) z`~Zf3)XxXKnbsbx=`X@sq!^=TQ6qqqKw<@Y~csi*MFtEGSfC=^3>D z$|4p@75$4}!D#T32|)J$6)2aXZ2w=CS3O^`OwpupvR9AyzjBM^ie+w^Xvh(mP3BF} zO{Qd$Ayno5#0cX6 zBpCKfN4b*mC}XUl;PamuV;n3wf3%~{e4IUyAN^A1f~P4F_EeM)lR*648B=L5s|jBT z$Ens5L;t-w;lC(<9u=np9fl|$CrMI|>f$W(FzTdBLWpRsoWKaNhOXA6>%HLojA*K9G zJG01U!&qsQg-C!ciEKj9r0r~ncWRvNs7VImng}|a?7h(fwoF9Z9d&btH1|NznT&_f zyL!OulpWR*dM}J#fPe@$TBOr(Sx885vo2LS1S>`UD^S~+PAe@E$7AS?}WmshT*@c!4o z(@vJ$eB_g!j`dr}D}5F6U532`?sS+0;_n6Giof4!{Z7Fhz<;rRU-&P|kEV*);64K7 z5Akpq$~oD)pg(QhJtdxQpl~XzY^k<)a&e=%->VN>S|ko0ZUZS2tuvxSLL-J=c>10v zd;H;>Kzb2^JW)2wUSQ6nBZ-2~iwzHo$W~bzSHddGucjc&5XO%oWLxFM5tfYAL}`?< z&r@_pp4ZltR3Nt)h8NZ<5`|)>>KY;YC(Y@spRO~&>qAcXM75Q!F$Kj9x7{74O--9`` zllL>rhKX>SUBHDhc@V$L25#|pfgwXR{;Tmj{J$u_8LNm28^4t_5uO`QB!4Oks`Hd< zaXrOZhZkk#J0E!kG1d+E3sh}^p$STMBN$CnV8<5ZZb6wBkFkmr(8foLI}?i*&RsYQ zD6#FdLI#)$#xpULbMs z;u!&o91#nJ(AX78AB?v}I3ijjsSKOvAU_v&3yKHnc$QD1z6o-oEDDO{D@8b)(k3CY z#1c-1-;dMF>^-3~rgFDpTvS95wiX!B_a0*uYH$@jg#*gIhxae=Od)5T9D$pWXuv124z(;Yyr-rt!h_&?>bb+L7Br-OBUVSu>To)JBvS>jR~aaG?=HO)DsJwrtGq_m)Uwa_aht_eZaXxND+F}A=eA#I#LfiH!s&8 zjt`!5p7F;jbr_SJ@Zg_)Wp>68C43IYaA@|0robb$YEvKh| z@USun@cbi|ip&IMAz}{vx<`ENLPX(RRCC;9@S8qQzXPi{yTX^?`XhieK8qQ|f}X`B zJ=nbn=@u44Fk%_Q91TiwJOUrXg(o=oAmpxeip_VHaQD zZwT?x9dUy~zqm6Y8Zo&*pkv2E(x^bIIQTy3O={pcq_%)pGr-t{`JGB=FcycVkGSZ$ z@H-Jm-D2i+NLREoWvocUX1OwRE8T1VFd5c+UQq(yL<0WBOBC?8e!TJpAp`LniM&Wu zV00W>Nz7f?VMGPtv<0Bg>5h+<3tUmf(_Jtf9F$(Jb)|>H*m2{z|Rd5pmT%6XU2duE@KN*^1ZeaQw%L{_o=B6#7kq%KV{@JxJckpjr&jpQ`-h z1~|%E+q7-ho>6N!Z#O!bbfGQK*_C6Ce%J!hwYJzgjR)Fwhk|NH@SZWNbWrc!9DmJ1 zb5B`7jvZ{N^tK5dE&Ibx1E1VJu&coY*^XP_*@gK@V4qoP!Q$G$ z-Vt%sVWt4O!(Iobg78Up{Jf+du2A9!<`$+^J~1R9l2q$pxC3{iH4EE5PIVX;Y;op^ zT=ei4&|Lnh4tgh>F$=&GZ#QA;;=VV;gir-~L>$AF;$r&_iX^!zVI8FW7*2s@A=W@5 z;=W8jexjgRl06*AUXeF|ERy&N2#s%KPS;v&1*hCa-9%N3F*PyeOil2|Sz!C-DJKHD zCmYz0j)wjCc9?IAev=w;={D#mm^%Pju!oa>U9N_!rv&SinTh!ip2UrVE_O*zBd);O zh?{STH2B%{Lf<+YaXQFHV#Nbr8pjm~amamuoxeB@-VkH_J2UaWFP~8_jE#ZTY1KA1 zCblFJX6wl)O>`^RyA2!)OCUWyfe5`ht3WU@;Tcw(y6DX>jtQ&*IZrT+iWm!0sJM$k z1Okf3z@r9gWn~;iFps(OyLYAMH=-J1Zr|*4G%h%ku!vAnm>w2lN;Z>`v0zPO&XKVp zVdSR2vBa>(e92}KKSp%IW;8ZR&Y2{PP2fzz6QZC}9VZP~;K%=s4G!g$v3GKtP#R@V za$8cfj3VLGU@ZUGljvUdhn?Eg+lV{iWyH+@*Z?@d?ZG@~48i&VJ2%XTdo{EY$X(!L z#Q6hs036_MDDnZMgkdZLP5}PN&vBR~=K>f47zPLxOgYR^fboD7z+7^Bb>SAlOarVH z%*`;j0S*8P0hP2?o;&@Y)PcpRfniAWv}(T^Du40g{vzz31yw8U|Go1+;o+}rVfTnQjV#7oSnIL3mAqN@C8ZKeH`h88V!wAa%9N&6%1r_({ZHC;EwwN^^!z)n6^ePwefuiQh@@PkHAKw?j zL;|KS;Yjd~r?$|c0t>o`ULzenr79i^C?6UDOy32Wbe%%^QT|S(sFJoEe$&T|94w=O znFP_h8hjinc`4pv75q>GYv{a=7r6>f+PKT>7DA@_@h)Ip>D!NIHHIA%t@wFN~;| zSjITWxQ;mwMpou2fg%qyBvmL24_ne|KMg9Q0a4@dr>7Q+hkZgbR)c0+XFQ zH~@CK8#7_AgP5?#Lrl0X-Jwo=gs-nJ@a$-%WttZi;+G+7Ym@ez4M)O!?5#JNov8A# z_J-ZME8U`1Nn*lh2$YOohx@C4+>X=Oug(A;0+<180PX;PKmp*zDI+coaduoV;$knt zeF^a|BM!`1zM2!2xk{)Jbw}r5rb5P8QEx@Is3l)njz5oA z(jFA_g%GASKLM+waTl=PG1fg$8Gaa_mcnmi|Eu^W5>Fz^L3w|4XpBU7bRA?NI{Xlg z9b9@bc+(jwSp?QYlAEUWo=6`unS1*nm8$3Jzjg6bp7hFzjHn7-adc0|uKnrQCtL`C z7*|)L=ZS&i=Uun#@2e3*xTiBKG|ek4E*t--ARVuC7ut|5uExDk=Tlb(-*NGP8z|7Fw$ zis{JO3%ChicNPSibVwZ6sXbJWV|gcXBXA#j+?pK02G+GXn!@-#U_ZEx0;v!h4l#XL ziA-`^S!5d|JCdv?oPiIkq=4`@Y{=FWfwkGor?@FG=i0|J8mFRf{k){Eo_=6-vID_F z>~P-G%fs0dlye#&B!th);PY~0q{AW_0mu%-kFj{Rhyh;>Ke{am!Bk|pl~}m}_IQH9 z(E;-0c<#Z2vv+mm+(D^ub$7)w9TFA;ZArx8OJs1=69iEf06iZd(8vQ~I}=xJW#}+h zQ1yMO?dg?iUYiBy&da#d2$G817>5x7(I9?2jg5t>3*HX2x01J;=?18jkcaASnN(7l z8_6M$#ap+)SSyDbx{7$TiPp>GZ0IksBzS;CiU<(e6H65R#?XtYMC3%rnt27FP} zdqdgtueydtgy80tFyttVG!ea&bYfSuOdbWxDpc&o31w3!DOFAw@{*WH5V?Tfx!FRq zkhp)qB4{2KiB465xhgKkZNz^DIL2J4Q=o_i&5m`I23BljP`tUhHOSUdJ3pF9ezu;_ z)k8XksK-d30fhAEwNehxc4M@%k&W#D^oB8{1RJx9vt&M`FU16c{V8l4CgWp2EUKv_J_Wpd%%= zQif_$#mGTgEBIRS2M8KL>^ekHFhOA)6hjeb3DF>vfVE?b74=Wh;30=1Pd3Zq#D_D* z6~>vLl-3e-FC-rm{Ge2nUmsZheA~06*zHJekCr9zwujQND}F|hadmWqEe7-sLU4cIxG43*n7BPRq-6`;i}}z$`bEsDl5dirM9;A?w-{n zOJze{ZNKa3*WV3v(aN);AYlR3+Y;ogyro&=zK!-@Va=joKVV@@^(_QUg-aBU17(;c zt!#aUx)AP4SRs^MeGADiiHkHRc@s zDvriOl{j%BW1t>QU=0t5=TQ%aiVI_|5-Y4e#=lXlMD$#-yGanO>Vxwrc}y1!KSl=r zn|NIn@v7(wQ*e_pj0O7#z4W3)c?RKGM(?BX->I}#;Od`HEwH!|i`rP$f#5+@&^sA! z;%+}sluuQfrQeR=&P<^j9g5g75wD0dkzqojB(dRf0rA)^K_BIPnX)aAOEI^gRqLBF zr7~CZ|9PQwf)ezND(1Sl0f=~;(ibyaK`BiT&nd{-NRZ!U)0C(RkRIkWrZW~ge4kP} z?BI0IAmSyYK$+O}luDu<9h?{PB$H~mu~IR-E-rQ{_pRzw>@t{G>^g(5UgaWCrLEZ# z<37MvW)5{-q$!mxs{E2f%L;8e-vld-4-7n@DM~R=DqCDc%=z0_>R10d zZe?Gfv9Mc#a;hXJ%l8A3+ys^Tm@-PGQQnnpK-ff;FC?lrpN{3g(3TW$&CZ(Cj+AkggD1Z8 zpXc+P-4`d&D#ue)M|u2xrz&E3?Da7$W}xEIY8R9M?Sx?I37DX zVx0fKnmbU}>c8z#mRvsI4B!sn4L~Ovx&Q%I05?DgU>x8-`GIuJt((`4>kHE#VAG&8 zrvr$s*O@EQ?#xN*cIFD|bmn$6LES#%PRtGd03F!5Mx8nTFSu9x3Z4;|It@E>FW_I` z-kF;Z(+uzfT!~lmL_5`AU`&KX`2j@}P$<8FQg3!)5d}gIJz2*~JXDK?Z_rdytVyIY z5QV@6in}bjVFZ_{kgZ=os1SmrBZs>;uBR9SyqEa(!+W%@68FLVT%2tsppr6A4(v_% zk#J=75XP5;qW`1c^oe}mLH*j-bWgM`+OG&;29N+^0XBdXfIo!;=F1QV;7)#k`G9o5 z4nP4Q#pBzt^rOlxF;h?M9H9Mt{~*m}&5lH=&#M?2+kHdO<8_OJS9O_jLwkMB&7_u( zuiTkYa&f7V%O1@G6Lu!68|OS+(Bk0yV4b}!UP*S0bQ-nqb*VIe%1@WCH-B>PR@9*E z%N56`UP>L3CU01TF2B}g^zhsE=e4fh z9NPQBmaS$b9jv+1K`DcZPc#lFI+$ItyLHN4V65}#WX{mE9En%?i|%Bdym?Ndk0r{ zy`1xC?Md~q-9B*j=5E$p(lkxGELUsfMC0C38cXHD3si;&J*XHI85tNL*S}^KGS!s} zeD!Rxntc2Q6}>|h8k4<_)O&NRWJiem*ur>sGH(s_wr@Yjo7nsgplVQuk#0>~ODLQ)48WmqYihz87## z`$Or7w38(UZPJQ%?A}~_yh-m}LnmqNHt9M1z}{{0{RNWLoM(G>9b8`b?w*>s2) z8L=bleLdAvEp&JtmHJ;-h0Ke{419m-Yh-}^d3ocpcWb9Vzo=F0nOe)Wa97P90Ug3N zy=&}WG|(}^`9@-NpZ+5+WZv|-S`u34w#|#4*DPh3c^OAn<(5u7pXK=YYqpvGs{;pS z74AP}wrH1ZmJs-t?DzUyoNEY2~u;tW|IRgx*V1n8`U~054NvJ{At=IpCQMWNZmAMm7H+SExa)6 zQTfNyB^AHdb<5s5FgY`Ou5s$B^ZIGi2Q?_{uhX_fb}6=E>_TaIz~JIclSU7+EsL|$ z^p{LYRUMk9H@RsBx8lY};~mRSTV(k9CO*)Y%fH_4E4{o*+vn`sc2gGruDkkYi9^<= zfW(aajb)EsJ}i3us9kF5;gGDO*MH0O^?kD1!LHMp$e4)Fv12kL&3lyl7)m;8s@I9K z(r@tE!r^w7y6>@3p0Ur&LLw{Py*A93-LET8Uw5_doEb~Cmn?8k zD=w{{apw5Nk7Z96o&NY{cyVA{iw8-OrP-b~tEadP^=_cuxLI4>de>vE+O3eb?Y$}T zbI1dq2NT+Bp7sj1Dso+yxj^Oa>RC-&pV`#a|8t(<_Of={o)`7qZJgR*wLD96+Lm@s zC;!lu6&W}r{~4Yba`$agU(>x#?JN@XG+T5xY*6b}o@~IbIZht2r6Eb?<;nhEUO#wv zu<-Mj2@8s@^iDs0=A*@|)Liui%g1`=?d%bcj}ks7FILEGr8bn(%?y_ z16^7jwVE`dqHWr*o3wY`T%!A%9_M-A$K37HvcSONYqF$sP29?yha`V=Uu;}F{<8j= zz=pHt7<=R{>9*ieZmXh_bhW3ilSgbT3~`KJ;3PLqmyLd8(ZD)GU9;^-&vqI{A${xL zOWL$#gHztTP`w4~I~vY9a3}Bdt2J|qo&=VDE@)f+pyWVVUZYP%o3#3-&gzhywV?05 zc15x8bx%k1ba>EjT;k_p*^wbPD}0iVT58IkkFj!kw=+{S=f&yj#b7;OpjhmY_)t?leR?C_&r`FWQZmKzh8fwq$d7<9bsY|uW$_LjC{?J@g zw&$zRu zI#Z_g@vtuF72;l_w|A2f7BN4qw6r*Uy}L?A({57^dYSLKve@j8$V**rsnqW}|9)h< zP4hC^e=#rbcygF=2bY0?ZO3;^Z_{Sk1BveIcC9<@9&6aDbia{<|0jb{wfl6c&>v-d zc+9TO%TK&9*|yfwv|!Hi*mn=TM`aFe8NaOS%{cw`ixQ38291e(*(AY!#g)-xZ_Z41 z+cRKdV-2mJS_ht=us$IrX;I65V^5{m8u$6svGF@h^5oO)lA}sLTE#q`|1nxVEjx19 z)5MWAJj}zpTfL6Zn7BQ#uWnRO=oX`ZL5CjuUoPGl^810{;Qck*gwBb$6DB!b?9^n9 zuCr?^*?^?c3;KTwDs?-psqeaQuaC=yTWJH+mLGB0{zA?1t*edwp>~t)?7Ezl#(USZ zF?`_Muf@-^ZQa9PdWO~LI=D~XXfMsHdx!j7@Lrbto3+Q?MibnxBU%hWOuy@9Om+vgFId zE@3(MRkg<5v+CcWyq@IV^C7F&J`Jewe|GP#>7z?Co;{vrvE|8u;Sqnl$Z7cb_{9sK zR>_xs$xs{owX;t1k9y;-{n_uxst=4_bKfv?)6O=(RB+ySUyXA%OSUga{1i3c zq@U5kW}O}{TG?mgk}aOWOJDubX7SOKJHNa?p11n^w&Yby8d|Mfll1Y|b}`v$4OJ7D z_0Kh5@zaIZ%gwsaoTKhH;O7x#T5}_2pP%>i*OXZ|-u0V3*}2xt?6${d%m`kddQjVY z@`D{MQ!ZS;Imz?PqA5We2TiqZ+GM&`+?8qRMRzln?w4#nS1a_l57FzlOc?tlb3g-w z?G3iZY-@jP+t#L&UT!jd(skpQ!K2qp`|jOv#Nd7UYg_9zzkQyt?$@RHYm4HKWIt@C zwmW~5&7PTOC-1F$<7`&Xo%MDF)^pxDIAr#Y@HWM{eongk)!xc-%vUbhw|iD;Ug{nF z1J_6R9DLR-EuZFpNLXIZ>=T;5J>Q<)z-wvXye=&%NvWt}1Fez2l?v&HK%ZU%ORuY{yB*aT;C{hltp`(o(S=}YhTzA$}S$nHDVw|v~@o$uSJYvMGWdw=|%= zePaF;|HEn*W79|MZKD5RXii2&uiLsVQy&&yxRa6`p>2A4e56z2;kEU&P9G278E_aXyNf4kl0>hJ5`-aN47{_`(4KE1v0%gh`Thp;9q zJZr>ue46X@VpOTA%Sp484>txsv=3UD-Z%2Y@zhIA!YvNP)ti-c+S2!4rhD0No3Ea( z?b9B;jh`_)vvIj)PhPuLk6TN}4qmps_|EK8JBD}dxo7CJ5f|-l6n}rEnTwO_tnd`_f?xk4)jkhelzz%;KL_-O8q?MY8F~P&K_6dz=h|v z&MW%E{Pv7_LxRi#K3r{6Yt_i*2R0s1zjjFFphfiVZ8A*_-Q})vExsC@+faYn_`L~b z$LpOf(OI}Tf2*NG{bp8e$81O$9eV7Vj>94%NM60(H_B;BzO=OY z^~*m+-MaUr;&S$&)Js#3HN z|89SK_~@Hgwa#z3(0gcy60@y?N;&Hj#e-4~76mkJy}KfN$gU%8&+lKnEa$+6dYx+I ztnyQxp>eEkN!HFfkK38XOqlK+?o$6yK#MJVLXCTmxhb8ma$}TQ+C@oT`4t_*Q9Gy3 zRNIr?YW2Z;8y@9c?mAZedb zhg87S5VLEq0y$T?+Tv$=DjUX6)~Go2rrr^+kR2t*8ti@SK080>k5Bt%ObEQy;n|LMx^%VTPuqycBfCYH zeA*T^!{NGrPLW+L( z*VFVVYm99`LOSH%-sC)4^8&w+xqXAd*$lYb&u9uSd?sat?-E3?N=Tba>HJ3%<~HC zo2_=sDa&HOH7%p-+iUB&Sk&zQR$6PE|84*B!<)ly4>pgUTka5%pL9B4*Ux#Osm


    qx*a2XC0{1$!NFF!r{9{)+#Lix+%Npym{x6 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ðN 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⋘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

    3|a>Sltc4xCfG-bAR?rjQ~f_# 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 z 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ÑR3(Zp0Tw3f1%D|z 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 A%>V!Z literal 0 HcmV?d00001 diff --git a/cstrike/addons/amxmodx/scripting/include/colorchat.inc b/cstrike/addons/amxmodx/scripting/include/colorchat.inc new file mode 100644 index 0000000..c1328bb --- /dev/null +++ b/cstrike/addons/amxmodx/scripting/include/colorchat.inc @@ -0,0 +1,227 @@ +#if defined _colorchat_included + #endinput +#endif +#define _colorchat_included + +/* ColorChat Support */ +#define RED Red +#define BLUE Blue +#define GREY Grey +#define ColorChat client_print_color +/* ColorChat Support */ + +enum { + Grey = 33, + Red, + Blue +}; + +stock client_print_color(id, sender, const fmt[], any:...) +{ + // check if id is different from 0 + if( id && !is_user_connected(id) ) + { + return 0; + } + + static const szTeamName[][] = + { + "", + "TERRORIST", + "CT" + }; + + new szMessage[192]; + + new iParams = numargs(); + // Specific player code + if( id ) + { + if( iParams == 3 ) + { + copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value + } + else + { + vformat(szMessage, charsmax(szMessage), fmt, 4); + } + + if( sender > Grey ) + { + if( sender > Blue ) + { + sender = id; + } + else + { + _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); + } + } + _CC_SayText(id, sender, szMessage); + } + + // Send message to all players + else + { + // Figure out if at least 1 player is connected + // so we don't execute useless useless code if not + new iPlayers[32], iNum; + get_players(iPlayers, iNum, "ch"); + if( !iNum ) + { + return 0; + } + + new iMlNumber, i, j; + new Array:aStoreML = ArrayCreate(); + if( iParams >= 5 ) // ML can be used + { + for(j=3; j Grey ) + { + _CC_TeamInfo(0, sender, szTeamName[sender-Grey]); + } + _CC_SayText(0, sender, szMessage); + return 1; + } + } + + if( sender > Blue ) + { + sender = 0; // use receiver index + } + + for(--iNum; iNum>=0; iNum--) + { + id = iPlayers[iNum]; + + if( iMlNumber ) + { + for(j=0; j Grey ) + { + _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); + } + _CC_SayText(id, sender, szMessage); + } + + ArrayDestroy(aStoreML); + } + return 1; +} + +stock _CC_TeamInfo(iReceiver, iSender, szTeam[]) +{ + static iTeamInfo = 0; + if( !iTeamInfo ) + { + iTeamInfo = get_user_msgid("TeamInfo"); + } + message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver); + write_byte(iSender); + write_string(szTeam); + message_end(); +} + +stock _CC_SayText(iReceiver, iSender, szMessage[]) +{ + static iSayText = 0; + if( !iSayText ) + { + iSayText = get_user_msgid("SayText"); + } + message_begin(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver); + write_byte(iSender ? iSender : iReceiver); + write_string(szMessage); + message_end(); +} + +stock register_dictionary_colored(const filename[]) +{ + if( !register_dictionary(filename) ) + { + return 0; + } + + new szFileName[256]; + get_localinfo("amxx_datadir", szFileName, charsmax(szFileName)); + format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename); + new fp = fopen(szFileName, "rt"); + if( !fp ) + { + log_amx("Failed to open %s", szFileName); + return 0; + } + + new szBuffer[512], szLang[3], szKey[64], szTranslation[256], TransKey:iKey; + + while( !feof(fp) ) + { + fgets(fp, szBuffer, charsmax(szBuffer)); + trim(szBuffer); + + if( szBuffer[0] == '[' ) + { + strtok(szBuffer[1], szLang, charsmax(szLang), szBuffer, 1, ']'); + } + else if( szBuffer[0] ) + { + strbreak(szBuffer, szKey, charsmax(szKey), szTranslation, charsmax(szTranslation)); + iKey = GetLangTransKey(szKey); + if( iKey != TransKey_Bad ) + { + replace_all(szTranslation, charsmax(szTranslation), "!g", "^4"); + replace_all(szTranslation, charsmax(szTranslation), "!t", "^3"); + replace_all(szTranslation, charsmax(szTranslation), "!n", "^1"); + AddTranslation(szLang, iKey, szTranslation[2]); + } + } + } + + fclose(fp); + return 1; +} \ No newline at end of file diff --git a/cstrike/addons/amxmodx/scripting/include/curl.inc b/cstrike/addons/amxmodx/scripting/include/curl.inc new file mode 100644 index 0000000..a77b882 --- /dev/null +++ b/cstrike/addons/amxmodx/scripting/include/curl.inc @@ -0,0 +1,39 @@ +#if defined _curl_included + #endinput +#endif +#define _curl_included + +#include + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib curl + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib curl + #endif +#else + #pragma library curl +#endif + +enum _:curl_off_t { + curl_off_left, + curl_off_right +} + +native curl_easy_escape(const CURL:handle, const url[], escapedUrl[], const len); +native curl_easy_unescape(const CURL:handle, const url[], unescapedUrl[], const len); + +native CURL:curl_easy_init(); +native void:curl_easy_perform(const CURL:handle, const callbackComplite[], const data[] = {}, const data_len = 0); +native CURLcode:curl_easy_setopt(const CURL:handle, const CURLoption:option, any:...); +native void:curl_easy_cleanup(const CURL:handle); +native void:curl_easy_reset(const CURL:handle); +native CURLcode:curl_easy_getinfo(const CURL:handle, const CURLINFO:info, any:...); +native void:curl_easy_strerror(const CURLcode:code, errorBuf[], const len); + +native CURLFORMcode:curl_formadd(&curl_httppost:first, &curl_httppost:last, any:...); +native void:curl_formfree(&curl_httppost:first); + +native curl_slist:curl_slist_append(curl_slist:list, buffer[]); +native void:curl_slist_free_all(curl_slist:list); + +native void:curl_version(buf[], len); diff --git a/cstrike/addons/amxmodx/scripting/include/curl_consts.inc b/cstrike/addons/amxmodx/scripting/include/curl_consts.inc new file mode 100644 index 0000000..642445e --- /dev/null +++ b/cstrike/addons/amxmodx/scripting/include/curl_consts.inc @@ -0,0 +1,1325 @@ +#if defined _curlconst_included + #endinput +#endif +#define _curlconst_included + +#define CURL_ERROR_SIZE 256 + +/*#if defined(WIN32) +#define CURL_SOCKET_BAD (~0) +#else +#define CURL_SOCKET_BAD -1 +#endif*/ + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_GSSNEGOTIATE - HTTP GSS-Negotiate authentication + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE 0 +#define CURLAUTH_BASIC (1<<0) +#define CURLAUTH_DIGEST (1<<1) +#define CURLAUTH_GSSNEGOTIATE (1<<2) +#define CURLAUTH_NTLM (1<<3) +#define CURLAUTH_DIGEST_IE (1<<4) +#define CURLAUTH_NTLM_WB (1<<5) +#define CURLAUTH_ONLY (1<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* resolve to ipv4 addresses */ +#define CURL_IPRESOLVE_V6 2 /* resolve to ipv6 addresses */ + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +enum curlioerr { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} + +enum curliocmd { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} + +enum curlsocktype { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +} + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + + CURL_SSLVERSION_LAST /* never use, keep last */ +} + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2.0 in the request */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +} + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +} + +enum curl_proxytype { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} /* this enum was added in 7.10 */ + +enum curl_infotype { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +enum CURLFORMcode { + CURL_FORMADD_OK, /* first, no error */ + + CURL_FORMADD_MEMORY, + CURL_FORMADD_OPTION_TWICE, + CURL_FORMADD_NULL, + CURL_FORMADD_UNKNOWN_OPTION, + CURL_FORMADD_INCOMPLETE, + CURL_FORMADD_ILLEGAL_ARRAY, + CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ + + CURL_FORMADD_LAST /* last */ +} + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +enum curl_ftpmethod { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +enum curl_ftpccc { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +enum curl_ftpauth { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +enum curl_ftpcreatedir { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_USE_SSL option */ +enum curl_usessl { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} + +#define CFINIT(%0) CURLFORM_%0 +enum CURLformoption { + CFINIT(NOTHING), /********* the first one is unused ************/ + + /* */ + CFINIT(COPYNAME), + CFINIT(PTRNAME), + CFINIT(NAMELENGTH), + CFINIT(COPYCONTENTS), + CFINIT(PTRCONTENTS), + CFINIT(CONTENTSLENGTH), + CFINIT(FILECONTENT), + CFINIT(ARRAY), + CFINIT(OBSOLETE), + CFINIT(FILE), + + CFINIT(BUFFER), + CFINIT(BUFFERPTR), + CFINIT(BUFFERLENGTH), + + CFINIT(CONTENTTYPE), + CFINIT(CONTENTHEADER), + CFINIT(FILENAME), + CFINIT(END), + CFINIT(OBSOLETE2), + + CFINIT(STREAM), + + CURLFORM_LASTENTRY /* the last unused */ +} + +#undef CFINIT /* done */ + +enum CURLcode { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_OBSOLETE16, /* 16 - NOT USED */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error + instead of a memory allocation error if CURL_DOES_CONVERSIONS + is defined + */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_CONV_FAILED, /* 75 - conversion failed */ + CURLE_CONV_REQD, /* 76 - caller must register conversion + callbacks using curl_easy_setopt options + CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPT_CONV_TO_NETWORK_FUNCTION, and + CURLOPT_CONV_FROM_UTF8_FUNCTION */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURL_LAST /* never use! */ +} + + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +enum CURLINFO { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, + CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_SLIST + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION = CURLINFO_SLIST + 43, + /* Fill in new entries below here! */ + + CURLINFO_LASTONE = 43 +} + +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 + +#define LONG CURLOPTTYPE_LONG +#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT +#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT +#define OFF_T CURLOPTTYPE_OFF_T + +#define CINIT(%0,%1,%2) CURLOPT_%0 = %1 + %2 + +enum CURLoption { + /* This is the FILE * or void * the regular output should be written to. */ + CINIT(WRITEDATA, OBJECTPOINT, 1), + + /* The full URL to get/put */ + CINIT(URL, OBJECTPOINT, 2), + + /* Port number to connect to, if other than default. */ + CINIT(PORT, LONG, 3), + + /* Name of proxy to use. */ + CINIT(PROXY, OBJECTPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CINIT(USERPWD, OBJECTPOINT, 5), + + /* "user:password" to use with proxy. */ + CINIT(PROXYUSERPWD, OBJECTPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CINIT(RANGE, OBJECTPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CINIT(READDATA, OBJECTPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. If this is not used, error messages go to stderr instead: */ + CINIT(ERRORBUFFER, OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CINIT(READFUNCTION, FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CINIT(TIMEOUT, LONG, 13), + + /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CINIT(INFILESIZE, LONG, 14), + + /* POST static input fields. */ + CINIT(POSTFIELDS, OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CINIT(REFERER, OBJECTPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CINIT(FTPPORT, OBJECTPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CINIT(USERAGENT, OBJECTPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CINIT(LOW_SPEED_LIMIT, LONG, 19), + + /* Set the "low speed time" */ + CINIT(LOW_SPEED_TIME, LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CINIT(RESUME_FROM, LONG, 21), + + /* Set cookie in request: */ + CINIT(COOKIE, OBJECTPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CINIT(HTTPHEADER, OBJECTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CINIT(HTTPPOST, OBJECTPOINT, 24), + + /* name of the file keeping your private SSL-certificate */ + CINIT(SSLCERT, OBJECTPOINT, 25), + + /* password for the SSL or SSH private key */ + CINIT(KEYPASSWD, OBJECTPOINT, 26), + + /* send TYPE parameter? */ + CINIT(CRLF, LONG, 27), + + /* send linked-list of QUOTE commands */ + CINIT(QUOTE, OBJECTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CINIT(HEADERDATA, OBJECTPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CINIT(COOKIEFILE, OBJECTPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CINIT(SSLVERSION, LONG, 32), + + /* What kind of HTTP time condition to use, see defines */ + CINIT(TIMECONDITION, LONG, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CINIT(TIMEVALUE, LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CINIT(CUSTOMREQUEST, OBJECTPOINT, 36), + + /* HTTP request, for odd commands like DELETE, TRACE and others */ + CINIT(STDERR, OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CINIT(POSTQUOTE, OBJECTPOINT, 39), + + CINIT(OBSOLETE40, OBJECTPOINT, 40), /* OBSOLETE, do not use! */ + + CINIT(VERBOSE, LONG, 41), /* talk a lot */ + CINIT(HEADER, LONG, 42), /* throw the header out too */ + CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */ + CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */ + CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */ + CINIT(UPLOAD, LONG, 46), /* this is an upload */ + CINIT(POST, LONG, 47), /* HTTP POST method */ + CINIT(DIRLISTONLY, LONG, 48), /* bare names when listing directories */ + + CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */ + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CINIT(NETRC, LONG, 51), + + CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */ + + CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */ + CINIT(PUT, LONG, 54), /* HTTP PUT */ + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CINIT(PROGRESSDATA, OBJECTPOINT, 57), +#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA + + /* We want the referrer field set automatically when following locations */ + CINIT(AUTOREFERER, LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CINIT(PROXYPORT, LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CINIT(POSTFIELDSIZE, LONG, 60), + + /* tunnel non-http operations through a HTTP proxy */ + CINIT(HTTPPROXYTUNNEL, LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CINIT(INTERFACE, OBJECTPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CINIT(KRBLEVEL, OBJECTPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CINIT(SSL_VERIFYPEER, LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAINFO, OBJECTPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CINIT(MAXREDIRS, LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CINIT(FILETIME, LONG, 69), + + /* This points to a linked list of telnet options */ + CINIT(TELNETOPTIONS, OBJECTPOINT, 70), + + /* Max amount of cached alive connections */ + CINIT(MAXCONNECTS, LONG, 71), + + CINIT(OBSOLETE72, LONG, 72), /* OBSOLETE, do not use! */ + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CINIT(FRESH_CONNECT, LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be re-used + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CINIT(FORBID_REUSE, LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CINIT(RANDOM_FILE, OBJECTPOINT, 76), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CINIT(EGDSOCKET, OBJECTPOINT, 77), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CINIT(CONNECTTIMEOUT, LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CINIT(HTTPGET, LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CINIT(SSL_VERIFYHOST, LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CINIT(COOKIEJAR, OBJECTPOINT, 82), + + /* Specify which SSL ciphers to use */ + CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CINIT(HTTP_VERSION, LONG, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CINIT(FTP_USE_EPSV, LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CINIT(SSLCERTTYPE, OBJECTPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CINIT(SSLKEY, OBJECTPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CINIT(SSLKEYTYPE, OBJECTPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CINIT(SSLENGINE, OBJECTPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CINIT(SSLENGINE_DEFAULT, LONG, 90), + + /* Non-zero value means to use the global dns cache */ + CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* DEPRECATED, do not use! */ + + /* DNS cache timeout */ + CINIT(DNS_CACHE_TIMEOUT, LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CINIT(PREQUOTE, OBJECTPOINT, 93), + + /* set the debug function */ + CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CINIT(DEBUGDATA, OBJECTPOINT, 95), + + /* mark this as start of a cookie session */ + CINIT(COOKIESESSION, LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAPATH, OBJECTPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CINIT(BUFFERSIZE, LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CINIT(NOSIGNAL, LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CINIT(SHARE, OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */ + CINIT(PROXYTYPE, LONG, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CINIT(ACCEPT_ENCODING, OBJECTPOINT, 102), + + /* Set pointer to private data */ + CINIT(PRIVATE, OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CINIT(HTTP200ALIASES, OBJECTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CINIT(UNRESTRICTED_AUTH, LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CINIT(FTP_USE_EPRT, LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(HTTPAUTH, LONG, 107), + + /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx + in second argument. The function must be matching the + curl_ssl_ctx_callback proto. */ + CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CINIT(SSL_CTX_DATA, OBJECTPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(PROXYAUTH, LONG, 111), + + /* FTP option that changes the timeout, in seconds, associated with + getting a response. This is different from transfer timeout time and + essentially places a demand on the FTP server to acknowledge commands + in a timely manner. */ + CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112), +#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to resolve names to those IP versions only. This only has + affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CINIT(IPRESOLVE, LONG, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CINIT(MAXFILESIZE, LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CINIT(INFILESIZE_LARGE, OFF_T, 115), + + /* Sets the continuation offset. There is also a LONG version of this; + * look above for RESUME_FROM. + */ + CINIT(RESUME_FROM_LARGE, OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CINIT(MAXFILESIZE_LARGE, OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CINIT(NETRC_FILE, OBJECTPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CINIT(USE_SSL, LONG, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CINIT(TCP_NODELAY, LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CINIT(FTPSSLAUTH, LONG, 129), + + CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130), + CINIT(IOCTLDATA, OBJECTPOINT, 131), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* zero terminated string for pass on to the FTP server when asked for + "account" info */ + CINIT(FTP_ACCOUNT, OBJECTPOINT, 134), + + /* feed cookies into cookie engine */ + CINIT(COOKIELIST, OBJECTPOINT, 135), + + /* ignore Content-Length */ + CINIT(IGNORE_CONTENT_LENGTH, LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CINIT(FTP_SKIP_PASV_IP, LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CINIT(FTP_FILEMETHOD, LONG, 138), + + /* Local port number to bind the socket to */ + CINIT(LOCALPORT, LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CINIT(LOCALPORTRANGE, LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CINIT(CONNECT_ONLY, LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), + CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147), + + /* callback function for setting socket options */ + CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148), + CINIT(SOCKOPTDATA, OBJECTPOINT, 149), + + /* set to 0 to disable session ID re-use for this transfer, default is + enabled (== 1) */ + CINIT(SSL_SESSIONID_CACHE, LONG, 150), + + /* allowed SSH authentication methods */ + CINIT(SSH_AUTH_TYPES, LONG, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152), + CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CINIT(FTP_SSL_CCC, LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CINIT(TIMEOUT_MS, LONG, 155), + CINIT(CONNECTTIMEOUT_MS, LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CINIT(HTTP_TRANSFER_DECODING, LONG, 157), + CINIT(HTTP_CONTENT_DECODING, LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CINIT(NEW_FILE_PERMS, LONG, 159), + CINIT(NEW_DIRECTORY_PERMS, LONG, 160), + + /* Set the behaviour of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CINIT(POSTREDIR, LONG, 161), + + /* used by scp/sftp to verify the host's public key */ + CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163), + CINIT(OPENSOCKETDATA, OBJECTPOINT, 164), + + /* POST volatile input fields. */ + CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CINIT(PROXY_TRANSFER_MODE, LONG, 166), + + /* Callback function for seeking in the input stream */ + CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167), + CINIT(SEEKDATA, OBJECTPOINT, 168), + + /* CRL file */ + CINIT(CRLFILE, OBJECTPOINT, 169), + + /* Issuer certificate */ + CINIT(ISSUERCERT, OBJECTPOINT, 170), + + /* (IPv6) Address scope */ + CINIT(ADDRESS_SCOPE, LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CINIT(CERTINFO, LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CINIT(USERNAME, OBJECTPOINT, 173), + CINIT(PASSWORD, OBJECTPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CINIT(PROXYUSERNAME, OBJECTPOINT, 175), + CINIT(PROXYPASSWORD, OBJECTPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CINIT(NOPROXY, OBJECTPOINT, 177), + + /* block size for TFTP transfers */ + CINIT(TFTP_BLKSIZE, LONG, 178), + + /* Socks Service */ + CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179), + + /* Socks Service */ + CINIT(SOCKS5_GSSAPI_NEC, LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CINIT(PROTOCOLS, LONG, 181), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. Defaults + to all protocols except FILE and SCP. */ + CINIT(REDIR_PROTOCOLS, LONG, 182), + + /* set the SSH knownhost file name to use */ + CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CINIT(SSH_KEYDATA, OBJECTPOINT, 185), + + /* set the SMTP mail originator */ + CINIT(MAIL_FROM, OBJECTPOINT, 186), + + /* set the SMTP mail receiver(s) */ + CINIT(MAIL_RCPT, OBJECTPOINT, 187), + + /* FTP: send PRET before PASV */ + CINIT(FTP_USE_PRET, LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CINIT(RTSP_REQUEST, LONG, 189), + + /* The RTSP session identifier */ + CINIT(RTSP_SESSION_ID, OBJECTPOINT, 190), + + /* The RTSP stream URI */ + CINIT(RTSP_STREAM_URI, OBJECTPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CINIT(RTSP_TRANSPORT, OBJECTPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CINIT(RTSP_CLIENT_CSEQ, LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CINIT(RTSP_SERVER_CSEQ, LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CINIT(INTERLEAVEDATA, OBJECTPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CINIT(WILDCARDMATCH, LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CINIT(CHUNK_DATA, OBJECTPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CINIT(FNMATCH_DATA, OBJECTPOINT, 202), + + /* send linked-list of name:port:address sets */ + CINIT(RESOLVE, OBJECTPOINT, 203), + + /* Set a username for authenticated TLS */ + CINIT(TLSAUTH_USERNAME, OBJECTPOINT, 204), + + /* Set a password for authenticated TLS */ + CINIT(TLSAUTH_PASSWORD, OBJECTPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CINIT(TLSAUTH_TYPE, OBJECTPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CINIT(TRANSFER_ENCODING, LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208), + CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209), + + /* allow GSSAPI credential delegation */ + CINIT(GSSAPI_DELEGATION, LONG, 210), + + /* Set the name servers to use for DNS resolution */ + CINIT(DNS_SERVERS, OBJECTPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of miliseconds. */ + CINIT(ACCEPTTIMEOUT_MS, LONG, 212), + + /* Set TCP keepalive */ + CINIT(TCP_KEEPALIVE, LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CINIT(TCP_KEEPIDLE, LONG, 214), + CINIT(TCP_KEEPINTVL, LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CINIT(SSL_OPTIONS, LONG, 216), + + /* Set the SMTP auth originator */ + CINIT(MAIL_AUTH, OBJECTPOINT, 217), + + /* Enable/disable SASL initial response */ + CINIT(SASL_IR, LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CINIT(XOAUTH2_BEARER, OBJECTPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CINIT(DNS_INTERFACE, OBJECTPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CINIT(DNS_LOCAL_IP4, OBJECTPOINT, 222), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CINIT(DNS_LOCAL_IP6, OBJECTPOINT, 223), + + /* Set authentication options directly */ + CINIT(LOGIN_OPTIONS, OBJECTPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CINIT(SSL_ENABLE_NPN, LONG, 225), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CINIT(SSL_ENABLE_ALPN, LONG, 226), + + /* Time to wait for a response to a HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CINIT(PROXYHEADER, OBJECTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CINIT(HEADEROPT, LONG, 229), + + CURLOPT_LASTENTRY /* the last unused */ +} + +#undef LONG +#undef OBJECTPOINT +#undef FUNCTIONPOINT +#undef OFF_T +#undef CINIT \ No newline at end of file diff --git a/server/Dockerfile b/server/Dockerfile index 11c842a..f3c9d75 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -35,13 +35,9 @@ ADD server/files/plugins.ini /home/steam/dedicated/cstrike/addons/metamod/plugin RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-base-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-cstrike-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - -# Add curl -RUN curl -sSL "https://github.com/Polarhigh/AmxxCurl/releases/download/v1.0.4/amxx_curl_linux_v1.0.4.zip" > /tmp/curl.zip -RUN unzip -d /tmp/curl /tmp/curl.zip -RUN mv /tmp/curl/curl_amxx_i386.so /home/steam/dedicated/cstrike/addons/amxmodx/modules/ - # Add shopsms RUN sed -i '1s/^/sklep_sms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini +ADD cstrike/addons/amxmodx/modules/* /home/steam/dedicated/cstrike/addons/amxmodx/modules/ ADD cstrike/addons/amxmodx/configs/* /home/steam/dedicated/cstrike/addons/amxmodx/configs/ ADD cstrike/addons/amxmodx/plugins/* /home/steam/dedicated/cstrike/addons/amxmodx/plugins/ From a8d53a422695d6af9b58fd7ebb3e0682e5718b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 27 Mar 2019 14:52:26 +0100 Subject: [PATCH 029/124] Bump version (#8) --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 0057da5..5de972f 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.5.1" +#define VERSION "3.6.0" #define PREFIX "SKLEP-SMS" From 7c2464d94b927dff0e98e3ed07a4c044ebfabb58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 30 Apr 2019 19:39:19 +0200 Subject: [PATCH 030/124] Signature (#9) --- .../scripting/include/shop_sms_const.inc | 2 +- .../addons/amxmodx/scripting/sklep_sms.sma | 47 ++++++++++++++++--- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 5de972f..45bbd6f 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.6.0" +#define VERSION "3.6.1" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 540cfac..176ac75 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -110,6 +110,8 @@ new g_serverIp[MAX_IP + 1]; new g_serverPort[MAX_PORT + 1]; new g_serverName[MAX_SERVER_NAME + 1]; new bool:g_blocked = false; +new bool:g_validationAttempt = false; +new g_signature; // MySQL new const TABLE_PREFIX[] = "ss_"; @@ -251,6 +253,8 @@ public plugin_init() if (show_info) { set_task(137.0, "reklama", _, _, _, "b"); } + + g_signature = random_num(1, 99999999); } public loadCvars() @@ -1622,7 +1626,7 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) } // Sprawdzamy czy licencja jest prawidłowa - validateLicense(); + _validateLicense(); if (SqlTuple) { // Pobranie numerow sms @@ -1645,14 +1649,14 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) } } -public validateLicense() +_validateLicense() { new curl_slist: headers; new header[MAX_HEADERS + 1]; new body[MAX_BODY + 1]; { - new serverNameEscaped[MAX_SERVER_NAME * 2 + 1]; + new serverNameEscaped[MAX_SERVER_NAME * 2 + 1], signature; get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); @@ -1663,8 +1667,8 @@ public validateLicense() headers = curl_slist_append(headers, header); formatex(body, charsmax(body), - "platform=amxmodx&url=%s:%s&name=%s&version=%s", - g_serverIp, g_serverPort, serverNameEscaped, VERSION + "platform=amxmodx&url=%s:%s&name=%s&version=%s&signature=%d", + g_serverIp, g_serverPort, serverNameEscaped, VERSION, g_signature ); } @@ -1673,6 +1677,13 @@ public validateLicense() public onValidateLicenseResponse(const content[], playerId, CURLcode: code, statusCode) { + if (g_validationAttempt) { + _errorForbidden(); + return; + } + + g_validationAttempt = true; + if (code != CURLE_OK) { g_shopRegistered = false; log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z nieznanych powodow. Error: %d", code); @@ -1696,6 +1707,14 @@ public onValidateLicenseResponse(const content[], playerId, CURLcode: code, stat return; } + if (statusCode == 403) { + new text[128 + 1]; + getXMLValue(content, "text", text, charsmax(text)); + trim(text); + _errorForbidden(text); + return; + } + if (statusCode >= 300) { _errorInvalidResponse(statusCode); return; @@ -1712,6 +1731,15 @@ public onValidateLicenseResponse(const content[], playerId, CURLcode: code, stat return; } + new szSignature[16], signature; + getXMLValue(content, "signature", szSignature, charsmax(szSignature)); + signature = str_to_num(szSignature); + + if (signature != g_signature) { + _errorForbidden(); + return; + } + new footer[2]; getXMLValue(content, "footer", footer, charsmax(footer)); g_footer = str_to_num(footer) ? true : false; @@ -1897,8 +1925,13 @@ _errorInvalidToken() { } _errorPaymentRequired() { - log_to_file(LOG_FILE, "Error 14 - Licencja nie wspiera tego typu serwera lub przekroczono limit stron WWW."); - g_blocked = true; + _make_error("Error 14 - Licencja nie wspiera tego typu serwera lub przekroczono limit stron WWW."); +} + +_errorForbidden(const text[] = "") { + new message[128 + 1]; + formatex(message, charsmax(message), "Errro 15 - Blad licencji. %s", text); + _make_error(message); } _error21() { From 4e76224932dad6a3867802d14c50c763496d2cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 1 May 2019 18:58:02 +0200 Subject: [PATCH 031/124] Typo (#11) --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 176ac75..6f50d93 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1930,7 +1930,7 @@ _errorPaymentRequired() { _errorForbidden(const text[] = "") { new message[128 + 1]; - formatex(message, charsmax(message), "Errro 15 - Blad licencji. %s", text); + formatex(message, charsmax(message), "Error 15 - Blad licencji. %s", text); _make_error(message); } From d8585b12cc9689b4518b9e20e6f3d71ed0c85368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 12 Dec 2019 20:42:31 +0100 Subject: [PATCH 032/124] Ability to purchase using wallet (#12) --- .../scripting/include/shop_sms_const.inc | 2 +- .../addons/amxmodx/scripting/sklep_sms.sma | 300 ++++++++++++------ server/Dockerfile | 1 + 3 files changed, 209 insertions(+), 94 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 45bbd6f..0196e1c 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.6.1" +#define VERSION "3.7.0" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 6f50d93..6e034f1 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -14,22 +14,21 @@ forward amxx_admin_access(id, flags, timestamp); #define FLAG_NICK (1<<5) // ID zadan -#define TASK_WYSWIETL 2000 +#define TASK_KEEP_INFO_SMS 2000 #define TASK_CHECK_USER 5000 -#define TASK_SHOW_MENU_SERVICE_TYPES 8000 +#define TASK_KEEP_DISPLAYING_MENU 8000 // Klawisze ktore mozna uzyc w menu #define KEYS (1<<0)|(1<<9) // Keys: 10 -#define KEYS2 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 1234567890 // Logowanie danych #define LOG_SQL #define CFG_FILE "sklep_sms.cfg" -new const DEBUG_FILE[] = "sklep_sms_debug.log"; new const LOG_FILE[] = "sklep_sms.log"; const MAX_COMMAND = 32; const MAX_CONTACT = 64; +const MAX_RANDOM_KEY = 32; enum e_KeyValue { kvKEY[128], @@ -51,7 +50,7 @@ enum e_Service { new Array:service_plugins, Array:service_ids, Array:services; - + // Modul platnosci enum e_TransactionService { tsID[MAX_TRANS_SERVICE_ID + 1], @@ -122,7 +121,7 @@ new g_serverId; new const all_flags[] = "abcdefghijklmnopqrstuyvwxz"; new g_szTemp[4096]; -// Flagi graczy +// Players flags enum e_PlayerFlags { pfPLAYER[33], pfFLAGS, @@ -133,12 +132,14 @@ new Array:g_playersFlags; new bool:g_playersLoaded = false; new g_lastReassign; +// Accounts +new g_accountsSteamIds[4096] = ""; + // Settings new st_currency[16], - st_signature[128], st_sms_service[MAX_TRANS_SERVICE_ID + 1], st_contact[MAX_CONTACT + 1], - st_random_key[33], + st_random_key[MAX_RANDOM_KEY + 1], st_random_key_md5[34], Float:st_vat; @@ -208,7 +209,6 @@ public plugin_precache() write_file(config_path, szText); } - //Rejestrowanie cvarow cvar_on = register_cvar("sklepsms_on", "1"); cvar_sklep = register_cvar("sklepsms_sklep_komenda", "/sklepsms"); cvar_przeladuj = register_cvar("sklepsms_przeladuj_komenda", "/przeladuj"); @@ -259,7 +259,6 @@ public plugin_init() public loadCvars() { - //Pobieranie wartosci cvarow get_pcvar_string(cvar_sklep, sklep_komenda, charsmax(sklep_komenda)); get_pcvar_string(cvar_przeladuj, przeladuj_komenda, charsmax(przeladuj_komenda)); get_pcvar_string(cvar_uslugi, uslugi_komenda, charsmax(uslugi_komenda)); @@ -290,7 +289,6 @@ public plugin_cfg() { server_exec(); } - // Ladownaie cvarow loadCvars(); // Łaczenie z baza @@ -309,19 +307,7 @@ public plugin_cfg() { split(fullIp, g_serverIp, charsmax(g_serverIp), g_serverPort, charsmax(g_serverPort), ":"); _loadPlayersServices(false); - - if (SqlTuple) { - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT s.id, s.name, s.sms_service, CONCAT(' ', GROUP_CONCAT( ss.service_id SEPARATOR ' ' ), ' ') AS `services` \ - FROM `%sservers` AS s \ - LEFT JOIN `%sservers_services` AS ss ON ss.server_id = s.id \ - WHERE s.ip = '%s' AND s.port = '%s' \ - GROUP BY s.id", - TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort - ); - - SQL_ThreadQuery(SqlTuple, "getServerData", g_szTemp); - } + _loadServerData(); } public checkLoadedServices() @@ -523,7 +509,7 @@ public wyborMenu(id, service_id) } else if (menu_items(menu) == 1) { // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie which_service[id] = service_id; which_price[id] = data[1]+data[2]; - prev_infoSMS(id); + displayServiceTypeMenu(id); } else { // Zero client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); } @@ -542,13 +528,29 @@ public wyborMenu_handler(id, menu, item) which_service[id] = data[0] - 1; which_price[id] = data[1] + data[2]; - prev_infoSMS(id); + displayServiceTypeMenu(id); menu_destroy(menu); } /* Koniec menu wyboru */ -/* Informacje dot SMSa */ -public prev_infoSMS(id) +public keepDisplayingMenu(data[]) +{ + new id = data[0]; + if (!is_user_connected(id)) { + menu_destroy(data[1]); + return; + } + + new menu, newmenu; + player_menu_info(id, menu, newmenu); + if (newmenu != data[1]) { + menu_display(id, data[1]); + } + + set_task(0.1, "keepDisplayingMenu", TASK_KEEP_DISPLAYING_MENU + id, data, 2); +} + +public displayServiceTypeMenu(id) { new service[e_Service]; ArrayGetArray(services, which_service[id], service); @@ -568,7 +570,7 @@ public prev_infoSMS(id) data[0] = id; data[1] = menu; - menuDisplayServiceTypes(data); + keepDisplayingMenu(data); } else { _serviceChosen(id); } @@ -588,24 +590,13 @@ public menuServiceType_callback(id, menu, item) return ITEM_DISABLED; } -public menuDisplayServiceTypes(data[]) -{ - new id = data[0]; - if (!is_user_connected(id)) { - menu_destroy(data[1]); - return; +public menuServiceType_handler(id, menu, item) +{ + if (0 <= item && item <= 2) { + remove_task(TASK_KEEP_DISPLAYING_MENU+id); + menu_destroy(menu); } - - new menu, newmenu; - player_menu_info(id, menu, newmenu); - if (newmenu != data[1]) - menu_display(id, data[1]); - - set_task(0.1, "menuDisplayServiceTypes", TASK_SHOW_MENU_SERVICE_TYPES+id, data, 2); -} -public menuServiceType_handler(id, menu, item) -{ switch (item) { case 0: { client_cmd(id, "messagemode ssnick_Podaj_Haslo"); @@ -617,11 +608,6 @@ public menuServiceType_handler(id, menu, item) _serviceChosen(id, TYPE_SID, ""); } } - - if (0 <= item && item <= 2) { - remove_task(TASK_SHOW_MENU_SERVICE_TYPES+id); - menu_destroy(menu); - } } public menuServiceType_nick(id) @@ -699,11 +685,62 @@ _serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") DestroyForward(forward_handle); if (ret != SS_STOP) { - infoSMS(id); + displayPaymentMethodMenu(id); + } +} + +public displayPaymentMethodMenu(id) +{ + new service[e_Service]; + ArrayGetArray(services, which_service[id], service); + + new menu = menu_create("Wybierz metode platnosci", "menuPaymentMethod_handler"); + new menu_callback = menu_makecallback("menuPaymentMethod_callback"); + + menu_additem(menu, "SMS", "", 0, menu_callback); + menu_additem(menu, "Portfel", "", 0, menu_callback); + + menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER); + + new data[4]; + data[0] = id; + data[1] = menu; + + keepDisplayingMenu(data); +} + +public menuPaymentMethod_callback(id, menu, item) +{ + switch (item) { + case 0: { + return ITEM_ENABLED; + } + case 1: { + return _canPayWithWallet(id) ? ITEM_ENABLED : ITEM_DISABLED; + } } + + return ITEM_DISABLED; } -public infoSMS(id) +public menuPaymentMethod_handler(id, menu, item) +{ + if (0 <= item && item <= 1) { + remove_task(TASK_KEEP_DISPLAYING_MENU + id); + menu_destroy(menu); + } + + switch (item) { + case 0: { + displayInfoSMS(id); + } + case 1: { + purchaseService(id, "wallet"); + } + } +} + +displayInfoSMS(id) { if (!is_user_connected(id)) { return; @@ -732,25 +769,24 @@ public infoSMS(id) ); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); - // Wyswietlane caly czas menu zakupu - infoSMS_wyswietl(g_szTemp, TASK_WYSWIETL + id); + keepDisplayingInfoSMS(g_szTemp, TASK_KEEP_INFO_SMS + id); } -public infoSMS_wyswietl(const info[], id) +public keepDisplayingInfoSMS(const info[], id) { - id -= TASK_WYSWIETL; + id -= TASK_KEEP_INFO_SMS; if (!is_user_connected(id)) { return; } show_menu(id, KEYS, info, 1, "SMS_Info"); - set_task(0.9, "infoSMS_wyswietl", id+TASK_WYSWIETL, info, strlen(info)); + set_task(0.9, "keepDisplayingInfoSMS", id+TASK_KEEP_INFO_SMS, info, strlen(info)); } public infoSMS_handler(id, key) { - if (task_exists(TASK_WYSWIETL + id)) { - remove_task(TASK_WYSWIETL + id); + if (task_exists(TASK_KEEP_INFO_SMS + id)) { + remove_task(TASK_KEEP_INFO_SMS + id); } if (!is_user_connected(id)) { @@ -790,17 +826,24 @@ public kodZwrotny(id) client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1byc rowny^3 0^1.", PREFIX); return; } - - client_print_color(id, Red, "^4[%s] ^1Trwa weryfikacja kodu...", PREFIX); - - // ############# ZAKUP USLUGI ############### + + purchaseService(id, "sms", sms_code); +} + +purchaseService(id, const method[], const sms_code[] = "") { + client_print_color(id, Red, "^4[%s] ^1Trwa przeprowadzanie zakupu...", PREFIX); new url[MAX_URL + 1]; + new body[MAX_BODY + 1]; + new curl_slist: headers; { - new service[e_Service], auth_data[32 + 1], price[e_Price], ip[MAX_IP + 1]; - new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_password[MAX_PASSWORD * 2 + 1], + new service[e_Service], auth_data[32 + 1], steam_id[32 + 1], price[e_Price], ip[MAX_IP + 1]; + new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], u_password[MAX_PASSWORD * 2 + 1], u_sms_service[MAX_TRANS_SERVICE_ID * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; - + + new sign[34], sign_body[1 + charsmax(auth_data) + charsmax(sms_code) + charsmax(st_random_key) + 1]; + new header[MAX_HEADERS + 1]; + // Pobieramy dane o usludze ArrayGetArray(services, which_service[id], service); @@ -816,31 +859,47 @@ public kodZwrotny(id) get_user_name(id, auth_data, charsmax(auth_data)); } - // Pobieramy IP gracza + // Get user's IP get_user_ip(id, ip, charsmax(ip), true); - // Pobieramy taryfe + // Get user's SteamID + get_user_authid(id, steam_id, charsmax(steam_id)); + + // Get tariff ArrayGetArray(pricelist, which_price[id], price); - // Urlencode + // Encode url params StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); StringURLEncode(st_sms_service, u_sms_service, charsmax(u_sms_service)); StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); + StringURLEncode(steam_id, u_steam_id, charsmax(u_steam_id)); + + // Calculate body sign + formatex(sign_body, charsmax(sign_body), + "%d#%s#%s#%s", + b_types[id], auth_data, sms_code, st_random_key + ); + vc_md5(sign_body, sign); + + formatex(header, charsmax(header), "Authorization: %s", steam_id); + headers = curl_slist_append(headers, header); - formatex(url, charsmax(url), - "%s/servers_stuff.php?action=purchase_service&platform=engine_amxx&key=%s&service=%s&type=%d&auth_data=%s&password=%s&method=sms&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&uid=0&ip=%s&language=polish", - g_shopPageUrl, st_random_key_md5, u_service_id, b_types[id], u_auth_data, u_password, g_serverId, u_sms_service, u_sms_code, price[pTARIFF], ip + formatex(body, charsmax(body), + "platform=engine_amxx&sign=%s&service=%s&type=%d&auth_data=%s&password=%s&method=%s&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&ip=%s&language=polish", + sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, u_sms_service, u_sms_code, price[pTARIFF], ip ); + + formatex(url, charsmax(url), "%s/api/server/purchase?key=%s", g_shopPageUrl, st_random_key_md5); } - if (!makeRequest("GET", url, 0, "", "getWebPagePurchaseService", id)) { + if (!makeRequest("POST", url, headers, body, "getWebPagePurchaseService", id)) { client_print_color(id, Red, "^4[%s] ^1Nie udalo sie wykonac zapytania HTTP.", PREFIX); } } -public getWebPagePurchaseService(const content[], playerId, CURLcode: code, statusCode) +public getWebPagePurchaseService(const content[], CURLcode: code, statusCode, playerId) { if (code != CURLE_OK) { log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); @@ -871,13 +930,10 @@ public getWebPagePurchaseService(const content[], playerId, CURLcode: code, stat public purchaseServicePost(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) { if (! is_user_connected(id)) { - if (isDebug()) { - log_to_file(DEBUG_FILE, "Wywolano funkcje zakupu dla uzytkownika o id 0"); - } return; } - client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, szText); + client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(szText) ? szText : "Wystapil blad. Brak odpowiedzi z serwera."); if (strlen(szWarnings)) { format(g_szTemp, charsmax(g_szTemp), @@ -1107,7 +1163,6 @@ _reassignPlayersFlags(id = 0) // Funkcja wczytujaca z bazy ponownie dane graczy public realoadPlayersServices() { - // Wczytywanie danych graczy _loadPlayersServices(true); } @@ -1411,7 +1466,24 @@ public log_to_sql(const text[]) } } -public getServerData(FailState, Handle:Query, Error[], Errorcode) +_loadServerData() +{ + if (SqlTuple) { + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT s.id, s.name, s.sms_service, CONCAT(' ', GROUP_CONCAT( ss.service_id SEPARATOR ' ' ), ' ') AS `services` \ + FROM `%sservers` AS s \ + LEFT JOIN `%sservers_services` AS ss ON ss.server_id = s.id \ + WHERE s.ip = '%s' AND s.port = '%s' \ + GROUP BY s.id", + TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort + ); + + SQL_ThreadQuery(SqlTuple, "loadServerDataHandler", g_szTemp); + } +} + + +public loadServerDataHandler(FailState, Handle:Query, Error[], Errorcode) { if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { if (FailState == TQUERY_QUERY_FAILED) { @@ -1449,7 +1521,7 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_password')", TABLE_PREFIX ); - SQL_ThreadQuery(SqlTuple, "getSettings", g_szTemp); + SQL_ThreadQuery(SqlTuple, "getSettingsHandler", g_szTemp); // Update server info formatex(g_szTemp, charsmax(g_szTemp), @@ -1495,14 +1567,14 @@ public getServerData(FailState, Handle:Query, Error[], Errorcode) TABLE_PREFIX, ids ); - SQL_ThreadQuery(SqlTuple, "getServicesData", g_szTemp); + SQL_ThreadQuery(SqlTuple, "getServicesDataHandler", g_szTemp); } } else { checkLoadedServices(); // Sprawdz zaladowane uslugi } } -public getServicesData(FailState, Handle:Query, Error[], Errorcode) { +public getServicesDataHandler(FailState, Handle:Query, Error[], Errorcode) { if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } @@ -1550,12 +1622,12 @@ public getServicesData(FailState, Handle:Query, Error[], Errorcode) { ORDER BY `amount` ASC", TABLE_PREFIX, g_serverId, ids ); - SQL_ThreadQuery(SqlTuple, "getPriceList", g_szTemp); + SQL_ThreadQuery(SqlTuple, "getPriceListHandler", g_szTemp); } } } -public getPriceList(FailState, Handle:Query, Error[], Errorcode) +public getPriceListHandler(FailState, Handle:Query, Error[], Errorcode) { if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; @@ -1575,7 +1647,7 @@ public getPriceList(FailState, Handle:Query, Error[], Errorcode) } } -public getSettings(FailState, Handle:Query, Error[], Errorcode) +public getSettingsHandler(FailState, Handle:Query, Error[], Errorcode) { if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; @@ -1602,9 +1674,6 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) _error33(); } } - else if (equali(key, "signature")) { - copy(st_signature, charsmax(st_signature), value); - } else if (equali(key, "sms_service") && !strlen(st_sms_service)) { copy(st_sms_service, charsmax(st_sms_service), value); } @@ -1625,8 +1694,8 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) SQL_NextRow(Query); } - // Sprawdzamy czy licencja jest prawidłowa _validateLicense(); + _loadUsers(); if (SqlTuple) { // Pobranie numerow sms @@ -1649,6 +1718,42 @@ public getSettings(FailState, Handle:Query, Error[], Errorcode) } } +_loadUsers() +{ + new url[MAX_URL + 1]; + formatex(url, charsmax(url), "%s/api/server/users/steam-ids?key=%s", g_shopPageUrl, st_random_key_md5); + makeRequest("GET", url, 0, "", "onLoadUsersResponse"); +} + +public onLoadUsersResponse(const content[], CURLcode: code, statusCode, playerId) +{ + if (code != CURLE_OK) { + log_to_file(LOG_FILE, "Nie udalo sie pozyskac listy uzytkownikow. Error: %d", code); + return; + } + + if (statusCode >= 300) { + log_to_file(LOG_FILE, "Zapytanie o liste uzytkownikow wrociło bledny http code. Kod: %d", statusCode); + return; + } + + formatex(g_accountsSteamIds, charsmax(g_accountsSteamIds), "%s", content); +} + +_canPayWithWallet(id) +{ + new steam_id[MAX_SID + 2]; + + get_user_authid(id, steam_id, charsmax(steam_id)); + // CSGO uses different steamid prefix. STEAM_1 instead of STEAM_0. + // That is why we want to ignore SID prefix. + replace(steam_id, charsmax(steam_id), "STEAM_1", ""); + replace(steam_id, charsmax(steam_id), "STEAM_0", ""); + format(steam_id, charsmax(steam_id), "%s;", steam_id); + + return containi(g_accountsSteamIds, steam_id) != -1; +} + _validateLicense() { new curl_slist: headers; @@ -1675,7 +1780,7 @@ _validateLicense() makeRequest("POST", "https://license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); } -public onValidateLicenseResponse(const content[], playerId, CURLcode: code, statusCode) +public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, playerId) { if (g_validationAttempt) { _errorForbidden(); @@ -1883,7 +1988,7 @@ public native_infoSMS(plugin, params) return SS_BAD_ARGS; } - infoSMS(get_param(1)); + displayInfoSMS(get_param(1)); return SS_OK; } @@ -1981,6 +2086,10 @@ _make_error(message[]) { bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: headers, const body[], const callback[MAX_FUNCTION + 1] = "", const playerId = 0) { new CURL: handle, curl_slist: newHeaders, data[requestStruct]; + + if (isDebug()) { + log_amx("Request | %s %s %s", method, url, body); + } handle = curl_easy_init(); if (!handle) { @@ -2045,11 +2154,15 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade runRequestCallback(const function[], const httpResponseContent[], playerId, CURLcode: code, statusCode) { + if (isDebug()) { + log_amx("Request response | %d %d %s", code, statusCode, httpResponseContent); + } + if (!strlen(function) || callfunc_begin(function) == 1) { callfunc_push_str(httpResponseContent); - callfunc_push_int(playerId); callfunc_push_int(code); callfunc_push_int(statusCode); + callfunc_push_int(playerId); callfunc_end(); } else { log_to_file(LOG_FILE, "Funkcja nie zostala prawidlowo wywolana [%s]", function); @@ -2190,6 +2303,7 @@ stock getXMLValue(const szText[], const tag[], output[], len) } } +// TODO Does not work nice with polish characters stock StringURLEncode(const szInput[], szOutput[], const iLen) { static const HEXCHARS[ 16 ] = { diff --git a/server/Dockerfile b/server/Dockerfile index f3c9d75..9ddc345 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -5,6 +5,7 @@ ARG amxmod_version=1.8.2 # Install unzip USER root +RUN apt-get update RUN apt-get install -y unzip curl USER steam From 4e7b43112fa2d3ba7ff6c081acd98e960af4e8ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Dec 2019 00:03:50 +0100 Subject: [PATCH 033/124] Change license server --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 0196e1c..eee51d4 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.7.0" +#define VERSION "3.7.1" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 6e034f1..21c2176 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1777,7 +1777,7 @@ _validateLicense() ); } - makeRequest("POST", "https://license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); + makeRequest("POST", "http://license.nalunch.com/v1/authorization/server", headers, body, "onValidateLicenseResponse"); } public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, playerId) From c5b6eb9e41e1d3c20b5b52d27e9d3abe943bf995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Dec 2019 13:13:31 +0100 Subject: [PATCH 034/124] Revert "Change license server" This reverts commit 4e7b43112fa2d3ba7ff6c081acd98e960af4e8ac. --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index eee51d4..0196e1c 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.7.1" +#define VERSION "3.7.0" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 21c2176..6e034f1 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1777,7 +1777,7 @@ _validateLicense() ); } - makeRequest("POST", "http://license.nalunch.com/v1/authorization/server", headers, body, "onValidateLicenseResponse"); + makeRequest("POST", "https://license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); } public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, playerId) From bb2700a45ca06446694261c427d80f7bccc3ab13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 7 Jan 2020 20:42:00 +0100 Subject: [PATCH 035/124] Payment platform & server config (#13) --- .../scripting/include/shop_sms_const.inc | 4 +- .../addons/amxmodx/scripting/sklep_sms.sma | 593 +++++++----------- 2 files changed, 237 insertions(+), 360 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 0196e1c..e2fb8f7 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.7.0" +#define VERSION "3.8.0" #define PREFIX "SKLEP-SMS" @@ -18,8 +18,6 @@ #define MAX_SERVICE_ID 16 #define MAX_SERVICE_TAG 16 #define MAX_SERVICE_NAME 32 -#define MAX_TRANS_SERVICE_ID 32 -#define MAX_TRANS_SERVICE_NAME 32 #define MAX_PASSWORD 32 #define MAX_DESCRIPTION 28 #define MAX_CODE 16 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 6e034f1..425557b 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -29,6 +30,7 @@ new const LOG_FILE[] = "sklep_sms.log"; const MAX_COMMAND = 32; const MAX_CONTACT = 64; const MAX_RANDOM_KEY = 32; +const MAX_PAYMENT_MODULE_ID = 32; enum e_KeyValue { kvKEY[128], @@ -50,14 +52,6 @@ enum e_Service { new Array:service_plugins, Array:service_ids, Array:services; - -// Modul platnosci -enum e_TransactionService { - tsID[MAX_TRANS_SERVICE_ID + 1], - tsNAME[MAX_TRANS_SERVICE_NAME + 1], - SMS_TEXT[MAX_SMS_TEXT + 1], -}; -new transaction_service[e_TransactionService]; // Numery i taryfy SMS enum e_SMS { @@ -82,7 +76,6 @@ new which_service[33], // CVARy new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; -new cvar_debug; new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_komenda[MAX_COMMAND + 1], show_info; // Sciezka do pliku konfiguracyjnego @@ -102,8 +95,8 @@ enum requestStruct { RequestPlayerId, }; -//Licencja -new license_token[63]; +// License +new g_licenseToken[63]; new bool:g_footer = true; new g_serverIp[MAX_IP + 1]; new g_serverPort[MAX_PORT + 1]; @@ -136,14 +129,15 @@ new g_lastReassign; new g_accountsSteamIds[4096] = ""; // Settings -new st_currency[16], - st_sms_service[MAX_TRANS_SERVICE_ID + 1], - st_contact[MAX_CONTACT + 1], - st_random_key[MAX_RANDOM_KEY + 1], - st_random_key_md5[34], - Float:st_vat; - -new g_shopPageUrl[MAX_URL + 1]; +new g_currency[16], + g_smsPlatformId, + g_smsModuleId[MAX_PAYMENT_MODULE_ID + 1], + g_contact[MAX_CONTACT + 1], + g_randomKey[MAX_RANDOM_KEY + 1], + g_randomKeyMD5[34], + g_shopPageUrl[MAX_URL + 1], + g_smsText[MAX_SMS_TEXT + 1], + Float:g_vat; new bool:g_shopRegistered = false; new bool:g_AmxbansExists = false; @@ -220,7 +214,6 @@ public plugin_precache() cvar_db = register_cvar("sklepsms_db", ""); cvar_server_ip = register_cvar("sklepsms_server_ip", ""); cvar_silent_command = register_cvar("sklepsms_ciche_komendy", "0"); - cvar_debug = register_cvar("sklepsms_debug", "0"); // Wczytywanie confingu if (file_exists(config_path)) { @@ -307,7 +300,7 @@ public plugin_cfg() { split(fullIp, g_serverIp, charsmax(g_serverIp), g_serverPort, charsmax(g_serverPort), ":"); _loadPlayersServices(false); - _loadServerData(); + _loadSettings(); } public checkLoadedServices() @@ -423,7 +416,7 @@ public sklepMenu(id) menu_display(id, menu); client_print_color(id, Red, "^4[%s] ^1W razie problemow mozesz sie z nami skontaktowac", PREFIX); - client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, st_contact); + client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, g_contact); } public sklepMenu_callback(id, menu, item) @@ -492,8 +485,8 @@ public wyborMenu(id, service_id) new temp_cost = get_sms_cost(number); formatex(szText, charsmax(szText), "\y%s \wza %d.%s %s + VAT\d ( %d.%s %s )", - amount, temp_cost/100, two_number_value(temp_cost%100), st_currency, floatround(temp_cost*st_vat)/100, - two_number_value(floatround(temp_cost*st_vat)%100), st_currency + amount, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, + two_number_value(floatround(temp_cost*g_vat)%100), g_currency ); data[0] = service_id+1; data[1] = min(127, i); // TODO: Problem przy ilosci uslug powyzej 256! @@ -659,15 +652,13 @@ public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), szPassword, charsmax(szPassword)); _serviceChosen(id, type, szPassword); } - else { - if (type == TYPE_NICK) { - client_print_color(id, Red, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3nick^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); - client_cmd(id, "messagemode ssnick_Podaj_Haslo"); - } - else if (type == TYPE_IP) { - client_print_color(id, Blue, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3adres IP^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); - client_cmd(id, "messagemode ssip_Podaj_Haslo"); - } + else if (type == TYPE_NICK) { + client_print_color(id, Red, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3nick^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); + client_cmd(id, "messagemode ssnick_Podaj_Haslo"); + } + else if (type == TYPE_IP) { + client_print_color(id, Blue, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3adres IP^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); + client_cmd(id, "messagemode ssip_Podaj_Haslo"); } } @@ -700,8 +691,6 @@ public displayPaymentMethodMenu(id) menu_additem(menu, "SMS", "", 0, menu_callback); menu_additem(menu, "Portfel", "", 0, menu_callback); - menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER); - new data[4]; data[0] = id; data[1] = menu; @@ -725,10 +714,8 @@ public menuPaymentMethod_callback(id, menu, item) public menuPaymentMethod_handler(id, menu, item) { - if (0 <= item && item <= 1) { - remove_task(TASK_KEEP_DISPLAYING_MENU + id); - menu_destroy(menu); - } + remove_task(TASK_KEEP_DISPLAYING_MENU + id); + menu_destroy(menu); switch (item) { case 0: { @@ -764,8 +751,8 @@ displayInfoSMS(id) new temp_cost = get_sms_cost(number); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", - g_szTemp, transaction_service[SMS_TEXT], number, temp_cost/100, two_number_value(temp_cost%100), st_currency, floatround(temp_cost*st_vat)/100, - two_number_value(floatround(temp_cost*st_vat)%100), st_currency + g_szTemp, g_smsText, number, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, + two_number_value(floatround(temp_cost * g_vat)%100), g_currency ); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); @@ -838,10 +825,10 @@ purchaseService(id, const method[], const sms_code[] = "") { new curl_slist: headers; { new service[e_Service], auth_data[32 + 1], steam_id[32 + 1], price[e_Price], ip[MAX_IP + 1]; - new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], u_password[MAX_PASSWORD * 2 + 1], - u_sms_service[MAX_TRANS_SERVICE_ID * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; + new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], + u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; - new sign[34], sign_body[1 + charsmax(auth_data) + charsmax(sms_code) + charsmax(st_random_key) + 1]; + new sign[34], sign_body[1 + charsmax(auth_data) + charsmax(sms_code) + charsmax(g_randomKey) + 1]; new header[MAX_HEADERS + 1]; // Pobieramy dane o usludze @@ -872,14 +859,13 @@ purchaseService(id, const method[], const sms_code[] = "") { StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); - StringURLEncode(st_sms_service, u_sms_service, charsmax(u_sms_service)); StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); StringURLEncode(steam_id, u_steam_id, charsmax(u_steam_id)); // Calculate body sign formatex(sign_body, charsmax(sign_body), "%d#%s#%s#%s", - b_types[id], auth_data, sms_code, st_random_key + b_types[id], auth_data, sms_code, g_randomKey ); vc_md5(sign_body, sign); @@ -887,11 +873,11 @@ purchaseService(id, const method[], const sms_code[] = "") { headers = curl_slist_append(headers, header); formatex(body, charsmax(body), - "platform=engine_amxx&sign=%s&service=%s&type=%d&auth_data=%s&password=%s&method=%s&server=%d&transaction_service=%s&sms_code=%s&tariff=%d&ip=%s&language=polish", - sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, u_sms_service, u_sms_code, price[pTARIFF], ip + "sign=%s&service=%s&type=%d&auth_data=%s&password=%s&method=%s&server=%d&payment_platform=%d&sms_code=%s&tariff=%d&ip=%s", + sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, g_smsPlatformId, u_sms_code, price[pTARIFF], ip ); - formatex(url, charsmax(url), "%s/api/server/purchase?key=%s", g_shopPageUrl, st_random_key_md5); + formatex(url, charsmax(url), "%s/api/server/purchase?key=%s&language=polish", g_shopPageUrl, g_randomKeyMD5); } if (!makeRequest("POST", url, headers, body, "getWebPagePurchaseService", id)) { @@ -908,7 +894,7 @@ public getWebPagePurchaseService(const content[], CURLcode: code, statusCode, pl } if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrociło bledny http code.", PREFIX); + client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny http code.", PREFIX); return; } @@ -924,6 +910,10 @@ public getWebPagePurchaseService(const content[], CURLcode: code, statusCode, pl trim(szText); trim(szWarnings); + if (!strlen(return_value)) { + log_amx("Invalid response: %s", content); + } + purchaseServicePost(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); } @@ -932,8 +922,8 @@ public purchaseServicePost(id, const return_value[], const szText[], positive, b if (! is_user_connected(id)) { return; } - - client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(szText) ? szText : "Wystapil blad. Brak odpowiedzi z serwera."); + + client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(szText) ? szText : "Wystapil blad. Brak odpowiedzi z serwera."); if (strlen(szWarnings)) { format(g_szTemp, charsmax(g_szTemp), @@ -965,7 +955,7 @@ public purchaseServicePost(id, const return_value[], const szText[], positive, b // Wystapil jakis blad if (ret == SS_ERROR) { - client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, st_contact); + client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, g_contact); new amount[32 + 1]; if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze @@ -1171,14 +1161,51 @@ _loadPlayersServices(bool:reloadAmxbans) { ArrayClear(g_playersFlags); g_playersLoaded = false; - if (SqlTuple) { - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT f.id, f.type, f.auth_data, f.password, f.a, f.b, f.c, f.d, f.e, f.f, f.g, f.h, f.i, f.j, f.k, f.l, f.m, f.n, f.o, f.p, f.q, f.r, f.s, f.t, f.u, f.y, f.v, f.w, f.x, f.z \ - FROM `%splayers_flags` AS f \ + if (SqlTuple) { + new iLen = 0, iMax = charsmax(g_szTemp); + + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "SELECT f.type, f.auth_data, f.password, \ + (f.a > UNIX_TIMESTAMP() OR f.a = '-1') AS `a`, \ + (f.b > UNIX_TIMESTAMP() OR f.b = '-1') AS `b`, \ + (f.c > UNIX_TIMESTAMP() OR f.c = '-1') AS `c`, \ + (f.d > UNIX_TIMESTAMP() OR f.d = '-1') AS `d`, \ + (f.e > UNIX_TIMESTAMP() OR f.e = '-1') AS `e`, \ + (f.f > UNIX_TIMESTAMP() OR f.f = '-1') AS `f`, \ + (f.g > UNIX_TIMESTAMP() OR f.g = '-1') AS `g`, \ + (f.h > UNIX_TIMESTAMP() OR f.h = '-1') AS `h`, " + ); + + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "(f.i > UNIX_TIMESTAMP() OR f.i = '-1') AS `i`, \ + (f.j > UNIX_TIMESTAMP() OR f.j = '-1') AS `j`, \ + (f.k > UNIX_TIMESTAMP() OR f.k = '-1') AS `k`, \ + (f.l > UNIX_TIMESTAMP() OR f.l = '-1') AS `l`, \ + (f.m > UNIX_TIMESTAMP() OR f.m = '-1') AS `m`, \ + (f.n > UNIX_TIMESTAMP() OR f.n = '-1') AS `n`, \ + (f.o > UNIX_TIMESTAMP() OR f.o = '-1') AS `o`, \ + (f.p > UNIX_TIMESTAMP() OR f.p = '-1') AS `p`, " + ); + + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "(f.q > UNIX_TIMESTAMP() OR f.q = '-1') AS `q`, \ + (f.r > UNIX_TIMESTAMP() OR f.r = '-1') AS `r`, \ + (f.s > UNIX_TIMESTAMP() OR f.s = '-1') AS `s`, \ + (f.t > UNIX_TIMESTAMP() OR f.t = '-1') AS `t`, \ + (f.u > UNIX_TIMESTAMP() OR f.u = '-1') AS `u`, \ + (f.y > UNIX_TIMESTAMP() OR f.y = '-1') AS `y`, \ + (f.v > UNIX_TIMESTAMP() OR f.v = '-1') AS `v`, \ + (f.w > UNIX_TIMESTAMP() OR f.w = '-1') AS `w`, \ + (f.x > UNIX_TIMESTAMP() OR f.x = '-1') AS `x`, \ + (f.z > UNIX_TIMESTAMP() OR f.z = '-1') AS `z` " + ); + + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "FROM `%splayers_flags` AS f \ JOIN `%sservers` AS s ON s.id = f.server \ WHERE s.ip = '%s' \ AND s.port = '%s' \ - ORDER BY f.auth_data, f.type DESC", + ORDER BY f.auth_data, f.type DESC", TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort ); @@ -1203,8 +1230,7 @@ public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_ for (new i = 0; i < strlen(all_flags); ++i) { new temp[4]; formatex(temp, charsmax(temp), "%c", all_flags[i]); - new expire = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, temp)); - if (expire > get_systime() || expire == -1) { + if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, temp))) { player_flags[pfFLAGS] |= read_flags(temp); } } @@ -1466,80 +1492,112 @@ public log_to_sql(const text[]) } } -_loadServerData() +_loadSettings() { - if (SqlTuple) { - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT s.id, s.name, s.sms_service, CONCAT(' ', GROUP_CONCAT( ss.service_id SEPARATOR ' ' ), ' ') AS `services` \ - FROM `%sservers` AS s \ - LEFT JOIN `%sservers_services` AS ss ON ss.server_id = s.id \ - WHERE s.ip = '%s' AND s.port = '%s' \ - GROUP BY s.id", - TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort - ); + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%ssettings` \ + WHERE `key` IN ('shop_url', 'random_key')", + TABLE_PREFIX + ); + SQL_ThreadQuery(SqlTuple, "getSettingsHandler", g_szTemp); +} - SQL_ThreadQuery(SqlTuple, "loadServerDataHandler", g_szTemp); +public getSettingsHandler(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { + return; } -} + while (SQL_MoreResults(Query)) { + new key[128], value[256]; + + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "key"), key, charsmax(key)); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "value"), value, charsmax(value)); -public loadServerDataHandler(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - if (FailState == TQUERY_QUERY_FAILED) { - if (containi(Error, "exist") != -1) { - _error22(); + if (equali(key, "shop_url")) { + copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); + + // Remove trailing slash + if (strlen(g_shopPageUrl) && g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { + g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; + } + + if (! strlen(g_shopPageUrl)) { + _errorNoShopUrl(); + return; } } + else if (equali(key, "random_key")) { + copy(g_randomKey, charsmax(g_randomKey), value); + vc_md5(g_randomKey, g_randomKeyMD5); // Hashujemy random key + } - g_blocked = true; + SQL_NextRow(Query); + } + + _loadServerConfig(); +} + +_loadServerConfig() +{ + new url[MAX_URL + 1]; + formatex(url, charsmax(url), "%s/api/server/config?key=%s&ip=%s&port=%s&version=%s", g_shopPageUrl, g_randomKeyMD5, g_serverIp, g_serverPort, VERSION); + + if (!makeRequest("GET", url, 0, "", "onLoadServerConfigResponse")) { + _errorConfigFailed(999); + } +} + +public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, playerId) +{ + if (code != CURLE_OK) { + _errorConfigFailed(code); return; } - if (SQL_NumResults(Query) <= 0) { - _error21(); + if (statusCode == 404) { + _errorNoServer(); } - - // Pobranie id serwera - g_serverId = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id")); - - // Pobranie uslugi obslugujacej platnosci - new sms_service[MAX_TRANS_SERVICE_ID + 1]; - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms_service"), sms_service, charsmax(sms_service)); - if (strlen(sms_service)) { - copy(st_sms_service, charsmax(st_sms_service), sms_service); + + if (statusCode == 402) { + _errorOutdatedVersion(); } - - // Pozyskanie uslug na serwerze - new szServices[512]; - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "services"), szServices, charsmax(szServices)); - - if (SqlTuple) { - // Get shop settings - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%ssettings` \ - WHERE `key` IN ('currency', 'shop_url', 'signature', 'sms_service', 'contact', 'vat', 'random_key', 'license_password')", - TABLE_PREFIX - ); - SQL_ThreadQuery(SqlTuple, "getSettingsHandler", g_szTemp); - - // Update server info - formatex(g_szTemp, charsmax(g_szTemp), - "UPDATE `%sservers` \ - SET `type` = 'amxx', `version` = '%s' \ - WHERE `id` = '%d'", - TABLE_PREFIX, VERSION, g_serverId - ); - SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); + + if (statusCode >= 300) { + _errorConfigInvalidResponse(statusCode); + return; } - + + new szServices[512]; + + extractFieldValue(content, "id", g_szTemp, charsmax(g_szTemp)); + g_serverId = str_to_num(g_szTemp); + extractFieldValue(content, "sms_platform_id", g_szTemp, charsmax(g_szTemp)); + g_smsPlatformId = str_to_num(g_szTemp); + extractFieldValue(content, "sms_module_id", g_smsModuleId, charsmax(g_smsModuleId)); + extractFieldValue(content, "sms_text", g_smsText, charsmax(g_smsText)); + extractFieldValue(content, "services", szServices, charsmax(szServices)); + extractFieldValue(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); + extractFieldValue(content, "currency", g_currency, charsmax(g_currency)); + extractFieldValue(content, "contact", g_contact, charsmax(g_contact)); + extractFieldValue(content, "vat", g_szTemp, charsmax(g_szTemp)); + g_vat = str_to_float(g_szTemp); + extractFieldValue(content, "license_token", g_licenseToken, charsmax(g_licenseToken)); + + _validateLicense(); + _getServicesData(szServices); + _getSmsNumbers(); +} + +_getServicesData(const services[]) +{ // Sprawdzanie dostepnosci usług new service_id[MAX_SERVICE_ID + 1], service_id_space[MAX_SERVICE_ID + 2 + 1], ids[512], ids_len = 0, ids_max = charsmax(ids); for (new i = 0; i < ArraySize(service_ids); ++i) { ArrayGetString(service_ids, i, service_id, charsmax(service_id)); formatex(service_id_space, charsmax(service_id_space), " %s ", service_id); - if (containi(szServices, service_id_space) != -1) { + if (containi(services, service_id_space) != -1) { if (ids_len) { ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); } @@ -1638,7 +1696,7 @@ public getPriceListHandler(FailState, Handle:Query, Error[], Errorcode) new price[e_Price]; price[pTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_TRANS_SERVICE_ID); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_SERVICE_ID); price[AMOUNT] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "amount")); ArrayPushArray(pricelist, price); @@ -1647,97 +1705,38 @@ public getPriceListHandler(FailState, Handle:Query, Error[], Errorcode) } } -public getSettingsHandler(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } - - while (SQL_MoreResults(Query)) { - new key[128], value[256]; - - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "key"), key, charsmax(key)); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "value"), value, charsmax(value)); - - if (equali(key, "currency")) { - copy(st_currency, charsmax(st_currency), value); - } - else if (equali(key, "shop_url")) { - copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); - - // Remove trailing slash - if (strlen(g_shopPageUrl) && g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { - g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; - } - - if (! strlen(g_shopPageUrl)) { - _error33(); - } - } - else if (equali(key, "sms_service") && !strlen(st_sms_service)) { - copy(st_sms_service, charsmax(st_sms_service), value); - } - else if (equali(key, "contact")) { - copy(st_contact, charsmax(st_contact), value); - } - else if (equali(key, "vat")) { - st_vat = str_to_float(value); - } - else if (equali(key, "random_key")) { - copy(st_random_key, charsmax(st_random_key), value); - vc_md5(st_random_key, st_random_key_md5); // Hashujemy random key - } - else if (equali(key, "license_password")) { - copy(license_token, charsmax(license_token), value); - } - - SQL_NextRow(Query); - } - - _validateLicense(); - _loadUsers(); - +_getSmsNumbers() +{ if (SqlTuple) { - // Pobranie numerow sms - escapeQuotes(st_sms_service, charsmax(st_sms_service)); + new payment_module_id[MAX_PAYMENT_MODULE_ID + 1]; + formatex(payment_module_id, charsmax(payment_module_id), "%s", g_smsModuleId); + escapeQuotes(payment_module_id, charsmax(payment_module_id)); + formatex(g_szTemp, charsmax(g_szTemp), "SELECT `number`, `tariff` \ FROM `%ssms_numbers` \ WHERE `service` = '%s'", - TABLE_PREFIX, st_sms_service + TABLE_PREFIX, payment_module_id ); - SQL_ThreadQuery(SqlTuple, "getSMSesData", g_szTemp); - - // Pobranie danych o serwisie transakcyjnym - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%stransaction_services` \ - WHERE `id` = '%s'", - TABLE_PREFIX, st_sms_service - ); - SQL_ThreadQuery(SqlTuple, "getTransactionServiceData", g_szTemp); + SQL_ThreadQuery(SqlTuple, "getSmsNumbersHandler", g_szTemp); } } -_loadUsers() -{ - new url[MAX_URL + 1]; - formatex(url, charsmax(url), "%s/api/server/users/steam-ids?key=%s", g_shopPageUrl, st_random_key_md5); - makeRequest("GET", url, 0, "", "onLoadUsersResponse"); -} - -public onLoadUsersResponse(const content[], CURLcode: code, statusCode, playerId) -{ - if (code != CURLE_OK) { - log_to_file(LOG_FILE, "Nie udalo sie pozyskac listy uzytkownikow. Error: %d", code); +public getSmsNumbersHandler(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - if (statusCode >= 300) { - log_to_file(LOG_FILE, "Zapytanie o liste uzytkownikow wrociło bledny http code. Kod: %d", statusCode); - return; + new sms[e_SMS]; + while (SQL_MoreResults(Query)) + { + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "number"), sms[NUMBER], MAX_NUMBER); + sms[sTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); + ArrayPushArray(smses, sms); + + SQL_NextRow(Query); } - - formatex(g_accountsSteamIds, charsmax(g_accountsSteamIds), "%s", content); } _canPayWithWallet(id) @@ -1761,13 +1760,13 @@ _validateLicense() new body[MAX_BODY + 1]; { - new serverNameEscaped[MAX_SERVER_NAME * 2 + 1], signature; + new serverNameEscaped[MAX_SERVER_NAME * 2 + 1]; get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); formatex(header, charsmax(header), "Authorization: %s", - license_token + g_licenseToken ); headers = curl_slist_append(headers, header); @@ -1777,11 +1776,15 @@ _validateLicense() ); } - makeRequest("POST", "https://license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse"); + if (!makeRequest("POST", "https://license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse")) { + _errorForbidden("Brak miejsca w puli requestow"); + } } public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, playerId) { + g_shopRegistered = false; + if (g_validationAttempt) { _errorForbidden(); return; @@ -1790,12 +1793,9 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl g_validationAttempt = true; if (code != CURLE_OK) { - g_shopRegistered = false; log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z nieznanych powodow. Error: %d", code); return; } - - g_shopRegistered = false; if (statusCode == 401) { _errorInvalidToken(); @@ -1821,7 +1821,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl } if (statusCode >= 300) { - _errorInvalidResponse(statusCode); + _errorLicenseInvalidResponse(statusCode); return; } @@ -1830,7 +1830,6 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl trim(text); if (!equal(text, "ok")) { - g_shopRegistered = false; log_to_file(LOG_FILE, "%s", content); _errorUnknown(); return; @@ -1853,47 +1852,6 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl log_amx("Walidacja licencji zostala zakonczona pomyslnie"); } -public getTransactionServiceData(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } - - if (SQL_NumResults(Query) <= 0) { - _error31(); - } - - if (!SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sms"))) { - _error32(); - } - - new data[256]; - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), transaction_service[tsID], MAX_TRANS_SERVICE_ID); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), transaction_service[tsNAME], MAX_TRANS_SERVICE_NAME); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "data"), data, charsmax(data)); - - if (! json_decode(data, "sms_text", transaction_service[SMS_TEXT], MAX_SMS_TEXT)) { - log_to_file(LOG_FILE, "Nie udalo sie pozyskac kodu sms.^nDane: %s", data); - } -} - -public getSMSesData(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } - - new sms[e_SMS]; - while (SQL_MoreResults(Query)) - { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "number"), sms[NUMBER], MAX_NUMBER); - sms[sTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); - ArrayPushArray(smses, sms); - - SQL_NextRow(Query); - } -} - _checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { g_sqlConnected = true; @@ -2000,21 +1958,15 @@ public bool:native_is_steam(plugin, params) return is_steam(get_param(1)); } - -// ######### TYPY BŁĘDÓW ########## -// ## 1 - licencja -// ## 2 - problem z baza -// ## 3 - metody płatnosci -// ## 4 - sklep ogolnie -// ## 5 - probem z serwerem // ################################ +// License _errorUnknown() { log_to_file(LOG_FILE, "Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); g_blocked = true; } -_errorInvalidResponse(statusCode) { +_errorLicenseInvalidResponse(statusCode) { log_to_file(LOG_FILE, "Error 11 - Serwer walidacyjny zwrocil bledny HTTP CODE %d.", statusCode); g_blocked = true; } @@ -2039,29 +1991,30 @@ _errorForbidden(const text[] = "") { _make_error(message); } -_error21() { - _make_error("Error 21 - Serwer nie znajduje sie nie liscie serwerow na stronie WWW."); +// Config +_errorConfigFailed(code) { + log_to_file(LOG_FILE, "Error 20 - Nie udalo sie pobrac konfiguracji serwera. Error: %d", code); + g_blocked = true; } -_error22() { - _make_error("Error 22 - Brak tabeli ss_servers w bazie."); +_errorNoServer() { + _make_error("Error 21 - Serwer nie znajduje sie nie liscie serwerow na stronie WWW."); } -_error31() { - log_to_file(LOG_FILE, "Error 31 - Wybrana metoda platnosci nie istnieje w bazie danych."); - g_blocked = true; +_errorOutdatedVersion() { + _make_error("Error 22 - Obecna wersja pluginu nie jest juz wspierana. Dokonaj aktualizacji pluginu."); } -_error32() { - log_to_file(LOG_FILE, "Error 32 - Wybrana metoda platnosci nie obsluguje platnosci SMS."); +_errorConfigInvalidResponse(statusCode) { + log_to_file(LOG_FILE, "Error 23 - Podczas ladowania konfiguracji, strona WWW zwrocila bledny HTTP code %d.", statusCode); g_blocked = true; } -_error33() { - log_to_file(LOG_FILE, "Error 33 - Nie podano adresu sklepu w ustawieniach."); - g_blocked = true; +_errorNoShopUrl() { + _make_error("Error 24 - Nie podano adresu sklepu w ustawieniach."); } +// General _error51() { _make_error("Error 51 - Nie udalo sie utworzyc uchwytu do bazy danych."); } @@ -2210,7 +2163,7 @@ _getNumberByTariff(tariff, output[], len) bool:isDebug() { - return bool:get_pcvar_num(cvar_debug); + return false; } // ------------------------------------------------- Versions Compatibility ---------------------------------------------------- @@ -2287,6 +2240,26 @@ stock groupDigits(a, output[], len) } } +stock extractFieldValue(const text[], const field[], output[], len) +{ + new pattern[64]; + formatex(pattern, charsmax(pattern), "^^%s:(.*)$", field); + matchRegex(text, pattern, output, len, 1); +} + +stock matchRegex(const text[], const pattern[], output[], len, group = 0) +{ + new ret, error[32]; + new Regex:reg = regex_match(text, pattern, ret, error, charsmax(error), "m"); + + if (reg > REGEX_NO_MATCH) { + regex_substr(reg, group, output, len); + regex_free(reg); + } else { + log_to_file(LOG_FILE, "Regex error. Pattern: %s, Error: %s, Reg: %d", pattern, error, reg); + } +} + stock getXMLValue(const szText[], const tag[], output[], len) { new temp[64], textStart, textEnd; @@ -2346,97 +2319,3 @@ stock StringURLEncode(const szInput[], szOutput[], const iLen) return iFLen; } - -stock bool:json_decode(const string[], const key[], output[], output_len) -{ - new pos = 0; - new len = strlen(string); - new key_start, key_len; - new temp_key[ 512 ]; - new value_start, value_len; - new escaped = false; - - while (pos < len) { - - while (string[pos] != '"') { - pos++; - } - - // Pozyskujemy nazwe klucza - key_start = pos + 1; - escaped = false; - while (++pos < len) { - if (pos == len) { - return false; - } - - if (escaped) { - escaped = false; - } else if (string[ pos ] == '\') { - escaped = true; - } else if (string [ pos ] == '"') { - break; - } - } - - if (pos == len) { - return false; - } - - if (!(key_len = pos - key_start)) { - continue; - } - - copy(temp_key, min(charsmax(temp_key), key_len), string[key_start]); - - pos++; // Przechodzimy o jeden dalej, bo zatrzymalismy sie na znaku '"' - while (pos < len && isspace(string[pos])) ++pos; - if (pos == len) { - return false; - } - - if (string[ pos ] != ':') { - continue; - } - - pos++; // Przechodzimy o jeden dalej, bo zatrzymalismy sie na znaku ':' - - while (pos < len && isspace(string[pos])) ++pos; - if (pos == len) { - return false; - } - - value_start = pos; - - pos--; // Wracamy o jeden, bo pozniej mamy pre inkrementacje - while (++pos < len) { - if (escaped) { - escaped = false; - } else if (string[ pos ] == '\') { - escaped = true; - } else if (string [ pos ] == ',' || string [ pos ] == '}') { - break; - } - } - if (pos == len) { - return false; - } - - if (!(value_len = pos - value_start)) { - continue; - } - - // Jezeli klucz jest inny niz ten w argumencie funkcji, to nie kopiuj jego value - if (!equal(temp_key, key)) { - continue; - } - - copy(output, min(output_len, value_len), string[value_start]); - trim(output); - remove_quotes(output); - - return true; - } - - return false; -} From 5df2f6042ea05a22c6742ebfe60678f11d274a7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 8 Jan 2020 12:25:59 +0100 Subject: [PATCH 036/124] Pass version --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 425557b..f39d3c6 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1771,8 +1771,8 @@ _validateLicense() headers = curl_slist_append(headers, header); formatex(body, charsmax(body), - "platform=amxmodx&url=%s:%s&name=%s&version=%s&signature=%d", - g_serverIp, g_serverPort, serverNameEscaped, VERSION, g_signature + "platform=amxmodx&url=%s:%s&name=%s&version=%s&signature=%d&platform_version=%s", + g_serverIp, g_serverPort, serverNameEscaped, VERSION, g_signature, AMXX_VERSION_STR ); } From 15ccc615afb29c799878b9d756289369b51ecb29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 00:27:43 +0100 Subject: [PATCH 037/124] Increase response size --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index f39d3c6..c774884 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -82,7 +82,7 @@ new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_k new config_path[128]; // Requests -const MAX_RESPONSE = 256; +const MAX_RESPONSE = 1024; const MAX_RESPONSE_COUNT = 5; new g_requestCounter = 0; new g_responses[MAX_RESPONSE_COUNT][MAX_RESPONSE + 1]; From 2c23727a7f963326bf57a5cacd289d27d6a01d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 00:42:49 +0100 Subject: [PATCH 038/124] Do not allow purchasing --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index c774884..e71a07e 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -365,6 +365,7 @@ public sklepMenu(id) client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); return; } + if (!g_shopRegistered) { client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); return; @@ -819,6 +820,11 @@ public kodZwrotny(id) purchaseService(id, const method[], const sms_code[] = "") { client_print_color(id, Red, "^4[%s] ^1Trwa przeprowadzanie zakupu...", PREFIX); + + if (!_canUseShop()) { + client_print_color(id, Red, "^4[%s] ^1Sklep jest tymczaosowo nieaktywny.", PREFIX); + return; + } new url[MAX_URL + 1]; new body[MAX_BODY + 1]; @@ -1876,6 +1882,11 @@ _checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) return PLUGIN_CONTINUE; } +_canUseShop() +{ + return !g_blocked && g_shopRegistered && get_pcvar_num(cvar_on) && g_sqlConnected; +} + public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { _checkForSQLErrors(Query, FailState, Error, Errorcode); From 95b38ca1e27923f4da1fe9c9a1498a077796952b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 00:47:47 +0100 Subject: [PATCH 039/124] Version 3.8.1 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index e2fb8f7..0921b93 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.8.0" +#define VERSION "3.8.1" #define PREFIX "SKLEP-SMS" From 2cbc8b342dd61ecf1116cf3377045517e6ece4d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 12:32:42 +0100 Subject: [PATCH 040/124] Rearrange code --- .../addons/amxmodx/scripting/sklep_sms.sma | 627 +++++++++--------- 1 file changed, 310 insertions(+), 317 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index e71a07e..ccc9085 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -145,11 +145,11 @@ new bool:g_AmxbansExists = false; public plugin_natives() { register_library("shop_sms"); - register_native("ss_register_service", "registerService"); + register_native("ss_register_service", "native_registerService"); register_native("ss_show_service_purchase", "native_showServicePurchase"); - register_native("ss_show_sms_info", "native_infoSMS"); - register_native("ss_add_code", "native_addCode"); - register_native("ss_log", "dodajLog"); + register_native("ss_show_sms_info", "native_displaySmsDetails"); + register_native("ss_add_code", "native_addSmsCode"); + register_native("ss_log", "native_addLog"); register_native("ss_is_steam", "native_is_steam"); } @@ -233,10 +233,10 @@ public plugin_init() { register_plugin("Sklep SMS", VERSION, "SeeK"); - register_menucmd(register_menuid("SMS_Info"), KEYS, "infoSMS_handler"); - register_concmd("Podaj_Kod_Zwrotny", "kodZwrotny"); - register_concmd("ssnick_Podaj_Haslo", "menuServiceType_nick"); - register_concmd("ssip_Podaj_Haslo", "menuServiceType_ip"); + register_menucmd(register_menuid("smsDetails"), KEYS, "smsDetails_handler"); + register_concmd("Podaj_Kod_Zwrotny", "onSmsCodeEntered"); + register_concmd("ssnick_Podaj_Haslo", "onNickPasswordEntered"); + register_concmd("ssip_Podaj_Haslo", "onIpPasswordEntered"); register_concmd("sklepsms_reloaddata", "realoadPlayersServices"); register_concmd("sklepsms_reloadusers", "pre_reassignPlayersFlags"); @@ -244,36 +244,16 @@ public plugin_init() register_clcmd("say_team", "sayHook"); if (show_info) { - set_task(137.0, "reklama", _, _, _, "b"); + set_task(137.0, "displayCommercial", _, _, _, "b"); } g_signature = random_num(1, 99999999); } -public loadCvars() -{ - get_pcvar_string(cvar_sklep, sklep_komenda, charsmax(sklep_komenda)); - get_pcvar_string(cvar_przeladuj, przeladuj_komenda, charsmax(przeladuj_komenda)); - get_pcvar_string(cvar_uslugi, uslugi_komenda, charsmax(uslugi_komenda)); - show_info = get_pcvar_num(cvar_show_info); - - get_pcvar_string(cvar_host, sql_host, charsmax(sql_host)); - get_pcvar_string(cvar_user, sql_user, charsmax(sql_user)); - get_pcvar_string(cvar_pass, sql_pass, charsmax(sql_pass)); - get_pcvar_string(cvar_db, sql_db, charsmax(sql_db)); -} - -public plugin_end() -{ - if (SqlTuple) { - SqlTuple = Empty_Handle; - } -} - public plugin_cfg() { // Blad przy tworzeniu (brak uprawnien) if (!file_exists(config_path)) { - brakSciezki(0, config_path); + _invalidPath(0, config_path); } // Ponowne wczytywanie confingu @@ -282,7 +262,7 @@ public plugin_cfg() { server_exec(); } - loadCvars(); + _loadCvars(); // Łaczenie z baza SqlTuple = SQL_MakeDbTuple(sql_host, sql_user, sql_pass, sql_db); @@ -303,15 +283,26 @@ public plugin_cfg() { _loadSettings(); } -public checkLoadedServices() +public plugin_end() { - if (!ArraySize(services)) { - log_amx("Nie zaladowano zadnych uslug do zakupienia."); - } else { - log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(services)); + if (SqlTuple) { + SqlTuple = Empty_Handle; } } +_loadCvars() +{ + get_pcvar_string(cvar_sklep, sklep_komenda, charsmax(sklep_komenda)); + get_pcvar_string(cvar_przeladuj, przeladuj_komenda, charsmax(przeladuj_komenda)); + get_pcvar_string(cvar_uslugi, uslugi_komenda, charsmax(uslugi_komenda)); + show_info = get_pcvar_num(cvar_show_info); + + get_pcvar_string(cvar_host, sql_host, charsmax(sql_host)); + get_pcvar_string(cvar_user, sql_user, charsmax(sql_user)); + get_pcvar_string(cvar_pass, sql_pass, charsmax(sql_pass)); + get_pcvar_string(cvar_db, sql_db, charsmax(sql_db)); +} + public client_authorized(id) { _usersCheckUser(id); @@ -328,7 +319,7 @@ public sayHook(id) read_argv(1, tekst, charsmax(tekst)); if (equali(tekst, sklep_komenda)) { - sklepMenu(id); + _openShopMenu(id); } else if (equali(tekst, przeladuj_komenda)) { pre_reassignPlayersFlags(id); @@ -340,8 +331,9 @@ public sayHook(id) return get_pcvar_num(cvar_silent_command) ? PLUGIN_HANDLED : PLUGIN_CONTINUE; } -/* Menu sklepu */ -public sklepMenu(id) +// ------------------------------------------------- Shop Menu ---------------------------------------------------- + +_openShopMenu(id) { if (!is_user_connected(id)) { return; @@ -373,12 +365,12 @@ public sklepMenu(id) new menu; if (g_footer) { - menu = menu_create("\rSklep SMS\d napedzany przez\w sklep-sms.pl^n\yWybierz usluge:", "sklepMenu_handler"); + menu = menu_create("\rSklep SMS\d napedzany przez\w sklep-sms.pl^n\yWybierz usluge:", "shopMenu_handler"); } else { - menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "sklepMenu_handler"); + menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "shopMenu_handler"); } - new menu_callback = menu_makecallback("sklepMenu_callback"); + new menu_callback = menu_makecallback("shopMenu_callback"); new szText[64], service[e_Service]; for (new i = 0; i < ArraySize(services); ++i) { @@ -420,7 +412,7 @@ public sklepMenu(id) client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, g_contact); } -public sklepMenu_callback(id, menu, item) +public shopMenu_callback(id, menu, item) { new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); @@ -428,7 +420,7 @@ public sklepMenu_callback(id, menu, item) return data[1] == ITEM_DISABLED ? ITEM_DISABLED : ITEM_ENABLED; } -public sklepMenu_handler(id, menu, item) +public shopMenu_handler(id, menu, item) { if (!is_user_connected(id) || item == MENU_EXIT) { menu_destroy(menu); @@ -438,13 +430,11 @@ public sklepMenu_handler(id, menu, item) new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - wyborMenu(id, data[0]-1); + _openPricingMenu(id, data[0]-1); menu_destroy(menu); } -/* Konie menu sklepu */ -/* Menu wyboru */ -public wyborMenu(id, service_id) +_openPricingMenu(id, service_id) { if (!is_user_connected(id)) { return; @@ -457,7 +447,7 @@ public wyborMenu(id, service_id) formatex(szText, charsmax(szText), "\rSklep SMS^n\yWybierz ilosc %s:", service[sNAME]); - new menu = menu_create(szText, "wyborMenu_handler"); + new menu = menu_create(szText, "pricingMenu_handler"); new price[e_Price], number[MAX_NUMBER+1]; for (new i = 0; i < ArraySize(pricelist); ++i) { @@ -500,16 +490,20 @@ public wyborMenu(id, service_id) if (menu_items(menu) > 1) { menu_display(id, menu); - } else if (menu_items(menu) == 1) { // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie + } + // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie + else if (menu_items(menu) == 1) { which_service[id] = service_id; which_price[id] = data[1]+data[2]; - displayServiceTypeMenu(id); - } else { // Zero + _openServiceTypeMenu(id); + } + // Zero + else { client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); } } -public wyborMenu_handler(id, menu, item) +public pricingMenu_handler(id, menu, item) { if (!is_user_connected(id) || item == MENU_EXIT) { menu_destroy(menu); @@ -522,37 +516,19 @@ public wyborMenu_handler(id, menu, item) which_service[id] = data[0] - 1; which_price[id] = data[1] + data[2]; - displayServiceTypeMenu(id); + _openServiceTypeMenu(id); menu_destroy(menu); } -/* Koniec menu wyboru */ -public keepDisplayingMenu(data[]) -{ - new id = data[0]; - if (!is_user_connected(id)) { - menu_destroy(data[1]); - return; - } - - new menu, newmenu; - player_menu_info(id, menu, newmenu); - if (newmenu != data[1]) { - menu_display(id, data[1]); - } - - set_task(0.1, "keepDisplayingMenu", TASK_KEEP_DISPLAYING_MENU + id, data, 2); -} - -public displayServiceTypeMenu(id) +_openServiceTypeMenu(id) { new service[e_Service]; ArrayGetArray(services, which_service[id], service); if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { // Wyswietlamy menu z wyborem na co chcemy kupic usluge - new menu = menu_create("Wybierz typ uslugi", "menuServiceType_handler"); - new menu_callback = menu_makecallback("menuServiceType_callback"); + new menu = menu_create("Wybierz typ uslugi", "serviceTypeMenu_handler"); + new menu_callback = menu_makecallback("serviceTypeMenu_callback"); menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); @@ -570,7 +546,7 @@ public displayServiceTypeMenu(id) } } -public menuServiceType_callback(id, menu, item) +public serviceTypeMenu_callback(id, menu, item) { new service[e_Service]; ArrayGetArray(services, which_service[id], service); @@ -584,7 +560,7 @@ public menuServiceType_callback(id, menu, item) return ITEM_DISABLED; } -public menuServiceType_handler(id, menu, item) +public serviceTypeMenu_handler(id, menu, item) { if (0 <= item && item <= 2) { remove_task(TASK_KEEP_DISPLAYING_MENU+id); @@ -604,27 +580,27 @@ public menuServiceType_handler(id, menu, item) } } -public menuServiceType_nick(id) +public onNickPasswordEntered(id) { new szPassword[MAX_PASSWORD + 1]; read_argv(1, szPassword, charsmax(szPassword)); - if (!_menuServiceType_checkPass(id, TYPE_NICK, szPassword)) { + if (!_serviceTypeMenu_checkPass(id, TYPE_NICK, szPassword)) { client_cmd(id, "messagemode ssnick_Podaj_Haslo"); } } -public menuServiceType_ip(id) +public onIpPasswordEntered(id) { new szPassword[MAX_PASSWORD + 1]; read_argv(1, szPassword, charsmax(szPassword)); - if (! _menuServiceType_checkPass(id, TYPE_IP, szPassword)) { + if (! _serviceTypeMenu_checkPass(id, TYPE_IP, szPassword)) { client_cmd(id, "messagemode ssip_Podaj_Haslo"); } } -bool:_menuServiceType_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) +bool:_serviceTypeMenu_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) { if (strlen(szPassword) > 30) { client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); @@ -639,30 +615,6 @@ bool:_menuServiceType_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) return true; } -public checkServicePassword(FailState, Handle:Query, Error[], Errorcode, data[], data_size) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } - - new id = data[0]; - new type = data[1]; - // Haslo takie jak do innych uslug - if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "equal"))) { - new szPassword[MAX_PASSWORD + 1]; - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), szPassword, charsmax(szPassword)); - _serviceChosen(id, type, szPassword); - } - else if (type == TYPE_NICK) { - client_print_color(id, Red, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3nick^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); - client_cmd(id, "messagemode ssnick_Podaj_Haslo"); - } - else if (type == TYPE_IP) { - client_print_color(id, Blue, "^4[%s] ^1Istnieje juz usluga wykupiona na ten ^3adres IP^1, lecz posiada inne haslo. Wprowadz haslo ^3ponownie^1.", PREFIX); - client_cmd(id, "messagemode ssip_Podaj_Haslo"); - } -} - _serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") { new service[e_Service], price[e_Price]; @@ -677,17 +629,17 @@ _serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") DestroyForward(forward_handle); if (ret != SS_STOP) { - displayPaymentMethodMenu(id); + _openPaymentMethodMenu(id); } } -public displayPaymentMethodMenu(id) +_openPaymentMethodMenu(id) { new service[e_Service]; ArrayGetArray(services, which_service[id], service); - new menu = menu_create("Wybierz metode platnosci", "menuPaymentMethod_handler"); - new menu_callback = menu_makecallback("menuPaymentMethod_callback"); + new menu = menu_create("Wybierz metode platnosci", "paymentMethodMenu_handler"); + new menu_callback = menu_makecallback("paymentMethodMenu_callback"); menu_additem(menu, "SMS", "", 0, menu_callback); menu_additem(menu, "Portfel", "", 0, menu_callback); @@ -699,7 +651,7 @@ public displayPaymentMethodMenu(id) keepDisplayingMenu(data); } -public menuPaymentMethod_callback(id, menu, item) +public paymentMethodMenu_callback(id, menu, item) { switch (item) { case 0: { @@ -713,22 +665,22 @@ public menuPaymentMethod_callback(id, menu, item) return ITEM_DISABLED; } -public menuPaymentMethod_handler(id, menu, item) +public paymentMethodMenu_handler(id, menu, item) { remove_task(TASK_KEEP_DISPLAYING_MENU + id); menu_destroy(menu); switch (item) { case 0: { - displayInfoSMS(id); + _displaySmsDetails(id); } case 1: { - purchaseService(id, "wallet"); + _purchaseService(id, "wallet"); } } } -displayInfoSMS(id) +_displaySmsDetails(id) { if (!is_user_connected(id)) { return; @@ -757,21 +709,21 @@ displayInfoSMS(id) ); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); - keepDisplayingInfoSMS(g_szTemp, TASK_KEEP_INFO_SMS + id); + keepDisplayingSmsDetails(g_szTemp, TASK_KEEP_INFO_SMS + id); } -public keepDisplayingInfoSMS(const info[], id) +public keepDisplayingSmsDetails(const info[], id) { id -= TASK_KEEP_INFO_SMS; if (!is_user_connected(id)) { return; } - show_menu(id, KEYS, info, 1, "SMS_Info"); - set_task(0.9, "keepDisplayingInfoSMS", id+TASK_KEEP_INFO_SMS, info, strlen(info)); + show_menu(id, KEYS, info, 1, "smsDetails"); + set_task(0.9, "keepDisplayingSmsDetails", id+TASK_KEEP_INFO_SMS, info, strlen(info)); } -public infoSMS_handler(id, key) +public smsDetails_handler(id, key) { if (task_exists(TASK_KEEP_INFO_SMS + id)) { remove_task(TASK_KEEP_INFO_SMS + id); @@ -789,7 +741,7 @@ public infoSMS_handler(id, key) } // Wprowadzanie kodu zwrotnego -public kodZwrotny(id) +public onSmsCodeEntered(id) { if (!is_user_connected(id)) { return; @@ -798,7 +750,7 @@ public kodZwrotny(id) new sms_code[MAX_CODE + 1]; read_argv(1, sms_code, charsmax(sms_code)); - dodajLog2(id, "Wprowadzono kod: %s", sms_code); + _log(id, "Wprowadzono kod: %s", sms_code); if (!strlen(sms_code)) { client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); @@ -815,10 +767,10 @@ public kodZwrotny(id) return; } - purchaseService(id, "sms", sms_code); + _purchaseService(id, "sms", sms_code); } -purchaseService(id, const method[], const sms_code[] = "") { +_purchaseService(id, const method[], const sms_code[] = "") { client_print_color(id, Red, "^4[%s] ^1Trwa przeprowadzanie zakupu...", PREFIX); if (!_canUseShop()) { @@ -886,12 +838,12 @@ purchaseService(id, const method[], const sms_code[] = "") { formatex(url, charsmax(url), "%s/api/server/purchase?key=%s&language=polish", g_shopPageUrl, g_randomKeyMD5); } - if (!makeRequest("POST", url, headers, body, "getWebPagePurchaseService", id)) { + if (!makeRequest("POST", url, headers, body, "onPurchaseServiceResponse", id)) { client_print_color(id, Red, "^4[%s] ^1Nie udalo sie wykonac zapytania HTTP.", PREFIX); } } -public getWebPagePurchaseService(const content[], CURLcode: code, statusCode, playerId) +public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, playerId) { if (code != CURLE_OK) { log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); @@ -920,10 +872,10 @@ public getWebPagePurchaseService(const content[], CURLcode: code, statusCode, pl log_amx("Invalid response: %s", content); } - purchaseServicePost(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); + _handlePurchaseServiceResponse(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); } -public purchaseServicePost(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) +_handlePurchaseServiceResponse(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) { if (! is_user_connected(id)) { return; @@ -972,7 +924,7 @@ public purchaseServicePost(id, const return_value[], const szText[], positive, b format(amount, charsmax(amount), "%s %s", amount, service[TAG]); } - dodajLog2(id, "Wystapil blad podczas kupowania %s - %s; Taryfa: %d", service[sNAME], amount, price[pTARIFF]); + _log(id, "Wystapil blad podczas kupowania %s - %s; Taryfa: %d", service[sNAME], amount, price[pTARIFF]); return; } @@ -1021,30 +973,6 @@ public purchaseServicePost(id, const return_value[], const szText[], positive, b } } -/** - * Dodanie kodu do bazy kodow - * - * @param const char[] sms_code - * @param int sms_tariff - * @param bool free - */ -addCode(const sms_code[], sms_tariff, bool:free = true) -{ - formatex(g_szTemp, charsmax(g_szTemp), - "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) \ - VALUES ('%s', '%d', '%d')", - TABLE_PREFIX, sms_code, sms_tariff, free - ); - - if (!SqlTuple) { - return SS_ERROR; - } - - SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); - dodajLog2(0, "Dodano SMSa do tabeli kodow do wykorzystania. Kod: %s Taryfa: %d", sms_code, sms_tariff); - return SS_OK; -} - // Wyswietlenie obecnych uslug gracza _showPlayerServices(id) @@ -1075,11 +1003,11 @@ _showPlayerServices(id) TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, g_serverId, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid ); - SQL_ThreadQuery(SqlTuple, "getPlayerServices", g_szTemp, data, sizeof data); + SQL_ThreadQuery(SqlTuple, "getPlayerServicesHandler", g_szTemp, data, sizeof data); } } -public getPlayerServices(FailState, Handle:Query, Error[], Errorcode, data[], data_size) +public getPlayerServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { new id = data[0]; if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { @@ -1448,56 +1376,6 @@ public _usersCheckUser(id) } } -public brakSciezki(id, const path[]) -{ - dodajLog2(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); - log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); - - if (id) { - client_print_color(id, Blue, "^4[%s] ^1Wystapil ^3blad ^1przy zapisywaniu ustawien. Prawdopodobnie ^4brak uprawnien^1.", PREFIX); - } -} - -public reklama() -{ - if (get_playersnum()>1) { - client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, sklep_komenda); - } -} - -public dodajLog2(id, const szFormat[], any:...) -{ - #if defined LOG_SQL - vformat(g_szTemp, charsmax(g_szTemp), szFormat, 3); - - if (is_user_connected(id)) { - new name[MAX_NAME + 1], ip[MAX_IP + 1], sid[MAX_SID + 1]; - get_user_name(id, name, charsmax(name)); - get_user_ip(id, ip, charsmax(ip), true); - get_user_authid(id, sid, charsmax(sid)); - format(g_szTemp, charsmax(g_szTemp), "%s; %s; %s. %s", name, ip, sid, g_szTemp); - } - - log_to_sql(g_szTemp); - #endif -} - -public log_to_sql(const text[]) -{ - if (SqlTuple) { - format(g_szTemp, charsmax(g_szTemp), "%s. Serwer: %d", text, g_serverId); - escapeQuotes(g_szTemp, charsmax(g_szTemp)); - - // Cannot be formatex, because param text is probably g_szTemp - format(g_szTemp, charsmax(g_szTemp), - "INSERT INTO `%slogs` (text) \ - VALUES ('%s')", - TABLE_PREFIX, g_szTemp - ); - SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); - } -} - _loadSettings() { formatex(g_szTemp, charsmax(g_szTemp), @@ -1505,10 +1383,10 @@ _loadSettings() WHERE `key` IN ('shop_url', 'random_key')", TABLE_PREFIX ); - SQL_ThreadQuery(SqlTuple, "getSettingsHandler", g_szTemp); + SQL_ThreadQuery(SqlTuple, "loadSettingsHandler", g_szTemp); } -public getSettingsHandler(FailState, Handle:Query, Error[], Errorcode) +public loadSettingsHandler(FailState, Handle:Query, Error[], Errorcode) { if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; @@ -1563,10 +1441,12 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p if (statusCode == 404) { _errorNoServer(); + return; } if (statusCode == 402) { _errorOutdatedVersion(); + return; } if (statusCode >= 300) { @@ -1591,11 +1471,11 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p extractFieldValue(content, "license_token", g_licenseToken, charsmax(g_licenseToken)); _validateLicense(); - _getServicesData(szServices); + _getServices(szServices); _getSmsNumbers(); } -_getServicesData(const services[]) +_getServices(const services[]) { // Sprawdzanie dostepnosci usług new service_id[MAX_SERVICE_ID + 1], service_id_space[MAX_SERVICE_ID + 2 + 1], ids[512], ids_len = 0, ids_max = charsmax(ids); @@ -1631,14 +1511,14 @@ _getServicesData(const services[]) TABLE_PREFIX, ids ); - SQL_ThreadQuery(SqlTuple, "getServicesDataHandler", g_szTemp); + SQL_ThreadQuery(SqlTuple, "getServicesHandler", g_szTemp); } } else { - checkLoadedServices(); // Sprawdz zaladowane uslugi + _checkLoadedServices(); } } -public getServicesDataHandler(FailState, Handle:Query, Error[], Errorcode) { +public getServicesHandler(FailState, Handle:Query, Error[], Errorcode) { if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } @@ -1674,8 +1554,7 @@ public getServicesDataHandler(FailState, Handle:Query, Error[], Errorcode) { SQL_NextRow(Query); } - // Sprawdz zaladowane uslugi - checkLoadedServices(); + _checkLoadedServices(); // Jest chociaz jedna usluga if (ids_len) { @@ -1745,20 +1624,74 @@ public getSmsNumbersHandler(FailState, Handle:Query, Error[], Errorcode) } } -_canPayWithWallet(id) -{ - new steam_id[MAX_SID + 2]; +/** + * Dodanie kodu do bazy kodow + * + * @param const char[] sms_code + * @param int sms_tariff + * @param bool free + */ +_addSmsCode(const sms_code[], sms_tariff, bool:free = true) +{ + formatex(g_szTemp, charsmax(g_szTemp), + "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) \ + VALUES ('%s', '%d', '%d')", + TABLE_PREFIX, sms_code, sms_tariff, free + ); + + if (!SqlTuple) { + return SS_ERROR; + } + + SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); + _log(0, "Dodano SMSa do tabeli kodow do wykorzystania. Kod: %s Taryfa: %d", sms_code, sms_tariff); + return SS_OK; +} - get_user_authid(id, steam_id, charsmax(steam_id)); - // CSGO uses different steamid prefix. STEAM_1 instead of STEAM_0. - // That is why we want to ignore SID prefix. - replace(steam_id, charsmax(steam_id), "STEAM_1", ""); - replace(steam_id, charsmax(steam_id), "STEAM_0", ""); - format(steam_id, charsmax(steam_id), "%s;", steam_id); +_log(id, const szFormat[], any:...) +{ + #if defined LOG_SQL + vformat(g_szTemp, charsmax(g_szTemp), szFormat, 3); + + if (is_user_connected(id)) { + new name[MAX_NAME + 1], ip[MAX_IP + 1], sid[MAX_SID + 1]; + get_user_name(id, name, charsmax(name)); + get_user_ip(id, ip, charsmax(ip), true); + get_user_authid(id, sid, charsmax(sid)); + format(g_szTemp, charsmax(g_szTemp), "%s; %s; %s. %s", name, ip, sid, g_szTemp); + } + + _logToSql(g_szTemp); + #endif +} - return containi(g_accountsSteamIds, steam_id) != -1; +_logToSql(const text[]) +{ + if (SqlTuple) { + format(g_szTemp, charsmax(g_szTemp), "%s. Serwer: %d", text, g_serverId); + escapeQuotes(g_szTemp, charsmax(g_szTemp)); + + // Cannot be formatex, because param text is probably g_szTemp + format(g_szTemp, charsmax(g_szTemp), + "INSERT INTO `%slogs` (text) \ + VALUES ('%s')", + TABLE_PREFIX, g_szTemp + ); + SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); + } } +public displayCommercial() +{ + if (get_playersnum() > 1) { + client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, sklep_komenda); + } +} + +// +// ----------------------------------------------- LICENSE ---------------------------------------------------- +// + _validateLicense() { new curl_slist: headers; @@ -1858,6 +1791,10 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl log_amx("Walidacja licencji zostala zakonczona pomyslnie"); } +// +// ------------------------------------------------- HELPERS ---------------------------------------------------- +// + _checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) { g_sqlConnected = true; @@ -1882,94 +1819,111 @@ _checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) return PLUGIN_CONTINUE; } -_canUseShop() -{ - return !g_blocked && g_shopRegistered && get_pcvar_num(cvar_on) && g_sqlConnected; -} - public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) { _checkForSQLErrors(Query, FailState, Error, Errorcode); } -/* ######################################################################################################################### - * ############################################### Zewnetrzne funkcje ###################################################### - * ######################################################################################################################### - */ - -public registerService(plugin, params) +public keepDisplayingMenu(data[]) { - if (params != 1) { - log_to_file(LOG_FILE, "Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); - return SS_BAD_ARGS; + new id = data[0]; + if (!is_user_connected(id)) { + menu_destroy(data[1]); + return; } - - new id[MAX_SERVICE_ID + 1]; - - get_string(1, id, charsmax(id)); - ArrayPushCell(service_plugins, plugin); - ArrayPushString(service_ids, id); - - return SS_OK; + new menu, newmenu; + player_menu_info(id, menu, newmenu); + if (newmenu != data[1]) { + menu_display(id, data[1]); + } + + set_task(0.1, "keepDisplayingMenu", TASK_KEEP_DISPLAYING_MENU + id, data, 2); } -// Dodawanie kodu do listy kodow do wykorzystania -public native_addCode(plugin, params) +_invalidPath(id, const path[]) { - if (params != 2) { - return SS_BAD_ARGS; - } - - new sms_code[MAX_CODE + 1], tariff; - get_string(1, sms_code, charsmax(sms_code)); - tariff = get_param(2); + _log(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); + log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); - return addCode(sms_code, tariff); + if (id) { + client_print_color(id, Blue, "^4[%s] ^1Wystapil ^3blad ^1przy zapisywaniu ustawien. Prawdopodobnie ^4brak uprawnien^1.", PREFIX); + } } -// Logowanie danych z pluginow zewnetrznych -public dodajLog(plugin, params) -{ - #if defined LOG_SQL - vdformat(g_szTemp, charsmax(g_szTemp), 1, 2); - log_to_sql(g_szTemp); - #endif +_getServicePluginByID(const id[]) +{ + new tmp[MAX_SERVICE_ID + 1]; + for (new i = 0; i < ArraySize(service_ids); ++i) { + ArrayGetString(service_ids, i, tmp, charsmax(tmp)); + if (equali(id, tmp)) { + return ArrayGetCell(service_plugins, i); + } + } + + return -1; } -public native_showServicePurchase(plugin, params) +_getServiceByID(const id[]) { - if (params != 2) { - return SS_BAD_ARGS; + new service[e_Service]; + for (new i = 0; i < ArraySize(services); ++i) { + ArrayGetArray(services, i, service); + if (equal(id, service[sID])) { + return i; + } } - - new service_id[MAX_SERVICE_ID + 1]; - new id = get_param(1); - get_string(2, service_id, charsmax(service_id)); - - wyborMenu(id, _getServiceByID(service_id)); - return SS_OK; + return -1; } -public native_infoSMS(plugin, params) +_getNumberByTariff(tariff, output[], len) { - if (params != 1) { - return SS_BAD_ARGS; + new sms[e_SMS]; + for (new i = 0; i < ArraySize(smses); ++i) { + ArrayGetArray(smses, i, sms); + if (tariff == sms[sTARIFF]) { + copy(output, len, sms[NUMBER]); + return; + } } - - displayInfoSMS(get_param(1)); - return SS_OK; } -public bool:native_is_steam(plugin, params) +_checkLoadedServices() { - if (params != 1) { - return false; + if (!ArraySize(services)) { + log_amx("Nie zaladowano zadnych uslug do zakupienia."); + } else { + log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(services)); } - - return is_steam(get_param(1)); } -// ################################ + +_canUseShop() +{ + return !g_blocked && g_shopRegistered && get_pcvar_num(cvar_on) && g_sqlConnected; +} + +_canPayWithWallet(id) +{ + new steam_id[MAX_SID + 2]; + + get_user_authid(id, steam_id, charsmax(steam_id)); + // CSGO uses different steamid prefix. STEAM_1 instead of STEAM_0. + // That is why we want to ignore SID prefix. + replace(steam_id, charsmax(steam_id), "STEAM_1", ""); + replace(steam_id, charsmax(steam_id), "STEAM_0", ""); + format(steam_id, charsmax(steam_id), "%s;", steam_id); + + return containi(g_accountsSteamIds, steam_id) != -1; +} + +bool:_isDebug() +{ + return false; +} + +// +// ------------------------------------------------- ERRORS ---------------------------------------------------- +// // License _errorUnknown() { @@ -2033,7 +1987,10 @@ _error51() { _make_error(message[]) { set_fail_state(message); } -/* ############# Koniec: Licencja ################## */ + +// +// ------------------------------------------------- HTTP Requests ---------------------------------------------------- +// /** * Make HTTP request @@ -2051,7 +2008,7 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade { new CURL: handle, curl_slist: newHeaders, data[requestStruct]; - if (isDebug()) { + if (_isDebug()) { log_amx("Request | %s %s %s", method, url, body); } @@ -2118,7 +2075,7 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade runRequestCallback(const function[], const httpResponseContent[], playerId, CURLcode: code, statusCode) { - if (isDebug()) { + if (_isDebug()) { log_amx("Request response | %d %d %s", code, statusCode, httpResponseContent); } @@ -2133,51 +2090,87 @@ runRequestCallback(const function[], const httpResponseContent[], playerId, CURL } } -// ----------------------------------------------------- End of requests -------------------------------------------------------- -_getServicePluginByID(const id[]) -{ - new tmp[MAX_SERVICE_ID + 1]; - for (new i = 0; i < ArraySize(service_ids); ++i) { - ArrayGetString(service_ids, i, tmp, charsmax(tmp)); - if (equali(id, tmp)) { - return ArrayGetCell(service_plugins, i); - } +// +// ------------------------------------------------- External Functions ---------------------------------------------------- +// + +public native_registerService(plugin, params) +{ + if (params != 1) { + log_to_file(LOG_FILE, "Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); + return SS_BAD_ARGS; } + + new id[MAX_SERVICE_ID + 1]; - return -1; + get_string(1, id, charsmax(id)); + + ArrayPushCell(service_plugins, plugin); + ArrayPushString(service_ids, id); + + return SS_OK; } -_getServiceByID(const id[]) +// Dodawanie kodu do listy kodow do wykorzystania +public native_addSmsCode(plugin, params) +{ + if (params != 2) { + return SS_BAD_ARGS; + } + + new sms_code[MAX_CODE + 1], tariff; + get_string(1, sms_code, charsmax(sms_code)); + tariff = get_param(2); + + return _addSmsCode(sms_code, tariff); +} + +// Logowanie danych z pluginow zewnetrznych +public native_addLog(plugin, params) +{ + #if defined LOG_SQL + vdformat(g_szTemp, charsmax(g_szTemp), 1, 2); + _logToSql(g_szTemp); + #endif +} + +public native_showServicePurchase(plugin, params) { - new service[e_Service]; - for (new i = 0; i < ArraySize(services); ++i) { - ArrayGetArray(services, i, service); - if (equal(id, service[sID])) { - return i; - } + if (params != 2) { + return SS_BAD_ARGS; } - return -1; + + new service_id[MAX_SERVICE_ID + 1]; + new id = get_param(1); + get_string(2, service_id, charsmax(service_id)); + + _openPricingMenu(id, _getServiceByID(service_id)); + return SS_OK; } -_getNumberByTariff(tariff, output[], len) +public native_displaySmsDetails(plugin, params) { - new sms[e_SMS]; - for (new i = 0; i < ArraySize(smses); ++i) { - ArrayGetArray(smses, i, sms); - if (tariff == sms[sTARIFF]) { - copy(output, len, sms[NUMBER]); - return; - } + if (params != 1) { + return SS_BAD_ARGS; } + + _displaySmsDetails(get_param(1)); + return SS_OK; } -bool:isDebug() -{ - return false; +public bool:native_is_steam(plugin, params) +{ + if (params != 1) { + return false; + } + + return is_steam(get_param(1)); } +// // ------------------------------------------------- Versions Compatibility ---------------------------------------------------- +// vc_md5(const szString[], md5buffer[34]) { From f5de58b912fef2856586de5ed1ebfe44f39f7b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 12:51:58 +0100 Subject: [PATCH 041/124] Rearrange 2 --- .../addons/amxmodx/scripting/sklep_sms.sma | 295 +++++++++--------- 1 file changed, 152 insertions(+), 143 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index ccc9085..76e19cf 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -16,7 +16,7 @@ forward amxx_admin_access(id, flags, timestamp); // ID zadan #define TASK_KEEP_INFO_SMS 2000 -#define TASK_CHECK_USER 5000 +#define TASK_ASSIGN_PLAYER_FLAGS 5000 #define TASK_KEEP_DISPLAYING_MENU 8000 // Klawisze ktore mozna uzyc w menu @@ -237,8 +237,8 @@ public plugin_init() register_concmd("Podaj_Kod_Zwrotny", "onSmsCodeEntered"); register_concmd("ssnick_Podaj_Haslo", "onNickPasswordEntered"); register_concmd("ssip_Podaj_Haslo", "onIpPasswordEntered"); - register_concmd("sklepsms_reloaddata", "realoadPlayersServices"); - register_concmd("sklepsms_reloadusers", "pre_reassignPlayersFlags"); + register_concmd("sklepsms_reloaddata", "command_loadPlayersServices"); + register_concmd("sklepsms_reloadusers", "command_reassignPlayersFlags"); register_clcmd("say", "sayHook"); register_clcmd("say_team", "sayHook"); @@ -305,12 +305,28 @@ _loadCvars() public client_authorized(id) { - _usersCheckUser(id); + _assignPlayerFlags(id); } public client_putinserver(id) { - _usersCheckUser(id); + _assignPlayerFlags(id); +} + +public amxbans_sql_initialized() +{ + g_AmxbansExists = true; + _reassignPlayersFlags(); +} + +public client_admin(id, flags) +{ + _assignPlayerFlags(id); +} + +public amxx_admin_access(id, flags, timestamp) +{ + _assignPlayerFlags(id); } public sayHook(id) @@ -322,7 +338,7 @@ public sayHook(id) _openShopMenu(id); } else if (equali(tekst, przeladuj_komenda)) { - pre_reassignPlayersFlags(id); + command_reassignPlayersFlags(id); } else if (equali(tekst, uslugi_komenda)) { _showPlayerServices(id); @@ -969,90 +985,23 @@ _handlePurchaseServiceResponse(id, const return_value[], const szText[], positiv // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy if (service[FLAGS]) { // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo - set_task(2.0, "realoadPlayersServices"); - } -} - -// Wyswietlenie obecnych uslug gracza - -_showPlayerServices(id) -{ - if (!is_user_connected(id)) { - return; - } - - new name[MAX_NAME * 2 + 1], sid[MAX_SID * 2 + 1], ip[MAX_IP + 1]; - get_user_name(id, name, charsmax(name)); - get_user_ip(id, ip, charsmax(ip), true); - get_user_authid(id, sid, charsmax(sid)); - - escapeQuotes(name, charsmax(name)); - escapeQuotes(ip, charsmax(ip)); - escapeQuotes(sid, charsmax(sid)); - - if (SqlTuple) { - new data[1]; data[0] = id; - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT s.name AS `service`, FROM_UNIXTIME(us.expire) AS `expire`, us.expire AS `expire_num` FROM `%suser_service` AS us \ - INNER JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ - INNER JOIN `%sservices` AS s ON us.service = s.id \ - WHERE usef.server = '%d' \ - AND ((usef.type = '%d' AND usef.auth_data = '%s') \ - OR (usef.type = '%d' AND usef.auth_data = '%s') \ - OR (usef.type = '%d' AND usef.auth_data = '%s'))", - TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, g_serverId, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid - ); - - SQL_ThreadQuery(SqlTuple, "getPlayerServicesHandler", g_szTemp, data, sizeof data); + set_task(2.0, "command_loadPlayersServices"); } } -public getPlayerServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) -{ - new id = data[0]; - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - client_print_color(id, Red, "^4[%s] ^1Niestety, nie udalo sie pozyskac informacji o Twoich uslugach.", PREFIX); - return; - } - - new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); - - while (SQL_MoreResults(Query)) { - new service[MAX_SERVICE_ID + 1], expire[32 + 1], item_text[128]; - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), service, charsmax(service)); - - if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire_num")) == -1) { - copy(expire, charsmax(expire), "Nigdy"); - } else { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire"), expire, charsmax(expire)); - } - - formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service, expire); - menu_additem(menu, item_text); - - SQL_NextRow(Query); - } - - if (menu_items(menu)) { - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - menu_display(id, menu); - } - else { - client_print_color(id, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); - } -} +// +// ------------------------------------------------- Players Flags ---------------------------------------------------- +// -public showPlayerServices_handler(id, menu, item) +/** + * Funkcja wczytujaca z bazy ponownie dane graczy + */ +public command_loadPlayersServices() { - menu_destroy(menu); + _loadPlayersServices(true); } -/** - * Wrapper for _reassignPlayersFlags - * - * @param int id - */ -public pre_reassignPlayersFlags(id) +public command_reassignPlayersFlags(id) { if (g_lastReassign + 10 > get_systime()) { client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); @@ -1060,36 +1009,13 @@ public pre_reassignPlayersFlags(id) } g_lastReassign = get_systime(); - _reassignPlayersFlags(id); -} - -/** - * Reload players flags and assign them again - * - * @param int id - */ -_reassignPlayersFlags(id = 0) -{ - addUsersToGlobalArray(); + _reassignPlayersFlags(); - for (new i = 1; i <= get_maxplayers(); ++i) { - if (! is_user_connected(i)) { - continue; - } - - _usersCheckUser(i); - } - if (is_user_connected(id)) { client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); } } -// Funkcja wczytujaca z bazy ponownie dane graczy -public realoadPlayersServices() { - _loadPlayersServices(true); -} - _loadPlayersServices(bool:reloadAmxbans) { // Czyscimy dotychczasowe dane ArrayClear(g_playersFlags); @@ -1144,11 +1070,11 @@ _loadPlayersServices(bool:reloadAmxbans) { ); new data[1]; data[0] = reloadAmxbans; // Przeladuj liste adminow w amxbans - SQL_ThreadQuery(SqlTuple, "getPlayersData", g_szTemp, data, sizeof data); + SQL_ThreadQuery(SqlTuple, "loadPlayersServicesHandler", g_szTemp, data, sizeof data); } } -public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_size) +public loadPlayersServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; @@ -1194,23 +1120,25 @@ public getPlayersData(FailState, Handle:Query, Error[], Errorcode, data[], data_ } } -public amxbans_sql_initialized() -{ - g_AmxbansExists = true; - _reassignPlayersFlags(); -} - -public client_admin(id, flags) +/** + * Reload players flags and assign them again + */ +_reassignPlayersFlags() { - _usersCheckUser(id); -} + addUsersToGlobalArray(); -public amxx_admin_access(id, flags, timestamp) -{ - _usersCheckUser(id); + for (new i = 1; i <= get_maxplayers(); ++i) { + if (! is_user_connected(i)) { + continue; + } + + _assignPlayerFlags(i); + } } -// Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy +/** + * Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy + */ public addUsersToGlobalArray() { if (!g_playersLoaded) { // Dane uzytkownikow nie zostaly jeszcze zaladowane @@ -1284,27 +1212,16 @@ public addUsersToGlobalArray() } } -_getOrderOfType(type) -{ - switch (type) { - case FLAG_IP: return 1; - case FLAG_NICK : return 2; - case FLAG_AUTHID: return 3; - } - - return 0; -} - -public usersCheckUser_task(id) +public task_assignPlayerFlags(id) { - _usersCheckUser(id-TASK_CHECK_USER); + _assignPlayerFlags(id-TASK_ASSIGN_PLAYER_FLAGS); } -public _usersCheckUser(id) +_assignPlayerFlags(id) { if (! g_playersLoaded) { - if (! task_exists(TASK_CHECK_USER+id)) { - set_task(0.1, "usersCheckUser_task", TASK_CHECK_USER+id); + if (! task_exists(TASK_ASSIGN_PLAYER_FLAGS+id)) { + set_task(0.1, "task_assignPlayerFlags", TASK_ASSIGN_PLAYER_FLAGS+id); } return; @@ -1373,9 +1290,15 @@ public _usersCheckUser(id) } set_user_flags(id, player_flags[pfFLAGS]); + + // TODO Execute forward } } +// +// ------------------------------------------------- Server Configuration ---------------------------------------------------- +// + _loadSettings() { formatex(g_szTemp, charsmax(g_szTemp), @@ -1624,6 +1547,81 @@ public getSmsNumbersHandler(FailState, Handle:Query, Error[], Errorcode) } } +/** + * Wyswietlenie obecnych uslug gracza + */ +_showPlayerServices(id) +{ + if (!is_user_connected(id)) { + return; + } + + new name[MAX_NAME * 2 + 1], sid[MAX_SID * 2 + 1], ip[MAX_IP + 1]; + get_user_name(id, name, charsmax(name)); + get_user_ip(id, ip, charsmax(ip), true); + get_user_authid(id, sid, charsmax(sid)); + + escapeQuotes(name, charsmax(name)); + escapeQuotes(ip, charsmax(ip)); + escapeQuotes(sid, charsmax(sid)); + + if (SqlTuple) { + new data[1]; data[0] = id; + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT s.name AS `service`, FROM_UNIXTIME(us.expire) AS `expire`, us.expire AS `expire_num` FROM `%suser_service` AS us \ + INNER JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ + INNER JOIN `%sservices` AS s ON us.service = s.id \ + WHERE usef.server = '%d' \ + AND ((usef.type = '%d' AND usef.auth_data = '%s') \ + OR (usef.type = '%d' AND usef.auth_data = '%s') \ + OR (usef.type = '%d' AND usef.auth_data = '%s'))", + TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, g_serverId, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid + ); + + SQL_ThreadQuery(SqlTuple, "showPlayerServicesHandler", g_szTemp, data, sizeof data); + } +} + +public showPlayerServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) +{ + new id = data[0]; + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { + client_print_color(id, Red, "^4[%s] ^1Niestety, nie udalo sie pozyskac informacji o Twoich uslugach.", PREFIX); + return; + } + + new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); + + while (SQL_MoreResults(Query)) { + new service[MAX_SERVICE_ID + 1], expire[32 + 1], item_text[128]; + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), service, charsmax(service)); + + if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire_num")) == -1) { + copy(expire, charsmax(expire), "Nigdy"); + } else { + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire"), expire, charsmax(expire)); + } + + formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service, expire); + menu_additem(menu, item_text); + + SQL_NextRow(Query); + } + + if (menu_items(menu)) { + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); + menu_display(id, menu); + } + else { + client_print_color(id, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); + } +} + +public showPlayerServices_handler(id, menu, item) +{ + menu_destroy(menu); +} + /** * Dodanie kodu do bazy kodow * @@ -1841,6 +1839,15 @@ public keepDisplayingMenu(data[]) set_task(0.1, "keepDisplayingMenu", TASK_KEEP_DISPLAYING_MENU + id, data, 2); } +_checkLoadedServices() +{ + if (!ArraySize(services)) { + log_amx("Nie zaladowano zadnych uslug do zakupienia."); + } else { + log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(services)); + } +} + _invalidPath(id, const path[]) { _log(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); @@ -1888,13 +1895,15 @@ _getNumberByTariff(tariff, output[], len) } } -_checkLoadedServices() +_getOrderOfType(type) { - if (!ArraySize(services)) { - log_amx("Nie zaladowano zadnych uslug do zakupienia."); - } else { - log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(services)); + switch (type) { + case FLAG_IP: return 1; + case FLAG_NICK : return 2; + case FLAG_AUTHID: return 3; } + + return 0; } _canUseShop() From 43624951c6ad437d226b2b62c01f98e8762eb1d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 12:55:30 +0100 Subject: [PATCH 042/124] Rearrange 3 --- .../addons/amxmodx/scripting/sklep_sms.sma | 1930 +++++++++-------- 1 file changed, 968 insertions(+), 962 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 76e19cf..9935694 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -347,1206 +347,1212 @@ public sayHook(id) return get_pcvar_num(cvar_silent_command) ? PLUGIN_HANDLED : PLUGIN_CONTINUE; } -// ------------------------------------------------- Shop Menu ---------------------------------------------------- +// +// ----------------------------------------- SERVER CONFIGURATION -------------------------------------------- +// -_openShopMenu(id) +_loadSettings() { - if (!is_user_connected(id)) { + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%ssettings` \ + WHERE `key` IN ('shop_url', 'random_key')", + TABLE_PREFIX + ); + SQL_ThreadQuery(SqlTuple, "loadSettingsHandler", g_szTemp); +} + +public loadSettingsHandler(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - - if (!get_pcvar_num(cvar_on)) { - client_print_color(id, Red, "^4[%s] ^1Sklep jest obecnie ^3wylaczony^1.", PREFIX); - return; + + while (SQL_MoreResults(Query)) { + new key[128], value[256]; + + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "key"), key, charsmax(key)); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "value"), value, charsmax(value)); + + if (equali(key, "shop_url")) { + copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); + + // Remove trailing slash + if (strlen(g_shopPageUrl) && g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { + g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; + } + + if (! strlen(g_shopPageUrl)) { + _errorNoShopUrl(); + return; + } + } + else if (equali(key, "random_key")) { + copy(g_randomKey, charsmax(g_randomKey), value); + vc_md5(g_randomKey, g_randomKeyMD5); // Hashujemy random key + } + + SQL_NextRow(Query); } - if (g_blocked) { - client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepu z powodu bledow ze sklepem. Zobacz logi.", PREFIX); + _loadServerConfig(); +} + +_loadServerConfig() +{ + new url[MAX_URL + 1]; + formatex(url, charsmax(url), "%s/api/server/config?key=%s&ip=%s&port=%s&version=%s", g_shopPageUrl, g_randomKeyMD5, g_serverIp, g_serverPort, VERSION); + + if (!makeRequest("GET", url, 0, "", "onLoadServerConfigResponse")) { + _errorConfigFailed(999); } - - if (!g_sqlConnected) { - client_print_color(id, Red, "^4[%s] ^1Nie polaczono z baza danych.", PREFIX); +} + +public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, playerId) +{ + if (code != CURLE_OK) { + _errorConfigFailed(code); return; } - - if (!ArraySize(services)) { - client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); + + if (statusCode == 404) { + _errorNoServer(); return; } - - if (!g_shopRegistered) { - client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); + + if (statusCode == 402) { + _errorOutdatedVersion(); return; } - - new menu; - if (g_footer) { - menu = menu_create("\rSklep SMS\d napedzany przez\w sklep-sms.pl^n\yWybierz usluge:", "shopMenu_handler"); - } else { - menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "shopMenu_handler"); + + if (statusCode >= 300) { + _errorConfigInvalidResponse(statusCode); + return; } + + new szServices[512]; + + extractFieldValue(content, "id", g_szTemp, charsmax(g_szTemp)); + g_serverId = str_to_num(g_szTemp); + extractFieldValue(content, "sms_platform_id", g_szTemp, charsmax(g_szTemp)); + g_smsPlatformId = str_to_num(g_szTemp); + extractFieldValue(content, "sms_module_id", g_smsModuleId, charsmax(g_smsModuleId)); + extractFieldValue(content, "sms_text", g_smsText, charsmax(g_smsText)); + extractFieldValue(content, "services", szServices, charsmax(szServices)); + extractFieldValue(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); + extractFieldValue(content, "currency", g_currency, charsmax(g_currency)); + extractFieldValue(content, "contact", g_contact, charsmax(g_contact)); + extractFieldValue(content, "vat", g_szTemp, charsmax(g_szTemp)); + g_vat = str_to_float(g_szTemp); + extractFieldValue(content, "license_token", g_licenseToken, charsmax(g_licenseToken)); + + _validateLicense(); + _getServices(szServices); + _getSmsNumbers(); +} + +_getServices(const services[]) +{ + // Sprawdzanie dostepnosci usług + new service_id[MAX_SERVICE_ID + 1], service_id_space[MAX_SERVICE_ID + 2 + 1], ids[512], ids_len = 0, ids_max = charsmax(ids); + for (new i = 0; i < ArraySize(service_ids); ++i) { + ArrayGetString(service_ids, i, service_id, charsmax(service_id)); + formatex(service_id_space, charsmax(service_id_space), " %s ", service_id); - new menu_callback = menu_makecallback("shopMenu_callback"); - - new szText[64], service[e_Service]; - for (new i = 0; i < ArraySize(services); ++i) { - new data[4]; - data[0] = i + 1; - // Pobierz dane o usludze - ArrayGetArray(services, i, service); - - // Usluga wymaga posiadania grupy, TODO zakodzic to - // if (strlen(service[GROUPS])) { - // continue; - // } - - // Sforamtuj punkt w menu - if (service[DESCRIPTION]) { - formatex(szText, charsmax(szText), "Kup %s \d(%s)", service[sNAME], service[DESCRIPTION]); + if (containi(services, service_id_space) != -1) { + if (ids_len) { + ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); + } + + ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service_id); } - else { - formatex(szText, charsmax(szText), "Kup %s", service[sNAME]); + else { // Usługa nieaktywna, lub brak usługi + // Zatrzymaj plugin uslugi + new plugin_name[64]; + get_plugin(ArrayGetCell(service_plugins, i), plugin_name, charsmax(plugin_name)); + pause("acd", plugin_name); + ArrayDeleteItem(service_ids, i); + ArrayDeleteItem(service_plugins, i); + i -= 1; } + } + + // Jest chociaz jedna usluga, wiec pobieramy dane o uslugach + if (ids_len) { + if (SqlTuple) { + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%sservices` \ + WHERE `id` IN(%s) \ + ORDER BY `order` ASC", + TABLE_PREFIX, ids + ); - new ret; - new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_addingtolist", FP_CELL); - ExecuteForward(forward_handle, ret, id); - DestroyForward(forward_handle); - - data[1] = ret; - - if (data[1] != ITEM_OFF) { - menu_additem(menu, szText, data, 0, menu_callback); + SQL_ThreadQuery(SqlTuple, "getServicesHandler", g_szTemp); } + } else { + _checkLoadedServices(); } - - // Wyjdz zamiast Exit - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - menu_display(id, menu); - - client_print_color(id, Red, "^4[%s] ^1W razie problemow mozesz sie z nami skontaktowac", PREFIX); - client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, g_contact); -} - -public shopMenu_callback(id, menu, item) -{ - new data[4], zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - - return data[1] == ITEM_DISABLED ? ITEM_DISABLED : ITEM_ENABLED; } -public shopMenu_handler(id, menu, item) -{ - if (!is_user_connected(id) || item == MENU_EXIT) { - menu_destroy(menu); +public getServicesHandler(FailState, Handle:Query, Error[], Errorcode) { + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } + + new service[e_Service]; + new ids[512], ids_len = 0, ids_max = charsmax(ids); + while (SQL_MoreResults(Query)) + { + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), service[sID], MAX_SERVICE_ID); + service[PLUGIN] = _getServicePluginByID(service[sID]); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), service[sNAME], MAX_SERVICE_NAME); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "short_description"), service[DESCRIPTION], MAX_DESCRIPTION); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tag"), service[TAG], MAX_SERVICE_TAG); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "flags"), service[FLAGS], 26); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "groups"), service[GROUPS], 32); + service[TYPES] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "types")); + + ArrayPushArray(services, service); + + // Wyslanie danych uslugi do pluginu + new ret, forward_handle; + forward_handle = CreateOneForward(service[PLUGIN], "ss_service_data", FP_STRING, FP_STRING); + ExecuteForward(forward_handle, ret, service[sNAME], service[FLAGS]); + DestroyForward(forward_handle); + + // Przygotowywanie zapytania o priceliste + if (ids_len) { + ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); + } + + ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service[sID]); + + SQL_NextRow(Query); + } - new data[4], zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); + _checkLoadedServices(); - _openPricingMenu(id, data[0]-1); - menu_destroy(menu); + // Jest chociaz jedna usluga + if (ids_len) { + if (SqlTuple) { + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT * FROM `%spricelist` \ + WHERE (`server`='%d' OR `server`='-1') AND `service` IN (%s) \ + ORDER BY `amount` ASC", + TABLE_PREFIX, g_serverId, ids + ); + SQL_ThreadQuery(SqlTuple, "getPriceListHandler", g_szTemp); + } + } } -_openPricingMenu(id, service_id) -{ - if (!is_user_connected(id)) { +public getPriceListHandler(FailState, Handle:Query, Error[], Errorcode) +{ + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } + + while (SQL_MoreResults(Query)) + { + new price[e_Price]; - new service[e_Service]; - ArrayGetArray(services, service_id, service); - - new szText[64], data[3]; - - formatex(szText, charsmax(szText), "\rSklep SMS^n\yWybierz ilosc %s:", service[sNAME]); - - new menu = menu_create(szText, "pricingMenu_handler"); - - new price[e_Price], number[MAX_NUMBER+1]; - for (new i = 0; i < ArraySize(pricelist); ++i) { - ArrayGetArray(pricelist, i, price); - // ID usługi jest inne - if (!equali(price[pSERVICE], service[sID])) { - continue; - } + price[pTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_SERVICE_ID); + price[AMOUNT] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "amount")); - // Pobranie numeru na ktory trzeba wyslac SMSa - setc(number, strlen(number), 0); - _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + ArrayPushArray(pricelist, price); - // Przy danej metodzie płatności nie można użyć danej taryfy - if (!strlen(number)) { - continue; - } + SQL_NextRow(Query); + } +} + +_getSmsNumbers() +{ + if (SqlTuple) { + new payment_module_id[MAX_PAYMENT_MODULE_ID + 1]; + formatex(payment_module_id, charsmax(payment_module_id), "%s", g_smsModuleId); + escapeQuotes(payment_module_id, charsmax(payment_module_id)); - new amount[32 + 1]; - if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); - } else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); - } - new temp_cost = get_sms_cost(number); - formatex(szText, charsmax(szText), - "\y%s \wza %d.%s %s + VAT\d ( %d.%s %s )", - amount, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, - two_number_value(floatround(temp_cost*g_vat)%100), g_currency + formatex(g_szTemp, charsmax(g_szTemp), + "SELECT `number`, `tariff` \ + FROM `%ssms_numbers` \ + WHERE `service` = '%s'", + TABLE_PREFIX, payment_module_id ); - data[0] = service_id+1; - data[1] = min(127, i); // TODO: Problem przy ilosci uslug powyzej 256! - data[2] = min(127, i-data[1]); - menu_additem(menu, szText, data); - } - - // Wyjdz zamiast Exit - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - - if (menu_items(menu) > 1) { - menu_display(id, menu); - } - // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie - else if (menu_items(menu) == 1) { - which_service[id] = service_id; - which_price[id] = data[1]+data[2]; - _openServiceTypeMenu(id); - } - // Zero - else { - client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); + SQL_ThreadQuery(SqlTuple, "getSmsNumbersHandler", g_szTemp); } } -public pricingMenu_handler(id, menu, item) +public getSmsNumbersHandler(FailState, Handle:Query, Error[], Errorcode) { - if (!is_user_connected(id) || item == MENU_EXIT) { - menu_destroy(menu); + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - - new data[4], zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - - which_service[id] = data[0] - 1; - which_price[id] = data[1] + data[2]; - - _openServiceTypeMenu(id); - menu_destroy(menu); -} -_openServiceTypeMenu(id) -{ - new service[e_Service]; - ArrayGetArray(services, which_service[id], service); - - if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { - // Wyswietlamy menu z wyborem na co chcemy kupic usluge - new menu = menu_create("Wybierz typ uslugi", "serviceTypeMenu_handler"); - new menu_callback = menu_makecallback("serviceTypeMenu_callback"); - - menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); - menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); - menu_additem(menu, "Na SteamID", "", 0, menu_callback); - - menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER); - - new data[4]; - data[0] = id; - data[1] = menu; + new sms[e_SMS]; + while (SQL_MoreResults(Query)) + { + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "number"), sms[NUMBER], MAX_NUMBER); + sms[sTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); + ArrayPushArray(smses, sms); - keepDisplayingMenu(data); - } else { - _serviceChosen(id); + SQL_NextRow(Query); } } -public serviceTypeMenu_callback(id, menu, item) -{ - new service[e_Service]; - ArrayGetArray(services, which_service[id], service); +// +// --------------------------------------------- PLAYERS FLAGS ------------------------------------------------ +// - switch (item) { - case 0: return service[TYPES]&TYPE_NICK ? ITEM_ENABLED : ITEM_DISABLED; - case 1: return service[TYPES]&TYPE_IP ? ITEM_ENABLED : ITEM_DISABLED; - case 2: return service[TYPES]&TYPE_SID && is_steam(id) ? ITEM_ENABLED : ITEM_DISABLED; - } - - return ITEM_DISABLED; +/** + * Funkcja wczytujaca z bazy ponownie dane graczy + */ +public command_loadPlayersServices() +{ + _loadPlayersServices(true); } -public serviceTypeMenu_handler(id, menu, item) -{ - if (0 <= item && item <= 2) { - remove_task(TASK_KEEP_DISPLAYING_MENU+id); - menu_destroy(menu); +public command_reassignPlayersFlags(id) +{ + if (g_lastReassign + 10 > get_systime()) { + client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); + return; } + + g_lastReassign = get_systime(); + _reassignPlayersFlags(); - switch (item) { - case 0: { - client_cmd(id, "messagemode ssnick_Podaj_Haslo"); - } - case 1: { - client_cmd(id, "messagemode ssip_Podaj_Haslo"); - } - case 2: { - _serviceChosen(id, TYPE_SID, ""); - } + if (is_user_connected(id)) { + client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); } } -public onNickPasswordEntered(id) -{ - new szPassword[MAX_PASSWORD + 1]; - read_argv(1, szPassword, charsmax(szPassword)); +_loadPlayersServices(bool:reloadAmxbans) { + // Czyscimy dotychczasowe dane + ArrayClear(g_playersFlags); + g_playersLoaded = false; - if (!_serviceTypeMenu_checkPass(id, TYPE_NICK, szPassword)) { - client_cmd(id, "messagemode ssnick_Podaj_Haslo"); - } -} + if (SqlTuple) { + new iLen = 0, iMax = charsmax(g_szTemp); -public onIpPasswordEntered(id) -{ - new szPassword[MAX_PASSWORD + 1]; - read_argv(1, szPassword, charsmax(szPassword)); + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "SELECT f.type, f.auth_data, f.password, \ + (f.a > UNIX_TIMESTAMP() OR f.a = '-1') AS `a`, \ + (f.b > UNIX_TIMESTAMP() OR f.b = '-1') AS `b`, \ + (f.c > UNIX_TIMESTAMP() OR f.c = '-1') AS `c`, \ + (f.d > UNIX_TIMESTAMP() OR f.d = '-1') AS `d`, \ + (f.e > UNIX_TIMESTAMP() OR f.e = '-1') AS `e`, \ + (f.f > UNIX_TIMESTAMP() OR f.f = '-1') AS `f`, \ + (f.g > UNIX_TIMESTAMP() OR f.g = '-1') AS `g`, \ + (f.h > UNIX_TIMESTAMP() OR f.h = '-1') AS `h`, " + ); + + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "(f.i > UNIX_TIMESTAMP() OR f.i = '-1') AS `i`, \ + (f.j > UNIX_TIMESTAMP() OR f.j = '-1') AS `j`, \ + (f.k > UNIX_TIMESTAMP() OR f.k = '-1') AS `k`, \ + (f.l > UNIX_TIMESTAMP() OR f.l = '-1') AS `l`, \ + (f.m > UNIX_TIMESTAMP() OR f.m = '-1') AS `m`, \ + (f.n > UNIX_TIMESTAMP() OR f.n = '-1') AS `n`, \ + (f.o > UNIX_TIMESTAMP() OR f.o = '-1') AS `o`, \ + (f.p > UNIX_TIMESTAMP() OR f.p = '-1') AS `p`, " + ); + + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "(f.q > UNIX_TIMESTAMP() OR f.q = '-1') AS `q`, \ + (f.r > UNIX_TIMESTAMP() OR f.r = '-1') AS `r`, \ + (f.s > UNIX_TIMESTAMP() OR f.s = '-1') AS `s`, \ + (f.t > UNIX_TIMESTAMP() OR f.t = '-1') AS `t`, \ + (f.u > UNIX_TIMESTAMP() OR f.u = '-1') AS `u`, \ + (f.y > UNIX_TIMESTAMP() OR f.y = '-1') AS `y`, \ + (f.v > UNIX_TIMESTAMP() OR f.v = '-1') AS `v`, \ + (f.w > UNIX_TIMESTAMP() OR f.w = '-1') AS `w`, \ + (f.x > UNIX_TIMESTAMP() OR f.x = '-1') AS `x`, \ + (f.z > UNIX_TIMESTAMP() OR f.z = '-1') AS `z` " + ); + + iLen += formatex(g_szTemp[iLen], iMax - iLen, + "FROM `%splayers_flags` AS f \ + JOIN `%sservers` AS s ON s.id = f.server \ + WHERE s.ip = '%s' \ + AND s.port = '%s' \ + ORDER BY f.auth_data, f.type DESC", + TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort + ); - if (! _serviceTypeMenu_checkPass(id, TYPE_IP, szPassword)) { - client_cmd(id, "messagemode ssip_Podaj_Haslo"); + new data[1]; data[0] = reloadAmxbans; // Przeladuj liste adminow w amxbans + SQL_ThreadQuery(SqlTuple, "loadPlayersServicesHandler", g_szTemp, data, sizeof data); } } -bool:_serviceTypeMenu_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) +public loadPlayersServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) { - if (strlen(szPassword) > 30) { - client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); - return false; - } - else if (!strlen(szPassword)) { - client_print(id, print_center, "Haslo nie zostalo wprowadzone. Wprowadz je."); - return false; + if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { + return; } - - _serviceChosen(id, type, szPassword); - return true; -} - -_serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") -{ - new service[e_Service], price[e_Price]; - ArrayGetArray(services, which_service[id], service); - ArrayGetArray(pricelist, which_price[id], price); - copy(b_passwords[id], MAX_PASSWORD, szPassword); - b_types[id] = type; - new ret; - new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_chosen", FP_CELL, FP_CELL); - ExecuteForward(forward_handle, ret, id, price[AMOUNT]); - DestroyForward(forward_handle); - - if (ret != SS_STOP) { - _openPaymentMethodMenu(id); + while (SQL_MoreResults(Query)) + { + new player_flags[e_PlayerFlags], type; + type = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "type")); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "auth_data"), player_flags[pfPLAYER], 32); + SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), player_flags[pfPASSWORD], MAX_PASSWORD); + + for (new i = 0; i < strlen(all_flags); ++i) { + new temp[4]; + formatex(temp, charsmax(temp), "%c", all_flags[i]); + if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, temp))) { + player_flags[pfFLAGS] |= read_flags(temp); + } + } + + switch (type) { + case TYPE_SID: player_flags[pfTYPE] = FLAG_AUTHID|FLAG_NOPASS; + case TYPE_IP: player_flags[pfTYPE] = FLAG_IP; + default: player_flags[pfTYPE] = FLAG_NICK|FLAG_KICK; + } + + // Dodanie do tablicy + if (player_flags[pfFLAGS] != 0) { + ArrayPushArray(g_playersFlags, player_flags); + } + + SQL_NextRow(Query); } -} - -_openPaymentMethodMenu(id) -{ - new service[e_Service]; - ArrayGetArray(services, which_service[id], service); - new menu = menu_create("Wybierz metode platnosci", "paymentMethodMenu_handler"); - new menu_callback = menu_makecallback("paymentMethodMenu_callback"); - - menu_additem(menu, "SMS", "", 0, menu_callback); - menu_additem(menu, "Portfel", "", 0, menu_callback); - - new data[4]; - data[0] = id; - data[1] = menu; + log_amx("Zaladowano %d uslug graczy", ArraySize(g_playersFlags)); + g_playersLoaded = true; - keepDisplayingMenu(data); -} - -public paymentMethodMenu_callback(id, menu, item) -{ - switch (item) { - case 0: { - return ITEM_ENABLED; - } - case 1: { - return _canPayWithWallet(id) ? ITEM_ENABLED : ITEM_DISABLED; - } + if (data[0] && g_AmxbansExists) { // Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien + server_cmd("amx_reloadadmins"); + } + else { + _reassignPlayersFlags(); } - - return ITEM_DISABLED; } -public paymentMethodMenu_handler(id, menu, item) +/** + * Reload players flags and assign them again + */ +_reassignPlayersFlags() { - remove_task(TASK_KEEP_DISPLAYING_MENU + id); - menu_destroy(menu); + addUsersToGlobalArray(); - switch (item) { - case 0: { - _displaySmsDetails(id); - } - case 1: { - _purchaseService(id, "wallet"); + for (new i = 1; i <= get_maxplayers(); ++i) { + if (! is_user_connected(i)) { + continue; } + + _assignPlayerFlags(i); } } -_displaySmsDetails(id) -{ - if (!is_user_connected(id)) { +/** + * Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy + */ +public addUsersToGlobalArray() +{ + if (!g_playersLoaded) { // Dane uzytkownikow nie zostaly jeszcze zaladowane + set_task(0.1, "addUsersToGlobalArray"); return; } - new service[e_Service], price[e_Price], number[MAX_NUMBER + 1]; - ArrayGetArray(services, which_service[id], service); - ArrayGetArray(pricelist, which_price[id], price); - _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + // Potrzebujemy drugiej tablicy, zeby elementy z amxbansa mialy takie samo id + new Array:users, Array:users2; + users = ArrayCreate(e_PlayerFlags); + users2 = ArrayCreate(e_PlayerFlags); - new amount[32 + 1]; - if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); - } else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + for (new i = 0; i < ArraySize(g_playersFlags); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(g_playersFlags, i, player_flags); + ArrayPushArray(users, player_flags); } - formatex(g_szTemp, charsmax(g_szTemp), "\rSklep SMS^n^n"); - format(g_szTemp, charsmax(g_szTemp), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", g_szTemp, service[sNAME], amount); - new temp_cost = get_sms_cost(number); - format(g_szTemp, charsmax(g_szTemp), - "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", - g_szTemp, g_smsText, number, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, - two_number_value(floatround(temp_cost * g_vat)%100), g_currency - ); - format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); - - keepDisplayingSmsDetails(g_szTemp, TASK_KEEP_INFO_SMS + id); -} - -public keepDisplayingSmsDetails(const info[], id) -{ - id -= TASK_KEEP_INFO_SMS; - if (!is_user_connected(id)) { - return; - } + for (new i = 0; i < admins_num(); ++i) { + new player_flags[e_PlayerFlags], name_bak[33]; - show_menu(id, KEYS, info, 1, "smsDetails"); - set_task(0.9, "keepDisplayingSmsDetails", id+TASK_KEEP_INFO_SMS, info, strlen(info)); -} - -public smsDetails_handler(id, key) -{ - if (task_exists(TASK_KEEP_INFO_SMS + id)) { - remove_task(TASK_KEEP_INFO_SMS + id); - } + admins_lookup(i, AdminProp_Auth, player_flags[pfPLAYER], 32); + copy(name_bak, charsmax(name_bak), player_flags[pfPLAYER]); + strtolower(name_bak); - if (!is_user_connected(id)) { - return; - } + admins_lookup(i, AdminProp_Password, player_flags[pfPASSWORD], MAX_PASSWORD); - if (key == 0) { - client_cmd(id, "messagemode Podaj_Kod_Zwrotny"); - } else if (key == 9) { - client_print_color(id, Red, "^4[%s] ^1Transakcja zostala ^3przerwana^1.", PREFIX); - } -} - -// Wprowadzanie kodu zwrotnego -public onSmsCodeEntered(id) -{ - if (!is_user_connected(id)) { - return; - } + player_flags[pfTYPE] = admins_lookup(i, AdminProp_Flags); + player_flags[pfFLAGS] = admins_lookup(i, AdminProp_Access); - new sms_code[MAX_CODE + 1]; - read_argv(1, sms_code, charsmax(sms_code)); - - _log(id, "Wprowadzono kod: %s", sms_code); - - if (!strlen(sms_code)) { - client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); - return; + new l = 0, p = ArraySize(users)-1, s; + while (l <= p) { + new player_flags2[e_PlayerFlags]; + s = (l + p) / 2; + + ArrayGetArray(users, s, player_flags2); + strtolower(player_flags2[pfPLAYER]); + if (equali(name_bak, player_flags2[pfPLAYER]) && player_flags[pfTYPE] == player_flags2[pfTYPE]) { + // Zostawiamy haslo AMXBansa + player_flags[pfFLAGS] |= player_flags2[pfFLAGS]; + ArrayPushArray(users2, player_flags); + ArrayDeleteItem(users, s); + break; + } + else if (strcmp(name_bak, player_flags2[pfPLAYER]) > 0) { + l = s + 1; + } + else if (equali(name_bak, player_flags2[pfPLAYER]) && _getOrderOfType(player_flags[pfTYPE]) > _getOrderOfType(player_flags2[pfTYPE])) { + l = s + 1; + } + else { + p = s - 1; + } + } + + if (p < l) { + ArrayPushArray(users2, player_flags); + } } + admins_flush(); - if (containi(sms_code, " ") != -1) { - client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1.", PREFIX); - return; + for (new i = 0; i < ArraySize(users2); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(users2, i, player_flags); + admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } - - if (strlen(sms_code) == 1 && containi(sms_code, "0") == 0) { - client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1byc rowny^3 0^1.", PREFIX); - return; + for (new i = 0; i < ArraySize(users); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(users, i, player_flags); + admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } - - _purchaseService(id, "sms", sms_code); } -_purchaseService(id, const method[], const sms_code[] = "") { - client_print_color(id, Red, "^4[%s] ^1Trwa przeprowadzanie zakupu...", PREFIX); +public task_assignPlayerFlags(id) +{ + _assignPlayerFlags(id-TASK_ASSIGN_PLAYER_FLAGS); +} - if (!_canUseShop()) { - client_print_color(id, Red, "^4[%s] ^1Sklep jest tymczaosowo nieaktywny.", PREFIX); +_assignPlayerFlags(id) +{ + if (! g_playersLoaded) { + if (! task_exists(TASK_ASSIGN_PLAYER_FLAGS+id)) { + set_task(0.1, "task_assignPlayerFlags", TASK_ASSIGN_PLAYER_FLAGS+id); + } + return; } - new url[MAX_URL + 1]; - new body[MAX_BODY + 1]; - new curl_slist: headers; - { - new service[e_Service], auth_data[32 + 1], steam_id[32 + 1], price[e_Price], ip[MAX_IP + 1]; - new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], - u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; - - new sign[34], sign_body[1 + charsmax(auth_data) + charsmax(sms_code) + charsmax(g_randomKey) + 1]; - new header[MAX_HEADERS + 1]; - - // Pobieramy dane o usludze - ArrayGetArray(services, which_service[id], service); + for (new i = 0; i < ArraySize(g_playersFlags); ++i) { + new player_flags[e_PlayerFlags]; + ArrayGetArray(g_playersFlags, i, player_flags); - // Pobieramy dane gracza Nick / IP / SID - switch (b_types[id]) { - case TYPE_IP: get_user_ip(id, auth_data, charsmax(auth_data), true); - case TYPE_SID: get_user_authid(id, auth_data, charsmax(auth_data)); - case TYPE_NICK: get_user_name(id, auth_data, charsmax(auth_data)); - } - - // Jezeli usluga nie jest wykupowana na nickpass, ippass, sid, to pobieramy nick - if (!strlen(auth_data)) { - get_user_name(id, auth_data, charsmax(auth_data)); + if (player_flags[pfTYPE] & FLAG_NICK) { + new name[MAX_NAME + 1]; + get_user_name(id, name, charsmax(name)); + if (! equali(name, player_flags[pfPLAYER])) { + continue; + } + } + else if (player_flags[pfTYPE] & FLAG_IP) { + new ip[MAX_IP + 1]; + get_user_ip(id, ip, charsmax(ip), true); + if (! equali(ip, player_flags[pfPLAYER])) { + continue; + } + } + else if (player_flags[pfTYPE] & FLAG_AUTHID) { + new sid[MAX_SID + 1], arr_sid[MAX_SID + 1]; + copy(arr_sid, charsmax(arr_sid), player_flags[pfPLAYER]); + get_user_authid(id, sid, charsmax(sid)); + + strtolower(arr_sid); + strtolower(sid); + replace(sid, charsmax(sid), "steam_", ""); + replace(arr_sid, charsmax(arr_sid), "steam_", ""); + + if (! equali(sid, arr_sid)) { + continue; + } } - // Get user's IP - get_user_ip(id, ip, charsmax(ip), true); - - // Get user's SteamID - get_user_authid(id, steam_id, charsmax(steam_id)); - - // Get tariff - ArrayGetArray(pricelist, which_price[id], price); - - // Encode url params - StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); - StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); - StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); - StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); - StringURLEncode(steam_id, u_steam_id, charsmax(u_steam_id)); - - // Calculate body sign - formatex(sign_body, charsmax(sign_body), - "%d#%s#%s#%s", - b_types[id], auth_data, sms_code, g_randomKey - ); - vc_md5(sign_body, sign); - - formatex(header, charsmax(header), "Authorization: %s", steam_id); - headers = curl_slist_append(headers, header); - - formatex(body, charsmax(body), - "sign=%s&service=%s&type=%d&auth_data=%s&password=%s&method=%s&server=%d&payment_platform=%d&sms_code=%s&tariff=%d&ip=%s", - sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, g_smsPlatformId, u_sms_code, price[pTARIFF], ip - ); + if (strlen(player_flags[pfPASSWORD])) { + new password[MAX_PASSWORD + 1], password_md5[34]; + + get_user_info(id, "_pw", password, charsmax(password)); + vc_md5(password, password_md5); + + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { + get_user_info(id, "_pw2", password, charsmax(password)); + vc_md5(password, password_md5); + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { + get_user_info(id, "_pw3", password, charsmax(password)); + vc_md5(password, password_md5); + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { + get_user_info(id, "_ss", password, charsmax(password)); + vc_md5(password, password_md5); + if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { + if (! (player_flags[pfTYPE]&FLAG_KICK)) { // Nie kickuj gracza, tylko mu nie przydziel flag + continue; + } + + server_cmd("kick #%d ^"Nieprawidlowe haslo^"", get_user_userid(id)); + + return; + } + } + } + } + } - formatex(url, charsmax(url), "%s/api/server/purchase?key=%s&language=polish", g_shopPageUrl, g_randomKeyMD5); - } + set_user_flags(id, player_flags[pfFLAGS]); - if (!makeRequest("POST", url, headers, body, "onPurchaseServiceResponse", id)) { - client_print_color(id, Red, "^4[%s] ^1Nie udalo sie wykonac zapytania HTTP.", PREFIX); + // TODO Execute forward } } -public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, playerId) +// +// ------------------------------------------------- Shop Menu ---------------------------------------------------- +// + +_openShopMenu(id) { - if (code != CURLE_OK) { - log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); - client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow. Error: %d", PREFIX, code); + if (!is_user_connected(id)) { return; } - - if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny http code.", PREFIX); + + if (!get_pcvar_num(cvar_on)) { + client_print_color(id, Red, "^4[%s] ^1Sklep jest obecnie ^3wylaczony^1.", PREFIX); return; } - new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[256]; - - getXMLValue(content, "return_value", return_value, charsmax(return_value)); - getXMLValue(content, "text", szText, charsmax(szText)); - getXMLValue(content, "positive", szPositive, charsmax(szPositive)); - getXMLValue(content, "bsid", szBsid, charsmax(szBsid)); - getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); - - trim(return_value); - trim(szText); - trim(szWarnings); - - if (!strlen(return_value)) { - log_amx("Invalid response: %s", content); + if (g_blocked) { + client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepu z powodu bledow ze sklepem. Zobacz logi.", PREFIX); } - - _handlePurchaseServiceResponse(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); -} - -_handlePurchaseServiceResponse(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) -{ - if (! is_user_connected(id)) { + + if (!g_sqlConnected) { + client_print_color(id, Red, "^4[%s] ^1Nie polaczono z baza danych.", PREFIX); return; } - client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(szText) ? szText : "Wystapil blad. Brak odpowiedzi z serwera."); - - if (strlen(szWarnings)) { - format(g_szTemp, charsmax(g_szTemp), - "\ - \ - \ -
    Bledy ktore wystapily przy zakupie uslugi
    \ - %s\ - Uzyj jeszcze raz tego samego kodu zwrotnego sms.\ - ", - szWarnings - ); - show_motd(id, g_szTemp, "Bledy przy zakupie uslugi"); + if (!ArraySize(services)) { + client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); + return; } - // Wystapil jakis blad, wiec przerywamy - if (! positive) { + if (!g_shopRegistered) { + client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); return; } - - new ret, forward_handle, service[e_Service], price[e_Price], number[MAX_NUMBER+1]; - ArrayGetArray(services, which_service[id], service); - ArrayGetArray(pricelist, which_price[id], price); - _getNumberByTariff(price[pTARIFF], number, charsmax(number)); - forward_handle = CreateOneForward(service[PLUGIN], "ss_service_bought", FP_CELL, FP_CELL); - ExecuteForward(forward_handle, ret, id, price[AMOUNT]); - DestroyForward(forward_handle); + new menu; + if (g_footer) { + menu = menu_create("\rSklep SMS\d napedzany przez\w sklep-sms.pl^n\yWybierz usluge:", "shopMenu_handler"); + } else { + menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "shopMenu_handler"); + } + + new menu_callback = menu_makecallback("shopMenu_callback"); - // Wystapil jakis blad - if (ret == SS_ERROR) { - client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, g_contact); + new szText[64], service[e_Service]; + for (new i = 0; i < ArraySize(services); ++i) { + new data[4]; + data[0] = i + 1; + // Pobierz dane o usludze + ArrayGetArray(services, i, service); - new amount[32 + 1]; - if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); + // Usluga wymaga posiadania grupy, TODO zakodzic to + // if (strlen(service[GROUPS])) { + // continue; + // } + + // Sforamtuj punkt w menu + if (service[DESCRIPTION]) { + formatex(szText, charsmax(szText), "Kup %s \d(%s)", service[sNAME], service[DESCRIPTION]); } else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + formatex(szText, charsmax(szText), "Kup %s", service[sNAME]); } - _log(id, "Wystapil blad podczas kupowania %s - %s; Taryfa: %d", service[sNAME], amount, price[pTARIFF]); + new ret; + new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_addingtolist", FP_CELL); + ExecuteForward(forward_handle, ret, id); + DestroyForward(forward_handle); - return; - } - - // Info w przypadku usługi na haslo - if (b_types[id] & (TYPE_NICK | TYPE_IP)) { - // Ustawienie hasla - client_cmd(id, "setinfo _ss ^"%s^"", b_passwords[id]); + data[1] = ret; - formatex(g_szTemp, charsmax(g_szTemp), - "


    \ -

    Wykupiles/as usluge: %s

    \ - Aby usluga dziala, dodaj wpis do pliku config.cfg: setinfo _ss ^"%s^"

    \ - W razie problemow skontaktuj sie z nami.\ -

    ", - service[sNAME], b_passwords[id] - ); - show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); - } - else if (b_types[id] & TYPE_SID) { - formatex(g_szTemp, charsmax(g_szTemp), - "


    \ -

    Wykupiles/as usluge: %s

    \ - W razie problemow skontaktuj sie z nami.\ -

    ", - service[sNAME] - ); - show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); - } - - new amount[32 + 1]; - if (price[AMOUNT] == -1) {// Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); - } - else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + if (data[1] != ITEM_OFF) { + menu_additem(menu, szText, data, 0, menu_callback); + } } - client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], amount); + // Wyjdz zamiast Exit + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); + menu_display(id, menu); - // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy - if (service[FLAGS]) { - // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo - set_task(2.0, "command_loadPlayersServices"); - } + client_print_color(id, Red, "^4[%s] ^1W razie problemow mozesz sie z nami skontaktowac", PREFIX); + client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, g_contact); } -// -// ------------------------------------------------- Players Flags ---------------------------------------------------- -// - -/** - * Funkcja wczytujaca z bazy ponownie dane graczy - */ -public command_loadPlayersServices() +public shopMenu_callback(id, menu, item) { - _loadPlayersServices(true); + new data[4], zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); + + return data[1] == ITEM_DISABLED ? ITEM_DISABLED : ITEM_ENABLED; } -public command_reassignPlayersFlags(id) -{ - if (g_lastReassign + 10 > get_systime()) { - client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); +public shopMenu_handler(id, menu, item) +{ + if (!is_user_connected(id) || item == MENU_EXIT) { + menu_destroy(menu); return; } - g_lastReassign = get_systime(); - _reassignPlayersFlags(); - - if (is_user_connected(id)) { - client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); - } -} - -_loadPlayersServices(bool:reloadAmxbans) { - // Czyscimy dotychczasowe dane - ArrayClear(g_playersFlags); - g_playersLoaded = false; - - if (SqlTuple) { - new iLen = 0, iMax = charsmax(g_szTemp); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "SELECT f.type, f.auth_data, f.password, \ - (f.a > UNIX_TIMESTAMP() OR f.a = '-1') AS `a`, \ - (f.b > UNIX_TIMESTAMP() OR f.b = '-1') AS `b`, \ - (f.c > UNIX_TIMESTAMP() OR f.c = '-1') AS `c`, \ - (f.d > UNIX_TIMESTAMP() OR f.d = '-1') AS `d`, \ - (f.e > UNIX_TIMESTAMP() OR f.e = '-1') AS `e`, \ - (f.f > UNIX_TIMESTAMP() OR f.f = '-1') AS `f`, \ - (f.g > UNIX_TIMESTAMP() OR f.g = '-1') AS `g`, \ - (f.h > UNIX_TIMESTAMP() OR f.h = '-1') AS `h`, " - ); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "(f.i > UNIX_TIMESTAMP() OR f.i = '-1') AS `i`, \ - (f.j > UNIX_TIMESTAMP() OR f.j = '-1') AS `j`, \ - (f.k > UNIX_TIMESTAMP() OR f.k = '-1') AS `k`, \ - (f.l > UNIX_TIMESTAMP() OR f.l = '-1') AS `l`, \ - (f.m > UNIX_TIMESTAMP() OR f.m = '-1') AS `m`, \ - (f.n > UNIX_TIMESTAMP() OR f.n = '-1') AS `n`, \ - (f.o > UNIX_TIMESTAMP() OR f.o = '-1') AS `o`, \ - (f.p > UNIX_TIMESTAMP() OR f.p = '-1') AS `p`, " - ); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "(f.q > UNIX_TIMESTAMP() OR f.q = '-1') AS `q`, \ - (f.r > UNIX_TIMESTAMP() OR f.r = '-1') AS `r`, \ - (f.s > UNIX_TIMESTAMP() OR f.s = '-1') AS `s`, \ - (f.t > UNIX_TIMESTAMP() OR f.t = '-1') AS `t`, \ - (f.u > UNIX_TIMESTAMP() OR f.u = '-1') AS `u`, \ - (f.y > UNIX_TIMESTAMP() OR f.y = '-1') AS `y`, \ - (f.v > UNIX_TIMESTAMP() OR f.v = '-1') AS `v`, \ - (f.w > UNIX_TIMESTAMP() OR f.w = '-1') AS `w`, \ - (f.x > UNIX_TIMESTAMP() OR f.x = '-1') AS `x`, \ - (f.z > UNIX_TIMESTAMP() OR f.z = '-1') AS `z` " - ); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "FROM `%splayers_flags` AS f \ - JOIN `%sservers` AS s ON s.id = f.server \ - WHERE s.ip = '%s' \ - AND s.port = '%s' \ - ORDER BY f.auth_data, f.type DESC", - TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort - ); + new data[4], zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - new data[1]; data[0] = reloadAmxbans; // Przeladuj liste adminow w amxbans - SQL_ThreadQuery(SqlTuple, "loadPlayersServicesHandler", g_szTemp, data, sizeof data); - } + _openPricingMenu(id, data[0]-1); + menu_destroy(menu); } -public loadPlayersServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { +_openPricingMenu(id, service_id) +{ + if (!is_user_connected(id)) { return; } - - while (SQL_MoreResults(Query)) - { - new player_flags[e_PlayerFlags], type; - type = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "type")); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "auth_data"), player_flags[pfPLAYER], 32); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), player_flags[pfPASSWORD], MAX_PASSWORD); - for (new i = 0; i < strlen(all_flags); ++i) { - new temp[4]; - formatex(temp, charsmax(temp), "%c", all_flags[i]); - if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, temp))) { - player_flags[pfFLAGS] |= read_flags(temp); - } - } + new service[e_Service]; + ArrayGetArray(services, service_id, service); - switch (type) { - case TYPE_SID: player_flags[pfTYPE] = FLAG_AUTHID|FLAG_NOPASS; - case TYPE_IP: player_flags[pfTYPE] = FLAG_IP; - default: player_flags[pfTYPE] = FLAG_NICK|FLAG_KICK; + new szText[64], data[3]; + + formatex(szText, charsmax(szText), "\rSklep SMS^n\yWybierz ilosc %s:", service[sNAME]); + + new menu = menu_create(szText, "pricingMenu_handler"); + + new price[e_Price], number[MAX_NUMBER+1]; + for (new i = 0; i < ArraySize(pricelist); ++i) { + ArrayGetArray(pricelist, i, price); + // ID usługi jest inne + if (!equali(price[pSERVICE], service[sID])) { + continue; } - // Dodanie do tablicy - if (player_flags[pfFLAGS] != 0) { - ArrayPushArray(g_playersFlags, player_flags); + // Pobranie numeru na ktory trzeba wyslac SMSa + setc(number, strlen(number), 0); + _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + + // Przy danej metodzie płatności nie można użyć danej taryfy + if (!strlen(number)) { + continue; } - SQL_NextRow(Query); + new amount[32 + 1]; + if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); + } else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + } + new temp_cost = get_sms_cost(number); + formatex(szText, charsmax(szText), + "\y%s \wza %d.%s %s + VAT\d ( %d.%s %s )", + amount, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, + two_number_value(floatround(temp_cost*g_vat)%100), g_currency + ); + data[0] = service_id+1; + data[1] = min(127, i); // TODO: Problem przy ilosci uslug powyzej 256! + data[2] = min(127, i-data[1]); + menu_additem(menu, szText, data); } - log_amx("Zaladowano %d uslug graczy", ArraySize(g_playersFlags)); - g_playersLoaded = true; + // Wyjdz zamiast Exit + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - if (data[0] && g_AmxbansExists) { // Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien - server_cmd("amx_reloadadmins"); + if (menu_items(menu) > 1) { + menu_display(id, menu); + } + // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie + else if (menu_items(menu) == 1) { + which_service[id] = service_id; + which_price[id] = data[1]+data[2]; + _openServiceTypeMenu(id); } + // Zero else { - _reassignPlayersFlags(); + client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); } } -/** - * Reload players flags and assign them again - */ -_reassignPlayersFlags() -{ - addUsersToGlobalArray(); - - for (new i = 1; i <= get_maxplayers(); ++i) { - if (! is_user_connected(i)) { - continue; - } - - _assignPlayerFlags(i); +public pricingMenu_handler(id, menu, item) +{ + if (!is_user_connected(id) || item == MENU_EXIT) { + menu_destroy(menu); + return; } + + new data[4], zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); + + which_service[id] = data[0] - 1; + which_price[id] = data[1] + data[2]; + + _openServiceTypeMenu(id); + menu_destroy(menu); } -/** - * Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy - */ -public addUsersToGlobalArray() +_openServiceTypeMenu(id) { - if (!g_playersLoaded) { // Dane uzytkownikow nie zostaly jeszcze zaladowane - set_task(0.1, "addUsersToGlobalArray"); - return; - } + new service[e_Service]; + ArrayGetArray(services, which_service[id], service); - // Potrzebujemy drugiej tablicy, zeby elementy z amxbansa mialy takie samo id - new Array:users, Array:users2; - users = ArrayCreate(e_PlayerFlags); - users2 = ArrayCreate(e_PlayerFlags); + if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { + // Wyswietlamy menu z wyborem na co chcemy kupic usluge + new menu = menu_create("Wybierz typ uslugi", "serviceTypeMenu_handler"); + new menu_callback = menu_makecallback("serviceTypeMenu_callback"); - for (new i = 0; i < ArraySize(g_playersFlags); ++i) { - new player_flags[e_PlayerFlags]; - ArrayGetArray(g_playersFlags, i, player_flags); - ArrayPushArray(users, player_flags); - } + menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); + menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); + menu_additem(menu, "Na SteamID", "", 0, menu_callback); - for (new i = 0; i < admins_num(); ++i) { - new player_flags[e_PlayerFlags], name_bak[33]; - - admins_lookup(i, AdminProp_Auth, player_flags[pfPLAYER], 32); - copy(name_bak, charsmax(name_bak), player_flags[pfPLAYER]); - strtolower(name_bak); - - admins_lookup(i, AdminProp_Password, player_flags[pfPASSWORD], MAX_PASSWORD); - - player_flags[pfTYPE] = admins_lookup(i, AdminProp_Flags); - player_flags[pfFLAGS] = admins_lookup(i, AdminProp_Access); + menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER); + + new data[4]; + data[0] = id; + data[1] = menu; - new l = 0, p = ArraySize(users)-1, s; - while (l <= p) { - new player_flags2[e_PlayerFlags]; - s = (l + p) / 2; - - ArrayGetArray(users, s, player_flags2); - strtolower(player_flags2[pfPLAYER]); - if (equali(name_bak, player_flags2[pfPLAYER]) && player_flags[pfTYPE] == player_flags2[pfTYPE]) { - // Zostawiamy haslo AMXBansa - player_flags[pfFLAGS] |= player_flags2[pfFLAGS]; - ArrayPushArray(users2, player_flags); - ArrayDeleteItem(users, s); - break; - } - else if (strcmp(name_bak, player_flags2[pfPLAYER]) > 0) { - l = s + 1; - } - else if (equali(name_bak, player_flags2[pfPLAYER]) && _getOrderOfType(player_flags[pfTYPE]) > _getOrderOfType(player_flags2[pfTYPE])) { - l = s + 1; - } - else { - p = s - 1; - } + keepDisplayingMenu(data); + } else { + _serviceChosen(id); + } +} + +public serviceTypeMenu_callback(id, menu, item) +{ + new service[e_Service]; + ArrayGetArray(services, which_service[id], service); + + switch (item) { + case 0: return service[TYPES]&TYPE_NICK ? ITEM_ENABLED : ITEM_DISABLED; + case 1: return service[TYPES]&TYPE_IP ? ITEM_ENABLED : ITEM_DISABLED; + case 2: return service[TYPES]&TYPE_SID && is_steam(id) ? ITEM_ENABLED : ITEM_DISABLED; + } + + return ITEM_DISABLED; +} + +public serviceTypeMenu_handler(id, menu, item) +{ + if (0 <= item && item <= 2) { + remove_task(TASK_KEEP_DISPLAYING_MENU+id); + menu_destroy(menu); + } + + switch (item) { + case 0: { + client_cmd(id, "messagemode ssnick_Podaj_Haslo"); } - - if (p < l) { - ArrayPushArray(users2, player_flags); + case 1: { + client_cmd(id, "messagemode ssip_Podaj_Haslo"); + } + case 2: { + _serviceChosen(id, TYPE_SID, ""); } } - admins_flush(); +} + +public onNickPasswordEntered(id) +{ + new szPassword[MAX_PASSWORD + 1]; + read_argv(1, szPassword, charsmax(szPassword)); - for (new i = 0; i < ArraySize(users2); ++i) { - new player_flags[e_PlayerFlags]; - ArrayGetArray(users2, i, player_flags); - admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); + if (!_serviceTypeMenu_checkPass(id, TYPE_NICK, szPassword)) { + client_cmd(id, "messagemode ssnick_Podaj_Haslo"); } - for (new i = 0; i < ArraySize(users); ++i) { - new player_flags[e_PlayerFlags]; - ArrayGetArray(users, i, player_flags); - admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); +} + +public onIpPasswordEntered(id) +{ + new szPassword[MAX_PASSWORD + 1]; + read_argv(1, szPassword, charsmax(szPassword)); + + if (! _serviceTypeMenu_checkPass(id, TYPE_IP, szPassword)) { + client_cmd(id, "messagemode ssip_Podaj_Haslo"); } } -public task_assignPlayerFlags(id) +bool:_serviceTypeMenu_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) { - _assignPlayerFlags(id-TASK_ASSIGN_PLAYER_FLAGS); + if (strlen(szPassword) > 30) { + client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); + return false; + } + else if (!strlen(szPassword)) { + client_print(id, print_center, "Haslo nie zostalo wprowadzone. Wprowadz je."); + return false; + } + + _serviceChosen(id, type, szPassword); + return true; } -_assignPlayerFlags(id) +_serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") { - if (! g_playersLoaded) { - if (! task_exists(TASK_ASSIGN_PLAYER_FLAGS+id)) { - set_task(0.1, "task_assignPlayerFlags", TASK_ASSIGN_PLAYER_FLAGS+id); - } - - return; + new service[e_Service], price[e_Price]; + ArrayGetArray(services, which_service[id], service); + ArrayGetArray(pricelist, which_price[id], price); + copy(b_passwords[id], MAX_PASSWORD, szPassword); + b_types[id] = type; + + new ret; + new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_chosen", FP_CELL, FP_CELL); + ExecuteForward(forward_handle, ret, id, price[AMOUNT]); + DestroyForward(forward_handle); + + if (ret != SS_STOP) { + _openPaymentMethodMenu(id); } +} + +_openPaymentMethodMenu(id) +{ + new service[e_Service]; + ArrayGetArray(services, which_service[id], service); - for (new i = 0; i < ArraySize(g_playersFlags); ++i) { - new player_flags[e_PlayerFlags]; - ArrayGetArray(g_playersFlags, i, player_flags); - - if (player_flags[pfTYPE] & FLAG_NICK) { - new name[MAX_NAME + 1]; - get_user_name(id, name, charsmax(name)); - if (! equali(name, player_flags[pfPLAYER])) { - continue; - } + new menu = menu_create("Wybierz metode platnosci", "paymentMethodMenu_handler"); + new menu_callback = menu_makecallback("paymentMethodMenu_callback"); + + menu_additem(menu, "SMS", "", 0, menu_callback); + menu_additem(menu, "Portfel", "", 0, menu_callback); + + new data[4]; + data[0] = id; + data[1] = menu; + + keepDisplayingMenu(data); +} + +public paymentMethodMenu_callback(id, menu, item) +{ + switch (item) { + case 0: { + return ITEM_ENABLED; } - else if (player_flags[pfTYPE] & FLAG_IP) { - new ip[MAX_IP + 1]; - get_user_ip(id, ip, charsmax(ip), true); - if (! equali(ip, player_flags[pfPLAYER])) { - continue; - } + case 1: { + return _canPayWithWallet(id) ? ITEM_ENABLED : ITEM_DISABLED; } - else if (player_flags[pfTYPE] & FLAG_AUTHID) { - new sid[MAX_SID + 1], arr_sid[MAX_SID + 1]; - copy(arr_sid, charsmax(arr_sid), player_flags[pfPLAYER]); - get_user_authid(id, sid, charsmax(sid)); - - strtolower(arr_sid); - strtolower(sid); - replace(sid, charsmax(sid), "steam_", ""); - replace(arr_sid, charsmax(arr_sid), "steam_", ""); - - if (! equali(sid, arr_sid)) { - continue; - } + } + + return ITEM_DISABLED; +} + +public paymentMethodMenu_handler(id, menu, item) +{ + remove_task(TASK_KEEP_DISPLAYING_MENU + id); + menu_destroy(menu); + + switch (item) { + case 0: { + _displaySmsDetails(id); } - - if (strlen(player_flags[pfPASSWORD])) { - new password[MAX_PASSWORD + 1], password_md5[34]; - - get_user_info(id, "_pw", password, charsmax(password)); - vc_md5(password, password_md5); - - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - get_user_info(id, "_pw2", password, charsmax(password)); - vc_md5(password, password_md5); - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - get_user_info(id, "_pw3", password, charsmax(password)); - vc_md5(password, password_md5); - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - get_user_info(id, "_ss", password, charsmax(password)); - vc_md5(password, password_md5); - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - if (! (player_flags[pfTYPE]&FLAG_KICK)) { // Nie kickuj gracza, tylko mu nie przydziel flag - continue; - } - - server_cmd("kick #%d ^"Nieprawidlowe haslo^"", get_user_userid(id)); - - return; - } - } - } - } + case 1: { + _purchaseService(id, "wallet"); } - - set_user_flags(id, player_flags[pfFLAGS]); - - // TODO Execute forward } } -// -// ------------------------------------------------- Server Configuration ---------------------------------------------------- -// - -_loadSettings() -{ - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%ssettings` \ - WHERE `key` IN ('shop_url', 'random_key')", - TABLE_PREFIX +_displaySmsDetails(id) +{ + if (!is_user_connected(id)) { + return; + } + + new service[e_Service], price[e_Price], number[MAX_NUMBER + 1]; + ArrayGetArray(services, which_service[id], service); + ArrayGetArray(pricelist, which_price[id], price); + _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + + new amount[32 + 1]; + if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); + } else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + } + + formatex(g_szTemp, charsmax(g_szTemp), "\rSklep SMS^n^n"); + format(g_szTemp, charsmax(g_szTemp), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", g_szTemp, service[sNAME], amount); + new temp_cost = get_sms_cost(number); + format(g_szTemp, charsmax(g_szTemp), + "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", + g_szTemp, g_smsText, number, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, + two_number_value(floatround(temp_cost * g_vat)%100), g_currency ); - SQL_ThreadQuery(SqlTuple, "loadSettingsHandler", g_szTemp); + format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); + + keepDisplayingSmsDetails(g_szTemp, TASK_KEEP_INFO_SMS + id); } -public loadSettingsHandler(FailState, Handle:Query, Error[], Errorcode) +public keepDisplayingSmsDetails(const info[], id) { - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { + id -= TASK_KEEP_INFO_SMS; + if (!is_user_connected(id)) { return; } + + show_menu(id, KEYS, info, 1, "smsDetails"); + set_task(0.9, "keepDisplayingSmsDetails", id+TASK_KEEP_INFO_SMS, info, strlen(info)); +} - while (SQL_MoreResults(Query)) { - new key[128], value[256]; +public smsDetails_handler(id, key) +{ + if (task_exists(TASK_KEEP_INFO_SMS + id)) { + remove_task(TASK_KEEP_INFO_SMS + id); + } - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "key"), key, charsmax(key)); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "value"), value, charsmax(value)); + if (!is_user_connected(id)) { + return; + } + + if (key == 0) { + client_cmd(id, "messagemode Podaj_Kod_Zwrotny"); + } else if (key == 9) { + client_print_color(id, Red, "^4[%s] ^1Transakcja zostala ^3przerwana^1.", PREFIX); + } +} - if (equali(key, "shop_url")) { - copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); - - // Remove trailing slash - if (strlen(g_shopPageUrl) && g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { - g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; - } - - if (! strlen(g_shopPageUrl)) { - _errorNoShopUrl(); - return; - } - } - else if (equali(key, "random_key")) { - copy(g_randomKey, charsmax(g_randomKey), value); - vc_md5(g_randomKey, g_randomKeyMD5); // Hashujemy random key - } +// Wprowadzanie kodu zwrotnego +public onSmsCodeEntered(id) +{ + if (!is_user_connected(id)) { + return; + } - SQL_NextRow(Query); + new sms_code[MAX_CODE + 1]; + read_argv(1, sms_code, charsmax(sms_code)); + + _log(id, "Wprowadzono kod: %s", sms_code); + + if (!strlen(sms_code)) { + client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); + return; } - _loadServerConfig(); + if (containi(sms_code, " ") != -1) { + client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1.", PREFIX); + return; + } + + if (strlen(sms_code) == 1 && containi(sms_code, "0") == 0) { + client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1byc rowny^3 0^1.", PREFIX); + return; + } + + _purchaseService(id, "sms", sms_code); } -_loadServerConfig() -{ - new url[MAX_URL + 1]; - formatex(url, charsmax(url), "%s/api/server/config?key=%s&ip=%s&port=%s&version=%s", g_shopPageUrl, g_randomKeyMD5, g_serverIp, g_serverPort, VERSION); +_purchaseService(id, const method[], const sms_code[] = "") { + client_print_color(id, Red, "^4[%s] ^1Trwa przeprowadzanie zakupu...", PREFIX); - if (!makeRequest("GET", url, 0, "", "onLoadServerConfigResponse")) { - _errorConfigFailed(999); + if (!_canUseShop()) { + client_print_color(id, Red, "^4[%s] ^1Sklep jest tymczaosowo nieaktywny.", PREFIX); + return; } -} + + new url[MAX_URL + 1]; + new body[MAX_BODY + 1]; + new curl_slist: headers; + { + new service[e_Service], auth_data[32 + 1], steam_id[32 + 1], price[e_Price], ip[MAX_IP + 1]; + new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], + u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; + + new sign[34], sign_body[1 + charsmax(auth_data) + charsmax(sms_code) + charsmax(g_randomKey) + 1]; + new header[MAX_HEADERS + 1]; -public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, playerId) -{ - if (code != CURLE_OK) { - _errorConfigFailed(code); - return; + // Pobieramy dane o usludze + ArrayGetArray(services, which_service[id], service); + + // Pobieramy dane gracza Nick / IP / SID + switch (b_types[id]) { + case TYPE_IP: get_user_ip(id, auth_data, charsmax(auth_data), true); + case TYPE_SID: get_user_authid(id, auth_data, charsmax(auth_data)); + case TYPE_NICK: get_user_name(id, auth_data, charsmax(auth_data)); + } + + // Jezeli usluga nie jest wykupowana na nickpass, ippass, sid, to pobieramy nick + if (!strlen(auth_data)) { + get_user_name(id, auth_data, charsmax(auth_data)); + } + + // Get user's IP + get_user_ip(id, ip, charsmax(ip), true); + + // Get user's SteamID + get_user_authid(id, steam_id, charsmax(steam_id)); + + // Get tariff + ArrayGetArray(pricelist, which_price[id], price); + + // Encode url params + StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); + StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); + StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); + StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); + StringURLEncode(steam_id, u_steam_id, charsmax(u_steam_id)); + + // Calculate body sign + formatex(sign_body, charsmax(sign_body), + "%d#%s#%s#%s", + b_types[id], auth_data, sms_code, g_randomKey + ); + vc_md5(sign_body, sign); + + formatex(header, charsmax(header), "Authorization: %s", steam_id); + headers = curl_slist_append(headers, header); + + formatex(body, charsmax(body), + "sign=%s&service=%s&type=%d&auth_data=%s&password=%s&method=%s&server=%d&payment_platform=%d&sms_code=%s&tariff=%d&ip=%s", + sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, g_smsPlatformId, u_sms_code, price[pTARIFF], ip + ); + + formatex(url, charsmax(url), "%s/api/server/purchase?key=%s&language=polish", g_shopPageUrl, g_randomKeyMD5); } - if (statusCode == 404) { - _errorNoServer(); - return; + if (!makeRequest("POST", url, headers, body, "onPurchaseServiceResponse", id)) { + client_print_color(id, Red, "^4[%s] ^1Nie udalo sie wykonac zapytania HTTP.", PREFIX); } +} - if (statusCode == 402) { - _errorOutdatedVersion(); +public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, playerId) +{ + if (code != CURLE_OK) { + log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); + client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow. Error: %d", PREFIX, code); return; } if (statusCode >= 300) { - _errorConfigInvalidResponse(statusCode); + client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny http code.", PREFIX); return; } + + new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[256]; - new szServices[512]; + getXMLValue(content, "return_value", return_value, charsmax(return_value)); + getXMLValue(content, "text", szText, charsmax(szText)); + getXMLValue(content, "positive", szPositive, charsmax(szPositive)); + getXMLValue(content, "bsid", szBsid, charsmax(szBsid)); + getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); + + trim(return_value); + trim(szText); + trim(szWarnings); - extractFieldValue(content, "id", g_szTemp, charsmax(g_szTemp)); - g_serverId = str_to_num(g_szTemp); - extractFieldValue(content, "sms_platform_id", g_szTemp, charsmax(g_szTemp)); - g_smsPlatformId = str_to_num(g_szTemp); - extractFieldValue(content, "sms_module_id", g_smsModuleId, charsmax(g_smsModuleId)); - extractFieldValue(content, "sms_text", g_smsText, charsmax(g_smsText)); - extractFieldValue(content, "services", szServices, charsmax(szServices)); - extractFieldValue(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); - extractFieldValue(content, "currency", g_currency, charsmax(g_currency)); - extractFieldValue(content, "contact", g_contact, charsmax(g_contact)); - extractFieldValue(content, "vat", g_szTemp, charsmax(g_szTemp)); - g_vat = str_to_float(g_szTemp); - extractFieldValue(content, "license_token", g_licenseToken, charsmax(g_licenseToken)); + if (!strlen(return_value)) { + log_amx("Invalid response: %s", content); + } - _validateLicense(); - _getServices(szServices); - _getSmsNumbers(); + _handlePurchaseServiceResponse(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); } -_getServices(const services[]) +_handlePurchaseServiceResponse(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) { - // Sprawdzanie dostepnosci usług - new service_id[MAX_SERVICE_ID + 1], service_id_space[MAX_SERVICE_ID + 2 + 1], ids[512], ids_len = 0, ids_max = charsmax(ids); - for (new i = 0; i < ArraySize(service_ids); ++i) { - ArrayGetString(service_ids, i, service_id, charsmax(service_id)); - formatex(service_id_space, charsmax(service_id_space), " %s ", service_id); - - if (containi(services, service_id_space) != -1) { - if (ids_len) { - ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); - } - - ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service_id); - } - else { // Usługa nieaktywna, lub brak usługi - // Zatrzymaj plugin uslugi - new plugin_name[64]; - get_plugin(ArrayGetCell(service_plugins, i), plugin_name, charsmax(plugin_name)); - pause("acd", plugin_name); - ArrayDeleteItem(service_ids, i); - ArrayDeleteItem(service_plugins, i); - i -= 1; - } + if (! is_user_connected(id)) { + return; } - // Jest chociaz jedna usluga, wiec pobieramy dane o uslugach - if (ids_len) { - if (SqlTuple) { - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%sservices` \ - WHERE `id` IN(%s) \ - ORDER BY `order` ASC", - TABLE_PREFIX, ids - ); - - SQL_ThreadQuery(SqlTuple, "getServicesHandler", g_szTemp); - } - } else { - _checkLoadedServices(); + client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(szText) ? szText : "Wystapil blad. Brak odpowiedzi z serwera."); + + if (strlen(szWarnings)) { + format(g_szTemp, charsmax(g_szTemp), + "\ + \ + \ +
    Bledy ktore wystapily przy zakupie uslugi
    \ + %s\ + Uzyj jeszcze raz tego samego kodu zwrotnego sms.\ + ", + szWarnings + ); + show_motd(id, g_szTemp, "Bledy przy zakupie uslugi"); } -} - -public getServicesHandler(FailState, Handle:Query, Error[], Errorcode) { - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { + + // Wystapil jakis blad, wiec przerywamy + if (! positive) { return; } - - new service[e_Service]; - new ids[512], ids_len = 0, ids_max = charsmax(ids); - while (SQL_MoreResults(Query)) - { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), service[sID], MAX_SERVICE_ID); - service[PLUGIN] = _getServicePluginByID(service[sID]); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), service[sNAME], MAX_SERVICE_NAME); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "short_description"), service[DESCRIPTION], MAX_DESCRIPTION); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tag"), service[TAG], MAX_SERVICE_TAG); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "flags"), service[FLAGS], 26); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "groups"), service[GROUPS], 32); - service[TYPES] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "types")); - ArrayPushArray(services, service); - - // Wyslanie danych uslugi do pluginu - new ret, forward_handle; - forward_handle = CreateOneForward(service[PLUGIN], "ss_service_data", FP_STRING, FP_STRING); - ExecuteForward(forward_handle, ret, service[sNAME], service[FLAGS]); - DestroyForward(forward_handle); + new ret, forward_handle, service[e_Service], price[e_Price], number[MAX_NUMBER+1]; + ArrayGetArray(services, which_service[id], service); + ArrayGetArray(pricelist, which_price[id], price); + _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + + forward_handle = CreateOneForward(service[PLUGIN], "ss_service_bought", FP_CELL, FP_CELL); + ExecuteForward(forward_handle, ret, id, price[AMOUNT]); + DestroyForward(forward_handle); + + // Wystapil jakis blad + if (ret == SS_ERROR) { + client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, g_contact); - // Przygotowywanie zapytania o priceliste - if (ids_len) { - ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); + new amount[32 + 1]; + if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); + } + else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); } - ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service[sID]); + _log(id, "Wystapil blad podczas kupowania %s - %s; Taryfa: %d", service[sNAME], amount, price[pTARIFF]); - SQL_NextRow(Query); - } - - _checkLoadedServices(); - - // Jest chociaz jedna usluga - if (ids_len) { - if (SqlTuple) { - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%spricelist` \ - WHERE (`server`='%d' OR `server`='-1') AND `service` IN (%s) \ - ORDER BY `amount` ASC", - TABLE_PREFIX, g_serverId, ids - ); - SQL_ThreadQuery(SqlTuple, "getPriceListHandler", g_szTemp); - } - } -} - -public getPriceListHandler(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { return; } - - while (SQL_MoreResults(Query)) - { - new price[e_Price]; - - price[pTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_SERVICE_ID); - price[AMOUNT] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "amount")); - - ArrayPushArray(pricelist, price); + + // Info w przypadku usługi na haslo + if (b_types[id] & (TYPE_NICK | TYPE_IP)) { + // Ustawienie hasla + client_cmd(id, "setinfo _ss ^"%s^"", b_passwords[id]); - SQL_NextRow(Query); + formatex(g_szTemp, charsmax(g_szTemp), + "


    \ +

    Wykupiles/as usluge: %s

    \ + Aby usluga dziala, dodaj wpis do pliku config.cfg: setinfo _ss ^"%s^"

    \ + W razie problemow skontaktuj sie z nami.\ +

    ", + service[sNAME], b_passwords[id] + ); + show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } -} - -_getSmsNumbers() -{ - if (SqlTuple) { - new payment_module_id[MAX_PAYMENT_MODULE_ID + 1]; - formatex(payment_module_id, charsmax(payment_module_id), "%s", g_smsModuleId); - escapeQuotes(payment_module_id, charsmax(payment_module_id)); - - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT `number`, `tariff` \ - FROM `%ssms_numbers` \ - WHERE `service` = '%s'", - TABLE_PREFIX, payment_module_id + else if (b_types[id] & TYPE_SID) { + formatex(g_szTemp, charsmax(g_szTemp), + "


    \ +

    Wykupiles/as usluge: %s

    \ + W razie problemow skontaktuj sie z nami.\ +

    ", + service[sNAME] ); - SQL_ThreadQuery(SqlTuple, "getSmsNumbersHandler", g_szTemp); + show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } -} - -public getSmsNumbersHandler(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; + + new amount[32 + 1]; + if (price[AMOUNT] == -1) {// Jezeli -1 to usluga jest na zawsze + formatex(amount, charsmax(amount), "Na zawsze"); } - - new sms[e_SMS]; - while (SQL_MoreResults(Query)) - { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "number"), sms[NUMBER], MAX_NUMBER); - sms[sTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); - ArrayPushArray(smses, sms); - - SQL_NextRow(Query); + else { + groupDigits(price[AMOUNT], amount, charsmax(amount)); + format(amount, charsmax(amount), "%s %s", amount, service[TAG]); + } + + client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], amount); + + // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy + if (service[FLAGS]) { + // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo + set_task(2.0, "command_loadPlayersServices"); } } +// +// ----------------------------------------------- OTHER ---------------------------------------------------- +// + /** * Wyswietlenie obecnych uslug gracza */ From 511233bd7b28e5ecb3c7ebc71a807f34781cb69e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 13:15:10 +0100 Subject: [PATCH 043/124] Add ss_client_access forward --- .../addons/amxmodx/scripting/include/shop_sms.inc | 15 ++++++++++++--- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 14 ++++++++++---- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc index 0a36e47..aaa413e 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc @@ -46,7 +46,7 @@ native bool:ss_is_steam(id); /*------------------------------ * Sprawdza, czy gracz ma steama * --------------------------- - * id - index gracza dokonujacego zakupu + * id - index gracza ------------------------------*/ forward ss_service_data(name[], flags[]); @@ -74,7 +74,7 @@ forward ss_service_chosen(id, amount); /*------------------------------ * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) * w momencie wybrania uslugi. - * Funkcja powinna zwraca jedna z dwoch wartosci: + * Funkcja powinna zwracac jedna z dwoch wartosci: * SS_OK * SS_STOP - gdy chcemy na pewien czas zatrzyma proces wykupowania usugi. * Potem musimy go wznowi za pomoca natywu ss_show_sms_info. @@ -92,8 +92,17 @@ forward ss_service_bought(id, amount); * amount - ilosc wykupionej uslugi ------------------------------*/ +forward ss_client_access(id, flags); +/*------------------------------ + * Forward wysylany do wszystkich pluginow w momencie przypisania uzytkownikowi flag. + * Zwracana wartosc jest ignorowana. + * --------------------------- + * id - index gracza + * flags - flagi, ktore zostaly ustawione uzytkownikowi +------------------------------*/ + stock pause_plugin() { static szFile[32]; get_plugin(-1, szFile, sizeof szFile); - pause("ad",szFile); + pause("ad", szFile); } diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 9935694..06eac5d 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -32,6 +32,14 @@ const MAX_CONTACT = 64; const MAX_RANDOM_KEY = 32; const MAX_PAYMENT_MODULE_ID = 32; + +// FORWARDs +new forwrdClientAccess; + +// CVARs +new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; +new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_komenda[MAX_COMMAND + 1], show_info; + enum e_KeyValue { kvKEY[128], kvVALUE[128] @@ -74,10 +82,6 @@ new which_service[33], b_passwords[33][MAX_PASSWORD + 1], b_types[33]; -// CVARy -new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; -new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_komenda[MAX_COMMAND + 1], show_info; - // Sciezka do pliku konfiguracyjnego new config_path[128]; @@ -151,6 +155,8 @@ public plugin_natives() register_native("ss_add_code", "native_addSmsCode"); register_native("ss_log", "native_addLog"); register_native("ss_is_steam", "native_is_steam"); + + forwrdClientAccess = CreateMultiForward("ss_client_access", ET_IGNORE, FP_CELL, FP_CELL); } public plugin_precache() From 973f4b34e3cb3d1e949e50db83bfbe05599d78df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 13:15:26 +0100 Subject: [PATCH 044/124] Add executing forward --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 06eac5d..1b56eda 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -907,7 +907,8 @@ _assignPlayerFlags(id) set_user_flags(id, player_flags[pfFLAGS]); - // TODO Execute forward + new ret; + ExecuteForward(forwrdClientAccess, ret, id, player_flags[pfFLAGS]); } } From 4ff3782c72d29d9b19a908b823c69258e7da5da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 13:16:30 +0100 Subject: [PATCH 045/124] Move registering forward to plugin init --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 1b56eda..4e777b9 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -155,8 +155,6 @@ public plugin_natives() register_native("ss_add_code", "native_addSmsCode"); register_native("ss_log", "native_addLog"); register_native("ss_is_steam", "native_is_steam"); - - forwrdClientAccess = CreateMultiForward("ss_client_access", ET_IGNORE, FP_CELL, FP_CELL); } public plugin_precache() @@ -254,6 +252,7 @@ public plugin_init() } g_signature = random_num(1, 99999999); + forwrdClientAccess = CreateMultiForward("ss_client_access", ET_IGNORE, FP_CELL, FP_CELL); } public plugin_cfg() { From e4005f410c61897f419ecde64ff1ec1bcf443e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 15:06:21 +0100 Subject: [PATCH 046/124] Rearrange --- .../addons/amxmodx/scripting/sklep_sms.sma | 263 +++++++++--------- 1 file changed, 130 insertions(+), 133 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 4e777b9..2bc6e77 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -32,6 +32,7 @@ const MAX_CONTACT = 64; const MAX_RANDOM_KEY = 32; const MAX_PAYMENT_MODULE_ID = 32; +new bool:g_AmxbansExists = false; // FORWARDs new forwrdClientAccess; @@ -40,12 +41,42 @@ new forwrdClientAccess; new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_komenda[MAX_COMMAND + 1], show_info; -enum e_KeyValue { - kvKEY[128], - kvVALUE[128] -}; +// MySQL +new const TABLE_PREFIX[] = "ss_"; +new Handle:SqlTuple; +new bool:g_sqlConnected = false; +new sql_host[MAX_URL_HOST + 1], sql_user[32], sql_pass[32], sql_db[32]; +new const all_flags[] = "abcdefghijklmnopqrstuyvwxz"; +new g_szTemp[4096]; + +// Server +new g_serverIp[MAX_IP + 1], + g_serverPort[MAX_PORT + 1], + g_serverName[MAX_SERVER_NAME + 1], + g_signature, + g_configPath[128]; + +// Server config +new g_serverId, + g_currency[16], + g_smsPlatformId, + g_smsModuleId[MAX_PAYMENT_MODULE_ID + 1], + g_contact[MAX_CONTACT + 1], + g_randomKey[MAX_RANDOM_KEY + 1], + g_randomKeyMD5[34], + g_shopPageUrl[MAX_URL + 1], + g_smsText[MAX_SMS_TEXT + 1], + Float:g_vat, + g_accountsSteamIds[1024] = "", + g_licenseToken[63]; -// Rejestracja uslug +// License +new bool:g_footer = true, + bool:g_blocked = false, + bool:g_validationAttempt = false, + bool:g_shopRegistered = false; + +// Services enum e_Service { sID[MAX_SERVICE_ID + 1], PLUGIN, @@ -61,14 +92,14 @@ new Array:service_plugins, Array:service_ids, Array:services; -// Numery i taryfy SMS +// SMS numbers and tariffs enum e_SMS { NUMBER[MAX_NUMBER + 1], sTARIFF, }; new Array:smses; -// Lista cen (taryf) dla usług +// Pricing enum e_Price { pSERVICE[MAX_SERVICE_ID + 1], pTARIFF, @@ -76,21 +107,18 @@ enum e_Price { }; new Array:pricelist; -//Dodatkowe zmienne +// Dodatkowe zmienne new which_service[33], which_price[33], b_passwords[33][MAX_PASSWORD + 1], b_types[33]; -// Sciezka do pliku konfiguracyjnego -new config_path[128]; - // Requests const MAX_RESPONSE = 1024; -const MAX_RESPONSE_COUNT = 5; -new g_requestCounter = 0; -new g_responses[MAX_RESPONSE_COUNT][MAX_RESPONSE + 1]; -new bool:g_requestsInProgress[MAX_RESPONSE_COUNT]; +const MAX_REQUESTS_COUNT = 5; +new g_requestCounter = 0, + g_responses[MAX_REQUESTS_COUNT][MAX_RESPONSE + 1], + bool:g_requestsInProgress[MAX_REQUESTS_COUNT]; enum requestStruct { RequestId, @@ -99,25 +127,6 @@ enum requestStruct { RequestPlayerId, }; -// License -new g_licenseToken[63]; -new bool:g_footer = true; -new g_serverIp[MAX_IP + 1]; -new g_serverPort[MAX_PORT + 1]; -new g_serverName[MAX_SERVER_NAME + 1]; -new bool:g_blocked = false; -new bool:g_validationAttempt = false; -new g_signature; - -// MySQL -new const TABLE_PREFIX[] = "ss_"; -new Handle:SqlTuple; -new bool:g_sqlConnected = false; -new sql_host[MAX_URL_HOST + 1], sql_user[32], sql_pass[32], sql_db[32]; -new g_serverId; -new const all_flags[] = "abcdefghijklmnopqrstuyvwxz"; -new g_szTemp[4096]; - // Players flags enum e_PlayerFlags { pfPLAYER[33], @@ -129,23 +138,6 @@ new Array:g_playersFlags; new bool:g_playersLoaded = false; new g_lastReassign; -// Accounts -new g_accountsSteamIds[4096] = ""; - -// Settings -new g_currency[16], - g_smsPlatformId, - g_smsModuleId[MAX_PAYMENT_MODULE_ID + 1], - g_contact[MAX_CONTACT + 1], - g_randomKey[MAX_RANDOM_KEY + 1], - g_randomKeyMD5[34], - g_shopPageUrl[MAX_URL + 1], - g_smsText[MAX_SMS_TEXT + 1], - Float:g_vat; - -new bool:g_shopRegistered = false; -new bool:g_AmxbansExists = false; - public plugin_natives() { register_library("shop_sms"); @@ -159,53 +151,9 @@ public plugin_natives() public plugin_precache() { - get_configsdir(config_path, charsmax(config_path)); + get_configsdir(g_configPath, charsmax(g_configPath)); - // Tworzenie pliku sklep_sms.cfg - format(config_path, charsmax(config_path), "%s/%s", config_path, CFG_FILE); - if (!file_exists(config_path)) { - new szText[1024], iLen=0, iMax=charsmax(szText); - iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// SKLEP SMS: - Plik Konfiguracyjny^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Wlacza / Wylacza sklepik^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// 1 - wlaczony^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// 0 - wylaczony^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_on ^"1^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu wyswietlenia menu sklepiku^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_sklep_komenda ^"/sklepsms^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu przeladowania flag wykupionych w sklepiku^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_przeladuj_komenda ^"/przeladuj^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_uslugi_komenda ^"/uslugi^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Czy po uzyciu powyzszych komend wyswietla sie one w chacie^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_ciche_komendy ^"0^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Wyswietlac informacje o sklepie na chacie?^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_info ^"1^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// ### Dane Bazy MySQL ###^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Adres IP^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_host ^"^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Uzytkownik^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_user ^"^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Haslo^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_pass ^"^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Nazwa bazy danych"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_db ^"^""); - write_file(config_path, szText); - } + _createShopSmsConfigFile(); cvar_on = register_cvar("sklepsms_on", "1"); cvar_sklep = register_cvar("sklepsms_sklep_komenda", "/sklepsms"); @@ -219,9 +167,9 @@ public plugin_precache() cvar_server_ip = register_cvar("sklepsms_server_ip", ""); cvar_silent_command = register_cvar("sklepsms_ciche_komendy", "0"); - // Wczytywanie confingu - if (file_exists(config_path)) { - server_cmd("exec %s", config_path); + // Read config + if (file_exists(g_configPath)) { + server_cmd("exec %s", g_configPath); } service_plugins = ArrayCreate(); @@ -257,13 +205,13 @@ public plugin_init() public plugin_cfg() { // Blad przy tworzeniu (brak uprawnien) - if (!file_exists(config_path)) { - _invalidPath(0, config_path); + if (!file_exists(g_configPath)) { + _invalidPath(0, g_configPath); } // Ponowne wczytywanie confingu - if (file_exists(config_path)) { - server_cmd("exec %s", config_path); + if (file_exists(g_configPath)) { + server_cmd("exec %s", g_configPath); server_exec(); } @@ -278,7 +226,9 @@ public plugin_cfg() { // Get server ip new fullIp[MAX_FULL_IP]; get_pcvar_string(cvar_server_ip, fullIp, charsmax(fullIp)); - if (!strlen(fullIp)) { // Brak ip w cvarach + + // Brak ip w cvarach + if (!strlen(fullIp)) { get_user_ip(0, fullIp, charsmax(fullIp), false); } @@ -875,33 +825,21 @@ _assignPlayerFlags(id) } } - if (strlen(player_flags[pfPASSWORD])) { - new password[MAX_PASSWORD + 1], password_md5[34]; - - get_user_info(id, "_pw", password, charsmax(password)); - vc_md5(password, password_md5); - - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - get_user_info(id, "_pw2", password, charsmax(password)); - vc_md5(password, password_md5); - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - get_user_info(id, "_pw3", password, charsmax(password)); - vc_md5(password, password_md5); - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - get_user_info(id, "_ss", password, charsmax(password)); - vc_md5(password, password_md5); - if (! equal(password_md5, player_flags[pfPASSWORD]) && !equal(password, player_flags[pfPASSWORD])) { - if (! (player_flags[pfTYPE]&FLAG_KICK)) { // Nie kickuj gracza, tylko mu nie przydziel flag - continue; - } - - server_cmd("kick #%d ^"Nieprawidlowe haslo^"", get_user_userid(id)); - - return; - } - } - } + if ( + strlen(player_flags[pfPASSWORD]) && + !_checkPassword(id, "_pw", player_flags[pfPASSWORD]) && + !_checkPassword(id, "_pw2", player_flags[pfPASSWORD]) && + !_checkPassword(id, "_pw3", player_flags[pfPASSWORD]) && + !_checkPassword(id, "_ss", player_flags[pfPASSWORD]) + ) { + + if (player_flags[pfTYPE]&FLAG_KICK) { + server_cmd("kick #%d ^"Nieprawidlowe haslo^"", get_user_userid(id)); + return; } + + // Do not kick the player, instead do not assign him any flags + continue; } set_user_flags(id, player_flags[pfFLAGS]); @@ -911,8 +849,18 @@ _assignPlayerFlags(id) } } +_checkPassword(id, const tag[], const valid_password[]) +{ + new password[MAX_PASSWORD + 1], password_md5[34]; + + get_user_info(id, tag, password, charsmax(password)); + vc_md5(password, password_md5); + + return equal(password_md5, valid_password) || equal(password, valid_password); +} + // -// ------------------------------------------------- Shop Menu ---------------------------------------------------- +// ------------------------------------------------- SHOP MENU ---------------------------------------------------- // _openShopMenu(id) @@ -1698,6 +1646,55 @@ public displayCommercial() } } +_createShopSmsConfigFile() +{ + format(g_configPath, charsmax(g_configPath), "%s/%s", g_configPath, CFG_FILE); + + if (!file_exists(g_configPath)) { + new szText[1024], iLen=0, iMax=charsmax(szText); + iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// SKLEP SMS: - Plik Konfiguracyjny^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Wlacza / Wylacza sklepik^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// 1 - wlaczony^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// 0 - wylaczony^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_on ^"1^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu wyswietlenia menu sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_sklep_komenda ^"/sklepsms^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu przeladowania flag wykupionych w sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_przeladuj_komenda ^"/przeladuj^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_uslugi_komenda ^"/uslugi^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Czy po uzyciu powyzszych komend wyswietla sie one w chacie^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_ciche_komendy ^"0^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Wyswietlac informacje o sklepie na chacie?^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_info ^"1^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// ### Dane Bazy MySQL ###^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Adres IP^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_host ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Uzytkownik^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_user ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Haslo^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_pass ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Nazwa bazy danych"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_db ^"^""); + write_file(g_configPath, szText); + } +} + // // ----------------------------------------------- LICENSE ---------------------------------------------------- // @@ -2039,7 +2036,7 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade return false; } - new requestId = g_requestCounter++ % MAX_RESPONSE_COUNT; + new requestId = g_requestCounter++ % MAX_REQUESTS_COUNT; if (g_requestsInProgress[requestId]) { log_to_file(LOG_FILE, "Pula requestetow jest pelna. Request nie zostal wykonany."); From c2e3e184c6d09550f32c993e3915c6262426b235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 9 Jan 2020 15:07:07 +0100 Subject: [PATCH 047/124] Version 3.8.2 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 0921b93..9a09159 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.8.1" +#define VERSION "3.8.2" #define PREFIX "SKLEP-SMS" From a4af135a3fcfc717cb673071840fae86ab9fe259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 20 Jan 2020 14:55:24 +0100 Subject: [PATCH 048/124] Check message --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 2bc6e77..39f2217 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1398,20 +1398,20 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl trim(szText); trim(szWarnings); - if (!strlen(return_value)) { + if (!strlen(szText)) { log_amx("Invalid response: %s", content); } _handlePurchaseServiceResponse(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); } -_handlePurchaseServiceResponse(id, const return_value[], const szText[], positive, bsid, const szWarnings[]) +_handlePurchaseServiceResponse(id, const return_value[], const message[], positive, bsid, const szWarnings[]) { if (! is_user_connected(id)) { return; } - client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(szText) ? szText : "Wystapil blad. Brak odpowiedzi z serwera."); + client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(message) ? message : "Wystapil blad. Brak odpowiedzi z serwera."); if (strlen(szWarnings)) { format(g_szTemp, charsmax(g_szTemp), From fafe503b07a84df8c3e037ee7cb1730b053cbaa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 21 Jan 2020 11:56:22 +0100 Subject: [PATCH 049/124] Remove warnings --- .../addons/amxmodx/scripting/sklep_sms.sma | 45 +++++++++---------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 39f2217..387ebf4 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -276,12 +276,12 @@ public amxbans_sql_initialized() public client_admin(id, flags) { - _assignPlayerFlags(id); + _assignPlayerFlags(id); } public amxx_admin_access(id, flags, timestamp) { - _assignPlayerFlags(id); + _assignPlayerFlags(id); } public sayHook(id) @@ -357,7 +357,7 @@ _loadServerConfig() new url[MAX_URL + 1]; formatex(url, charsmax(url), "%s/api/server/config?key=%s&ip=%s&port=%s&version=%s", g_shopPageUrl, g_randomKeyMD5, g_serverIp, g_serverPort, VERSION); - if (!makeRequest("GET", url, 0, "", "onLoadServerConfigResponse")) { + if (!makeRequest("GET", url, curl_slist:0, "", "onLoadServerConfigResponse")) { _errorConfigFailed(999); } } @@ -365,7 +365,7 @@ _loadServerConfig() public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, playerId) { if (code != CURLE_OK) { - _errorConfigFailed(code); + _errorConfigFailed(_:code); return; } @@ -1316,7 +1316,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; - new sign[34], sign_body[1 + charsmax(auth_data) + charsmax(sms_code) + charsmax(g_randomKey) + 1]; + new sign[34], sign_body[1 + charsmax(auth_data) + MAX_CODE + charsmax(g_randomKey) + 1]; new header[MAX_HEADERS + 1]; // Pobieramy dane o usludze @@ -1386,15 +1386,12 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl return; } - new return_value[33], szText[128], szPositive[3], szBsid[16], szWarnings[256]; + new szText[128], szPositive[3], szWarnings[256]; - getXMLValue(content, "return_value", return_value, charsmax(return_value)); getXMLValue(content, "text", szText, charsmax(szText)); getXMLValue(content, "positive", szPositive, charsmax(szPositive)); - getXMLValue(content, "bsid", szBsid, charsmax(szBsid)); getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); - trim(return_value); trim(szText); trim(szWarnings); @@ -1402,10 +1399,10 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl log_amx("Invalid response: %s", content); } - _handlePurchaseServiceResponse(playerId, return_value, szText, str_to_num(szPositive), str_to_num(szBsid), szWarnings); + _handlePurchaseServiceResponse(playerId, szText, str_to_num(szPositive), szWarnings); } -_handlePurchaseServiceResponse(id, const return_value[], const message[], positive, bsid, const szWarnings[]) +_handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[]) { if (! is_user_connected(id)) { return; @@ -2068,27 +2065,27 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade { // We want to get "nmemb" chars from "data", because sometime there is some noise at the end od "data" format(g_responses[requestId], min(nmemb, MAX_RESPONSE), data); - + // tell curl how many bytes we handled - return size * nmemb; + return size * nmemb; } @requestComplete(CURL: curl, CURLcode: code, const data[requestStruct]) { - if (code != CURLE_OK) { - new szError[128]; - curl_easy_strerror(code, szError, charsmax(szError)); - log_to_file(LOG_FILE, "CURL error: %d %s", code, szError); - } + if (code != CURLE_OK) { + new szError[128]; + curl_easy_strerror(code, szError, charsmax(szError)); + log_to_file(LOG_FILE, "CURL error: %d %s", code, szError); + } new statusCode; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, statusCode); - runRequestCallback(data[RequestCallback], g_responses[data[RequestId]], data[RequestPlayerId], code, statusCode); - g_requestsInProgress[data[RequestId]] = false; + runRequestCallback(data[RequestCallback], g_responses[data[RequestId]], data[RequestPlayerId], code, statusCode); + g_requestsInProgress[data[RequestId]] = false; - curl_easy_cleanup(curl); - curl_slist_free_all(data[RequestHeaders]); + curl_easy_cleanup(curl); + curl_slist_free_all(data[RequestHeaders]); } runRequestCallback(const function[], const httpResponseContent[], playerId, CURLcode: code, statusCode) @@ -2099,7 +2096,7 @@ runRequestCallback(const function[], const httpResponseContent[], playerId, CURL if (!strlen(function) || callfunc_begin(function) == 1) { callfunc_push_str(httpResponseContent); - callfunc_push_int(code); + callfunc_push_int(_:code); callfunc_push_int(statusCode); callfunc_push_int(playerId); callfunc_end(); @@ -2325,7 +2322,7 @@ stock StringURLEncode(const szInput[], szOutput[], const iLen) else if (cChar > 0xFF || cChar < 0x00) { cChar = 0x2A; } - + szOutput[ iFLen++ ] = 0x25; szOutput[ iFLen++ ] = HEXCHARS[ cChar >> 4 ]; szOutput[ iFLen++ ] = HEXCHARS[ cChar & 15 ]; From 162fc1c4678897c643291f9189df955f19349766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 22 Jan 2020 11:15:13 +0100 Subject: [PATCH 050/124] Prices (#14) --- .../amxmodx/scripting/include/shop_sms.inc | 8 - .../scripting/include/shop_sms_const.inc | 23 - .../addons/amxmodx/scripting/sklep_sms.sma | 630 ++++++++---------- 3 files changed, 277 insertions(+), 384 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc index aaa413e..60f544b 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc @@ -14,14 +14,6 @@ native ss_register_service(const service_id[]); * service_id[] - id uslugi ------------------------------*/ -native ss_add_code(sms_code[], tariff); -/*------------------------------ - * Dodaje kod do listy kodow do wykorzystania - * --------------------------- - * sms_code[] - kod SMS - * tariff - taryfa kodu ( wartosc ) -------------------------------*/ - native ss_show_sms_info(id); /*------------------------------ * Kontynuuje proces zakupu po zwroceniu wartosci SS_STOP w forwardzie ss_service_chosen diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 9a09159..992524f 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -14,29 +14,6 @@ #define SS_STOP -3 #define SS_BAD_ARGS -4 -#define MAX_SMS_TEXT 32 #define MAX_SERVICE_ID 16 -#define MAX_SERVICE_TAG 16 -#define MAX_SERVICE_NAME 32 -#define MAX_PASSWORD 32 -#define MAX_DESCRIPTION 28 -#define MAX_CODE 16 -#define MAX_NUMBER 16 -#define MAX_SERVER_NAME 128 -#define MAX_NAME 32 -#define MAX_SID 18 -#define MAX_IP 15 -#define MAX_PORT 8 -#define MAX_FULL_IP MAX_IP + MAX_PORT + 1 // ip + semicolon + port -#define MAX_URL_HOST 128 -#define MAX_URL_PATH 384 -#define MAX_URL MAX_URL_HOST + MAX_URL_PATH -#define MAX_HEADERS 128 -#define MAX_BODY 384 -#define MAX_FUNCTION 128 #define ITEM_OFF 3 - -#define TYPE_NICK 1<<0 -#define TYPE_IP 1<<1 -#define TYPE_SID 1<<2 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 387ebf4..acd5974 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -7,6 +7,7 @@ #include #pragma semicolon 1 +#pragma dynamic 65536 forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); forward client_admin(id, flags); @@ -23,14 +24,35 @@ forward amxx_admin_access(id, flags, timestamp); #define KEYS (1<<0)|(1<<9) // Keys: 10 // Logowanie danych -#define LOG_SQL -#define CFG_FILE "sklep_sms.cfg" +new const CFG_FILE[] = "sklep_sms.cfg"; new const LOG_FILE[] = "sklep_sms.log"; const MAX_COMMAND = 32; const MAX_CONTACT = 64; const MAX_RANDOM_KEY = 32; -const MAX_PAYMENT_MODULE_ID = 32; +const MAX_FLAGS = 26; +const MAX_SERVER_NAME = 128; +const MAX_SERVICE_TAG = 16; +const MAX_SERVICE_NAME = 32; +const MAX_SMS_TEXT = 32; +const MAX_PASSWORD = 32; +const MAX_DESCRIPTION = 28; +const MAX_CODE = 16; +const MAX_NUMBER = 16; +const MAX_NAME = 32; +const MAX_SID = 18; +const MAX_IP = 15; +const MAX_PORT = 8; +const MAX_FULL_IP = MAX_IP + MAX_PORT + 1; // ip + semicolon + port +const MAX_URL_HOST = 128; +const MAX_URL_PATH = 384; +const MAX_URL = MAX_URL_HOST + MAX_URL_PATH; +const MAX_HEADERS = 128; +const MAX_BODY = 384; +const MAX_FUNCTION = 128; +const TYPE_NICK = 1<<0; +const TYPE_IP = 1<<1; +const TYPE_SID = 1<<2; new bool:g_AmxbansExists = false; @@ -46,7 +68,7 @@ new const TABLE_PREFIX[] = "ss_"; new Handle:SqlTuple; new bool:g_sqlConnected = false; new sql_host[MAX_URL_HOST + 1], sql_user[32], sql_pass[32], sql_db[32]; -new const all_flags[] = "abcdefghijklmnopqrstuyvwxz"; +new const all_flags[MAX_FLAGS + 1] = "abcdefghijklmnopqrstuyvwxz"; new g_szTemp[4096]; // Server @@ -60,14 +82,13 @@ new g_serverIp[MAX_IP + 1], new g_serverId, g_currency[16], g_smsPlatformId, - g_smsModuleId[MAX_PAYMENT_MODULE_ID + 1], g_contact[MAX_CONTACT + 1], g_randomKey[MAX_RANDOM_KEY + 1], g_randomKeyMD5[34], g_shopPageUrl[MAX_URL + 1], g_smsText[MAX_SMS_TEXT + 1], Float:g_vat, - g_accountsSteamIds[1024] = "", + g_accountsSteamIds[4096] = "", g_licenseToken[63]; // License @@ -76,36 +97,43 @@ new bool:g_footer = true, bool:g_validationAttempt = false, bool:g_shopRegistered = false; -// Services enum e_Service { sID[MAX_SERVICE_ID + 1], PLUGIN, sNAME[MAX_SERVICE_NAME + 1], DESCRIPTION[MAX_DESCRIPTION + 1], TAG[MAX_SERVICE_TAG + 1], - GROUPS[33], - FLAGS[27], + FLAGS[MAX_FLAGS + 1], TYPES }; new Array:service_plugins, Array:service_ids, - Array:services; - -// SMS numbers and tariffs + Array:g_services; + enum e_SMS { NUMBER[MAX_NUMBER + 1], - sTARIFF, + PRICE, }; -new Array:smses; +new Array:g_smses; -// Pricing enum e_Price { - pSERVICE[MAX_SERVICE_ID + 1], - pTARIFF, - AMOUNT, + pID, + pSERVICE_ID[MAX_SERVICE_ID + 1], + SMS_PRICE, + QUANTITY, +}; +new Array:g_prices; + +enum e_PlayerFlags { + pfPLAYER[33], + pfFLAGS, + pfPASSWORD[MAX_PASSWORD+2], + pfTYPE }; -new Array:pricelist; +new Array:g_playersFlags; +new bool:g_playersLoaded = false; +new g_lastReassign; // Dodatkowe zmienne new which_service[33], @@ -114,7 +142,7 @@ new which_service[33], b_types[33]; // Requests -const MAX_RESPONSE = 1024; +const MAX_RESPONSE = 4096; const MAX_REQUESTS_COUNT = 5; new g_requestCounter = 0, g_responses[MAX_REQUESTS_COUNT][MAX_RESPONSE + 1], @@ -127,24 +155,12 @@ enum requestStruct { RequestPlayerId, }; -// Players flags -enum e_PlayerFlags { - pfPLAYER[33], - pfFLAGS, - pfPASSWORD[MAX_PASSWORD+2], - pfTYPE -}; -new Array:g_playersFlags; -new bool:g_playersLoaded = false; -new g_lastReassign; - public plugin_natives() { register_library("shop_sms"); register_native("ss_register_service", "native_registerService"); register_native("ss_show_service_purchase", "native_showServicePurchase"); register_native("ss_show_sms_info", "native_displaySmsDetails"); - register_native("ss_add_code", "native_addSmsCode"); register_native("ss_log", "native_addLog"); register_native("ss_is_steam", "native_is_steam"); } @@ -176,9 +192,9 @@ public plugin_precache() service_ids = ArrayCreate(MAX_SERVICE_ID + 1); g_playersFlags = ArrayCreate(e_PlayerFlags); - smses = ArrayCreate(e_SMS); - services = ArrayCreate(e_Service); - pricelist = ArrayCreate(e_Price); + g_smses = ArrayCreate(e_SMS); + g_services = ArrayCreate(e_Service); + g_prices = ArrayCreate(e_Price); } public plugin_init() @@ -384,173 +400,143 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p return; } - new szServices[512]; + getField(content, "license_token", g_licenseToken, charsmax(g_licenseToken)); + _validateLicense(); - extractFieldValue(content, "id", g_szTemp, charsmax(g_szTemp)); + getField(content, "id", g_szTemp, charsmax(g_szTemp)); g_serverId = str_to_num(g_szTemp); - extractFieldValue(content, "sms_platform_id", g_szTemp, charsmax(g_szTemp)); + getField(content, "sms_platform_id", g_szTemp, charsmax(g_szTemp)); g_smsPlatformId = str_to_num(g_szTemp); - extractFieldValue(content, "sms_module_id", g_smsModuleId, charsmax(g_smsModuleId)); - extractFieldValue(content, "sms_text", g_smsText, charsmax(g_smsText)); - extractFieldValue(content, "services", szServices, charsmax(szServices)); - extractFieldValue(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); - extractFieldValue(content, "currency", g_currency, charsmax(g_currency)); - extractFieldValue(content, "contact", g_contact, charsmax(g_contact)); - extractFieldValue(content, "vat", g_szTemp, charsmax(g_szTemp)); + getField(content, "sms_text", g_smsText, charsmax(g_smsText)); + getField(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); + getField(content, "currency", g_currency, charsmax(g_currency)); + getField(content, "contact", g_contact, charsmax(g_contact)); + getField(content, "vat", g_szTemp, charsmax(g_szTemp)); g_vat = str_to_float(g_szTemp); - extractFieldValue(content, "license_token", g_licenseToken, charsmax(g_licenseToken)); - _validateLicense(); - _getServices(szServices); - _getSmsNumbers(); + _extractSmsNumbers(content); + _extractPrices(content); + _extractServices(content); + + _stopPlugins(); + _checkLoadedServices(); } -_getServices(const services[]) +_extractSmsNumbers(const content[]) { - // Sprawdzanie dostepnosci usług - new service_id[MAX_SERVICE_ID + 1], service_id_space[MAX_SERVICE_ID + 2 + 1], ids[512], ids_len = 0, ids_max = charsmax(ids); - for (new i = 0; i < ArraySize(service_ids); ++i) { - ArrayGetString(service_ids, i, service_id, charsmax(service_id)); - formatex(service_id_space, charsmax(service_id_space), " %s ", service_id); - - if (containi(services, service_id_space) != -1) { - if (ids_len) { - ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); - } - - ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service_id); - } - else { // Usługa nieaktywna, lub brak usługi - // Zatrzymaj plugin uslugi - new plugin_name[64]; - get_plugin(ArrayGetCell(service_plugins, i), plugin_name, charsmax(plugin_name)); - pause("acd", plugin_name); - ArrayDeleteItem(service_ids, i); - ArrayDeleteItem(service_plugins, i); - i -= 1; - } - } - - // Jest chociaz jedna usluga, wiec pobieramy dane o uslugach - if (ids_len) { - if (SqlTuple) { - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%sservices` \ - WHERE `id` IN(%s) \ - ORDER BY `order` ASC", - TABLE_PREFIX, ids - ); - - SQL_ThreadQuery(SqlTuple, "getServicesHandler", g_szTemp); - } - } else { - _checkLoadedServices(); - } -} + new key[256]; -public getServicesHandler(FailState, Handle:Query, Error[], Errorcode) { - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } + formatex(key, charsmax(key), "sn.c"); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + new count = str_to_num(g_szTemp); - new service[e_Service]; - new ids[512], ids_len = 0, ids_max = charsmax(ids); - while (SQL_MoreResults(Query)) - { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "id"), service[sID], MAX_SERVICE_ID); - service[PLUGIN] = _getServicePluginByID(service[sID]); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "name"), service[sNAME], MAX_SERVICE_NAME); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "short_description"), service[DESCRIPTION], MAX_DESCRIPTION); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tag"), service[TAG], MAX_SERVICE_TAG); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "flags"), service[FLAGS], 26); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "groups"), service[GROUPS], 32); - service[TYPES] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "types")); - - ArrayPushArray(services, service); - - // Wyslanie danych uslugi do pluginu - new ret, forward_handle; - forward_handle = CreateOneForward(service[PLUGIN], "ss_service_data", FP_STRING, FP_STRING); - ExecuteForward(forward_handle, ret, service[sNAME], service[FLAGS]); - DestroyForward(forward_handle); - - // Przygotowywanie zapytania o priceliste - if (ids_len) { - ids_len += formatex(ids[ids_len], ids_max-ids_len, ","); - } - - ids_len += formatex(ids[ids_len], ids_max-ids_len, "'%s'", service[sID]); + for (new i = 0; i < count; ++i) { + new sms[e_SMS]; - SQL_NextRow(Query); - } - - _checkLoadedServices(); - - // Jest chociaz jedna usluga - if (ids_len) { - if (SqlTuple) { - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%spricelist` \ - WHERE (`server`='%d' OR `server`='-1') AND `service` IN (%s) \ - ORDER BY `amount` ASC", - TABLE_PREFIX, g_serverId, ids - ); - SQL_ThreadQuery(SqlTuple, "getPriceListHandler", g_szTemp); - } + formatex(key, charsmax(key), "sn.%d", i); + getField(content, key, sms[NUMBER], MAX_NUMBER); + + sms[PRICE] = get_sms_cost(sms[NUMBER]); + + ArrayPushArray(g_smses, sms); } } -public getPriceListHandler(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } +_extractPrices(const content[]) +{ + new key[256]; - while (SQL_MoreResults(Query)) - { + formatex(key, charsmax(key), "pr.c"); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + new count = str_to_num(g_szTemp); + + for (new i = 0; i < count; ++i) { new price[e_Price]; - price[pTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), price[pSERVICE], MAX_SERVICE_ID); - price[AMOUNT] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "amount")); + formatex(key, charsmax(key), "pr.%d.i", i); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + price[pID] = str_to_num(g_szTemp); - ArrayPushArray(pricelist, price); + formatex(key, charsmax(key), "pr.%d.s", i); + getField(content, key, price[pSERVICE_ID], MAX_SERVICE_ID); + + formatex(key, charsmax(key), "pr.%d.p", i); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + price[SMS_PRICE] = str_to_num(g_szTemp); + + formatex(key, charsmax(key), "pr.%d.q", i); + getField(content, key, g_szTemp, charsmax(g_szTemp)); - SQL_NextRow(Query); + if (strlen(g_szTemp)) { + price[QUANTITY] = str_to_num(g_szTemp); + } else { + price[QUANTITY] = -1; + } + + ArrayPushArray(g_prices, price); } } -_getSmsNumbers() +_extractServices(const content[]) { - if (SqlTuple) { - new payment_module_id[MAX_PAYMENT_MODULE_ID + 1]; - formatex(payment_module_id, charsmax(payment_module_id), "%s", g_smsModuleId); - escapeQuotes(payment_module_id, charsmax(payment_module_id)); + new key[256]; + + formatex(key, charsmax(key), "se.c"); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + new count = str_to_num(g_szTemp); + + for (new i = 0; i < count; ++i) { + new service[e_Service]; - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT `number`, `tariff` \ - FROM `%ssms_numbers` \ - WHERE `service` = '%s'", - TABLE_PREFIX, payment_module_id - ); - SQL_ThreadQuery(SqlTuple, "getSmsNumbersHandler", g_szTemp); + formatex(key, charsmax(key), "se.%d.i", i); + getField(content, key, service[sID], MAX_SERVICE_ID); + + service[PLUGIN] = _getServicePluginByID(service[sID]); + + formatex(key, charsmax(key), "se.%d.n", i); + getField(content, key, service[sNAME], MAX_SERVICE_NAME); + + formatex(key, charsmax(key), "se.%d.s", i); + getField(content, key, service[DESCRIPTION], MAX_DESCRIPTION); + + formatex(key, charsmax(key), "se.%d.ta", i); + getField(content, key, service[TAG], MAX_SERVICE_TAG); + + formatex(key, charsmax(key), "se.%d.f", i); + getField(content, key, service[FLAGS], MAX_FLAGS); + + formatex(key, charsmax(key), "se.%d.ty", i); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + service[TYPES] = str_to_num(g_szTemp); + + ArrayPushArray(g_services, service); + + // Wyslanie danych uslugi do pluginu + new ret, forward_handle; + forward_handle = CreateOneForward(service[PLUGIN], "ss_service_data", FP_STRING, FP_STRING); + ExecuteForward(forward_handle, ret, service[sNAME], service[FLAGS]); + DestroyForward(forward_handle); } } -public getSmsNumbersHandler(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } +_stopPlugins() +{ + new service_id[MAX_SERVICE_ID + 1]; + + for (new i = 0; i < ArraySize(service_ids); ++i) { + ArrayGetString(service_ids, i, service_id, charsmax(service_id)); + new index = _getServiceByID(service_id); - new sms[e_SMS]; - while (SQL_MoreResults(Query)) - { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "number"), sms[NUMBER], MAX_NUMBER); - sms[sTARIFF] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "tariff")); - ArrayPushArray(smses, sms); - - SQL_NextRow(Query); + // Service is inactive or does not exist + if (index == -1) { + // Stop the plugin + new plugin_name[64]; + get_plugin(ArrayGetCell(service_plugins, i), plugin_name, charsmax(plugin_name)); + pause("acd", plugin_name); + ArrayDeleteItem(service_ids, i); + ArrayDeleteItem(service_plugins, i); + i -= 1; + } } } @@ -883,7 +869,7 @@ _openShopMenu(id) return; } - if (!ArraySize(services)) { + if (!ArraySize(g_services)) { client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); return; } @@ -903,16 +889,10 @@ _openShopMenu(id) new menu_callback = menu_makecallback("shopMenu_callback"); new szText[64], service[e_Service]; - for (new i = 0; i < ArraySize(services); ++i) { + for (new i = 0; i < ArraySize(g_services); ++i) { new data[4]; data[0] = i + 1; - // Pobierz dane o usludze - ArrayGetArray(services, i, service); - - // Usluga wymaga posiadania grupy, TODO zakodzic to - // if (strlen(service[GROUPS])) { - // continue; - // } + ArrayGetArray(g_services, i, service); // Sforamtuj punkt w menu if (service[DESCRIPTION]) { @@ -934,7 +914,7 @@ _openShopMenu(id) } } - // Wyjdz zamiast Exit + // Replace Exit with Wyjdz menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(id, menu); @@ -971,47 +951,45 @@ _openPricingMenu(id, service_id) } new service[e_Service]; - ArrayGetArray(services, service_id, service); - new szText[64], data[3]; + ArrayGetArray(g_services, service_id, service); formatex(szText, charsmax(szText), "\rSklep SMS^n\yWybierz ilosc %s:", service[sNAME]); new menu = menu_create(szText, "pricingMenu_handler"); - new price[e_Price], number[MAX_NUMBER+1]; - for (new i = 0; i < ArraySize(pricelist); ++i) { - ArrayGetArray(pricelist, i, price); + new price[e_Price]; + for (new i = 0; i < ArraySize(g_prices); ++i) { + ArrayGetArray(g_prices, i, price); + // ID usługi jest inne - if (!equali(price[pSERVICE], service[sID])) { + if (!equali(price[pSERVICE_ID], service[sID])) { continue; } - - // Pobranie numeru na ktory trzeba wyslac SMSa - setc(number, strlen(number), 0); - _getNumberByTariff(price[pTARIFF], number, charsmax(number)); - - // Przy danej metodzie płatności nie można użyć danej taryfy - if (!strlen(number)) { + + // There is no SMS with a given price + if (_getSmsIndexByPrice(price[SMS_PRICE]) == -1) { continue; } + + new quantity[32 + 1]; + _getPriceQuantity(i, service_id, quantity, charsmax(quantity)); - new amount[32 + 1]; - if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); - } else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); - } - new temp_cost = get_sms_cost(number); formatex(szText, charsmax(szText), "\y%s \wza %d.%s %s + VAT\d ( %d.%s %s )", - amount, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, - two_number_value(floatround(temp_cost*g_vat)%100), g_currency + quantity, + price[SMS_PRICE] / 100, + two_number_value(price[SMS_PRICE] % 100), + g_currency, + floatround(price[SMS_PRICE] * g_vat) / 100, + two_number_value(floatround(price[SMS_PRICE] * g_vat) %100), + g_currency ); + data[0] = service_id+1; data[1] = min(127, i); // TODO: Problem przy ilosci uslug powyzej 256! data[2] = min(127, i-data[1]); + menu_additem(menu, szText, data); } @@ -1053,7 +1031,7 @@ public pricingMenu_handler(id, menu, item) _openServiceTypeMenu(id) { new service[e_Service]; - ArrayGetArray(services, which_service[id], service); + ArrayGetArray(g_services, which_service[id], service); if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { // Wyswietlamy menu z wyborem na co chcemy kupic usluge @@ -1079,7 +1057,7 @@ _openServiceTypeMenu(id) public serviceTypeMenu_callback(id, menu, item) { new service[e_Service]; - ArrayGetArray(services, which_service[id], service); + ArrayGetArray(g_services, which_service[id], service); switch (item) { case 0: return service[TYPES]&TYPE_NICK ? ITEM_ENABLED : ITEM_DISABLED; @@ -1148,14 +1126,14 @@ bool:_serviceTypeMenu_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) _serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") { new service[e_Service], price[e_Price]; - ArrayGetArray(services, which_service[id], service); - ArrayGetArray(pricelist, which_price[id], price); + ArrayGetArray(g_services, which_service[id], service); + ArrayGetArray(g_prices, which_price[id], price); copy(b_passwords[id], MAX_PASSWORD, szPassword); b_types[id] = type; new ret; new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_chosen", FP_CELL, FP_CELL); - ExecuteForward(forward_handle, ret, id, price[AMOUNT]); + ExecuteForward(forward_handle, ret, id, price[QUANTITY]); DestroyForward(forward_handle); if (ret != SS_STOP) { @@ -1164,10 +1142,7 @@ _serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") } _openPaymentMethodMenu(id) -{ - new service[e_Service]; - ArrayGetArray(services, which_service[id], service); - +{ new menu = menu_create("Wybierz metode platnosci", "paymentMethodMenu_handler"); new menu_callback = menu_makecallback("paymentMethodMenu_callback"); @@ -1216,26 +1191,28 @@ _displaySmsDetails(id) return; } - new service[e_Service], price[e_Price], number[MAX_NUMBER + 1]; - ArrayGetArray(services, which_service[id], service); - ArrayGetArray(pricelist, which_price[id], price); - _getNumberByTariff(price[pTARIFF], number, charsmax(number)); - - new amount[32 + 1]; - if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); - } else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); - } + new service[e_Service], price[e_Price], sms[e_SMS], quantity[32 + 1]; + ArrayGetArray(g_services, which_service[id], service); + ArrayGetArray(g_prices, which_price[id], price); + + new sms_index = _getSmsIndexByPrice(price[SMS_PRICE]); + ArrayGetArray(g_smses, sms_index, sms); + + _getPriceQuantity(which_price[id], which_service[id], quantity, charsmax(quantity)); formatex(g_szTemp, charsmax(g_szTemp), "\rSklep SMS^n^n"); - format(g_szTemp, charsmax(g_szTemp), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", g_szTemp, service[sNAME], amount); - new temp_cost = get_sms_cost(number); + format(g_szTemp, charsmax(g_szTemp), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", g_szTemp, service[sNAME], quantity); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", - g_szTemp, g_smsText, number, temp_cost/100, two_number_value(temp_cost%100), g_currency, floatround(temp_cost*g_vat)/100, - two_number_value(floatround(temp_cost * g_vat)%100), g_currency + g_szTemp, + g_smsText, + sms[NUMBER], + price[SMS_PRICE] / 100, + two_number_value(price[SMS_PRICE] % 100), + g_currency, + floatround(price[SMS_PRICE] * g_vat)/100, + two_number_value(floatround(price[SMS_PRICE] * g_vat) % 100), + g_currency ); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); @@ -1270,7 +1247,6 @@ public smsDetails_handler(id, key) } } -// Wprowadzanie kodu zwrotnego public onSmsCodeEntered(id) { if (!is_user_connected(id)) { @@ -1320,7 +1296,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { new header[MAX_HEADERS + 1]; // Pobieramy dane o usludze - ArrayGetArray(services, which_service[id], service); + ArrayGetArray(g_services, which_service[id], service); // Pobieramy dane gracza Nick / IP / SID switch (b_types[id]) { @@ -1340,8 +1316,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { // Get user's SteamID get_user_authid(id, steam_id, charsmax(steam_id)); - // Get tariff - ArrayGetArray(pricelist, which_price[id], price); + ArrayGetArray(g_prices, which_price[id], price); // Encode url params StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); @@ -1361,8 +1336,8 @@ _purchaseService(id, const method[], const sms_code[] = "") { headers = curl_slist_append(headers, header); formatex(body, charsmax(body), - "sign=%s&service=%s&type=%d&auth_data=%s&password=%s&method=%s&server=%d&payment_platform=%d&sms_code=%s&tariff=%d&ip=%s", - sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, g_smsPlatformId, u_sms_code, price[pTARIFF], ip + "sign=%s&service_id=%s&type=%d&auth_data=%s&password=%s&method=%s&server_id=%d&payment_platform_id=%d&sms_code=%s&price_id=%d&ip=%s", + sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, g_smsPlatformId, u_sms_code, price[pID], ip ); formatex(url, charsmax(url), "%s/api/server/purchase?key=%s&language=polish", g_shopPageUrl, g_randomKeyMD5); @@ -1429,30 +1404,21 @@ _handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[] return; } - new ret, forward_handle, service[e_Service], price[e_Price], number[MAX_NUMBER+1]; - ArrayGetArray(services, which_service[id], service); - ArrayGetArray(pricelist, which_price[id], price); - _getNumberByTariff(price[pTARIFF], number, charsmax(number)); + new ret, forward_handle, service[e_Service], price[e_Price]; + ArrayGetArray(g_services, which_service[id], service); + ArrayGetArray(g_prices, which_price[id], price); forward_handle = CreateOneForward(service[PLUGIN], "ss_service_bought", FP_CELL, FP_CELL); - ExecuteForward(forward_handle, ret, id, price[AMOUNT]); + ExecuteForward(forward_handle, ret, id, price[QUANTITY]); DestroyForward(forward_handle); + + new quantity[32 + 1]; + _getPriceQuantity(which_price[id], which_service[id], quantity, charsmax(quantity)); // Wystapil jakis blad if (ret == SS_ERROR) { client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, g_contact); - - new amount[32 + 1]; - if (price[AMOUNT] == -1) { // Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); - } - else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); - } - - _log(id, "Wystapil blad podczas kupowania %s - %s; Taryfa: %d", service[sNAME], amount, price[pTARIFF]); - + _log(id, "Wystapil blad podczas kupowania %s - %s; Kwota: %d", service[sNAME], quantity, price[SMS_PRICE]); return; } @@ -1482,16 +1448,7 @@ _handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[] show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } - new amount[32 + 1]; - if (price[AMOUNT] == -1) {// Jezeli -1 to usluga jest na zawsze - formatex(amount, charsmax(amount), "Na zawsze"); - } - else { - groupDigits(price[AMOUNT], amount, charsmax(amount)); - format(amount, charsmax(amount), "%s %s", amount, service[TAG]); - } - - client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], amount); + client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], quantity); // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy if (service[FLAGS]) { @@ -1579,33 +1536,8 @@ public showPlayerServices_handler(id, menu, item) menu_destroy(menu); } -/** - * Dodanie kodu do bazy kodow - * - * @param const char[] sms_code - * @param int sms_tariff - * @param bool free - */ -_addSmsCode(const sms_code[], sms_tariff, bool:free = true) -{ - formatex(g_szTemp, charsmax(g_szTemp), - "INSERT INTO `%ssms_codes` (`code`, `tariff`, `free`) \ - VALUES ('%s', '%d', '%d')", - TABLE_PREFIX, sms_code, sms_tariff, free - ); - - if (!SqlTuple) { - return SS_ERROR; - } - - SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); - _log(0, "Dodano SMSa do tabeli kodow do wykorzystania. Kod: %s Taryfa: %d", sms_code, sms_tariff); - return SS_OK; -} - _log(id, const szFormat[], any:...) -{ - #if defined LOG_SQL +{ vformat(g_szTemp, charsmax(g_szTemp), szFormat, 3); if (is_user_connected(id)) { @@ -1615,25 +1547,8 @@ _log(id, const szFormat[], any:...) get_user_authid(id, sid, charsmax(sid)); format(g_szTemp, charsmax(g_szTemp), "%s; %s; %s. %s", name, ip, sid, g_szTemp); } - - _logToSql(g_szTemp); - #endif -} -_logToSql(const text[]) -{ - if (SqlTuple) { - format(g_szTemp, charsmax(g_szTemp), "%s. Serwer: %d", text, g_serverId); - escapeQuotes(g_szTemp, charsmax(g_szTemp)); - - // Cannot be formatex, because param text is probably g_szTemp - format(g_szTemp, charsmax(g_szTemp), - "INSERT INTO `%slogs` (text) \ - VALUES ('%s')", - TABLE_PREFIX, g_szTemp - ); - SQL_ThreadQuery(SqlTuple, "IgnoreHandle", g_szTemp); - } + log_to_file(LOG_FILE, "%s", g_szTemp); } public displayCommercial() @@ -1847,16 +1762,15 @@ public keepDisplayingMenu(data[]) _checkLoadedServices() { - if (!ArraySize(services)) { + if (!ArraySize(g_services)) { log_amx("Nie zaladowano zadnych uslug do zakupienia."); } else { - log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(services)); + log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(g_services)); } } _invalidPath(id, const path[]) -{ - _log(0, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); +{ log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); if (id) { @@ -1873,15 +1787,15 @@ _getServicePluginByID(const id[]) return ArrayGetCell(service_plugins, i); } } - + return -1; } _getServiceByID(const id[]) { new service[e_Service]; - for (new i = 0; i < ArraySize(services); ++i) { - ArrayGetArray(services, i, service); + for (new i = 0; i < ArraySize(g_services); ++i) { + ArrayGetArray(g_services, i, service); if (equal(id, service[sID])) { return i; } @@ -1889,16 +1803,17 @@ _getServiceByID(const id[]) return -1; } -_getNumberByTariff(tariff, output[], len) -{ +_getSmsIndexByPrice(price) +{ new sms[e_SMS]; - for (new i = 0; i < ArraySize(smses); ++i) { - ArrayGetArray(smses, i, sms); - if (tariff == sms[sTARIFF]) { - copy(output, len, sms[NUMBER]); - return; + for (new i = 0; i < ArraySize(g_smses); ++i) { + ArrayGetArray(g_smses, i, sms); + if (price == sms[PRICE]) { + return i; } } + + return -1; } _getOrderOfType(type) @@ -1912,6 +1827,24 @@ _getOrderOfType(type) return 0; } +_getPriceQuantity(price_id, service_id, output[], len) +{ + new price[e_Price]; + new service[e_Service]; + + ArrayGetArray(g_prices, price_id, price); + ArrayGetArray(g_services, service_id, service); + + if (price[QUANTITY] == -1) { + formatex(output, len, "Na zawsze"); + } + else { + new temp[32 + 1]; + groupDigits(price[QUANTITY], temp, charsmax(temp)); + formatex(output, len, "%s %s", temp, service[TAG]); + } +} + _canUseShop() { return !g_blocked && g_shopRegistered && get_pcvar_num(cvar_on) && g_sqlConnected; @@ -2078,6 +2011,10 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade log_to_file(LOG_FILE, "CURL error: %d %s", code, szError); } + if (strlen(g_responses[data[RequestId]]) >= MAX_RESPONSE) { + log_to_file(LOG_FILE, "Response too big error | %s", g_responses[data[RequestId]]); + } + new statusCode; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, statusCode); @@ -2127,27 +2064,10 @@ public native_registerService(plugin, params) return SS_OK; } -// Dodawanie kodu do listy kodow do wykorzystania -public native_addSmsCode(plugin, params) -{ - if (params != 2) { - return SS_BAD_ARGS; - } - - new sms_code[MAX_CODE + 1], tariff; - get_string(1, sms_code, charsmax(sms_code)); - tariff = get_param(2); - - return _addSmsCode(sms_code, tariff); -} - -// Logowanie danych z pluginow zewnetrznych public native_addLog(plugin, params) { - #if defined LOG_SQL vdformat(g_szTemp, charsmax(g_szTemp), 1, 2); - _logToSql(g_szTemp); - #endif + log_to_file("%s", g_szTemp); } public native_showServicePurchase(plugin, params) @@ -2214,20 +2134,22 @@ stock escapeQuotes(string[], string_len) replace_all(string, string_len, "'", "\'"); } -stock get_sms_cost(const szNumber[]) +stock get_sms_cost(const number[]) { - if (strlen(szNumber) < 4) { + if (strlen(number) < 4) { return 0; } - else if (szNumber[0] == '7') { + + if (number[0] == '7') { new temp[4]; - formatex(temp, charsmax(temp), "%c", szNumber[1]); - return szNumber[1] == '0' ? 50 : str_to_num(temp)*100; + formatex(temp, charsmax(temp), "%c", number[1]); + return number[1] == '0' ? 50 : str_to_num(temp) * 100; } - else if (szNumber[0] == '9') { + + if (number[0] == '9') { new temp[4]; - formatex(temp, charsmax(temp), "%c%c", szNumber[1], szNumber[2]); - return str_to_num(temp)*100; + formatex(temp, charsmax(temp), "%c%c", number[1], number[2]); + return str_to_num(temp) * 100; } return 0; @@ -2259,11 +2181,11 @@ stock groupDigits(a, output[], len) } } -stock extractFieldValue(const text[], const field[], output[], len) +stock getField(const text[], const field[], output[], len) { new pattern[64]; formatex(pattern, charsmax(pattern), "^^%s:(.*)$", field); - matchRegex(text, pattern, output, len, 1); + return matchRegex(text, pattern, output, len, 1); } stock matchRegex(const text[], const pattern[], output[], len, group = 0) @@ -2274,9 +2196,11 @@ stock matchRegex(const text[], const pattern[], output[], len, group = 0) if (reg > REGEX_NO_MATCH) { regex_substr(reg, group, output, len); regex_free(reg); - } else { - log_to_file(LOG_FILE, "Regex error. Pattern: %s, Error: %s, Reg: %d", pattern, error, reg); + return true; } + + log_to_file(LOG_FILE, "Regex error. Pattern: %s, Error: %s, Reg: %d", pattern, error, reg); + return false; } stock getXMLValue(const szText[], const tag[], output[], len) From 99e32b98bdf9a27dd987f1de609b38d399742167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 22 Jan 2020 11:16:35 +0100 Subject: [PATCH 051/124] Version 3.9.0 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 992524f..e110322 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.8.2" +#define VERSION "3.9.0" #define PREFIX "SKLEP-SMS" From 494885eb4667068896ee9a0f611cee70aa3b8c7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 22 Jan 2020 17:01:20 +0100 Subject: [PATCH 052/124] Refactor logging --- .../amxmodx/scripting/include/shop_sms.inc | 8 +- .../addons/amxmodx/scripting/sklep_sms.sma | 82 ++++++++++--------- 2 files changed, 47 insertions(+), 43 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc index 60f544b..de02012 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc @@ -62,7 +62,7 @@ forward ss_service_addingtolist(id); * id - index gracza dokonujacego zakupu ------------------------------*/ -forward ss_service_chosen(id, amount); +forward ss_service_chosen(id, quantity); /*------------------------------ * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) * w momencie wybrania uslugi. @@ -72,16 +72,16 @@ forward ss_service_chosen(id, amount); * Potem musimy go wznowi za pomoca natywu ss_show_sms_info. * --------------------------- * id - index gracza dokonujacego zakupu - * amount - wybrana ilosc ( opcja ) + * quantity - wybrana ilosc ( opcja ) ------------------------------*/ -forward ss_service_bought(id, amount); +forward ss_service_bought(id, quantity); /*------------------------------ * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) w momencie zakupu uslugi. * Mozna zwrocic wartosc SS_ERROR w przypadku wystapienia bledu przy dodawaniu uslugi. * --------------------------- * id - index gracza dokonujacego zakupu - * amount - ilosc wykupionej uslugi + * quantity - ilosc wykupionej uslugi ------------------------------*/ forward ss_client_access(id, flags); diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index acd5974..2e62dc2 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -466,12 +466,7 @@ _extractPrices(const content[]) formatex(key, charsmax(key), "pr.%d.q", i); getField(content, key, g_szTemp, charsmax(g_szTemp)); - - if (strlen(g_szTemp)) { - price[QUANTITY] = str_to_num(g_szTemp); - } else { - price[QUANTITY] = -1; - } + price[QUANTITY] = str_to_num(g_szTemp); ArrayPushArray(g_prices, price); } @@ -492,11 +487,15 @@ _extractServices(const content[]) getField(content, key, service[sID], MAX_SERVICE_ID); service[PLUGIN] = _getServicePluginByID(service[sID]); + if (service[PLUGIN] == -1) { + _log("Service plugin was not found | service_id: [%s]", service[sID]); + continue; + } formatex(key, charsmax(key), "se.%d.n", i); getField(content, key, service[sNAME], MAX_SERVICE_NAME); - formatex(key, charsmax(key), "se.%d.s", i); + formatex(key, charsmax(key), "se.%d.d", i); getField(content, key, service[DESCRIPTION], MAX_DESCRIPTION); formatex(key, charsmax(key), "se.%d.ta", i); @@ -510,8 +509,7 @@ _extractServices(const content[]) service[TYPES] = str_to_num(g_szTemp); ArrayPushArray(g_services, service); - - // Wyslanie danych uslugi do pluginu + new ret, forward_handle; forward_handle = CreateOneForward(service[PLUGIN], "ss_service_data", FP_STRING, FP_STRING); ExecuteForward(forward_handle, ret, service[sNAME], service[FLAGS]); @@ -1256,7 +1254,7 @@ public onSmsCodeEntered(id) new sms_code[MAX_CODE + 1]; read_argv(1, sms_code, charsmax(sms_code)); - _log(id, "Wprowadzono kod: %s", sms_code); + _logActor(id, "Wprowadzono kod: %s", sms_code); if (!strlen(sms_code)) { client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); @@ -1351,7 +1349,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, playerId) { if (code != CURLE_OK) { - log_to_file(LOG_FILE, "Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); + _log("Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow. Error: %d", PREFIX, code); return; } @@ -1418,7 +1416,7 @@ _handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[] // Wystapil jakis blad if (ret == SS_ERROR) { client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, g_contact); - _log(id, "Wystapil blad podczas kupowania %s - %s; Kwota: %d", service[sNAME], quantity, price[SMS_PRICE]); + _logActor(id, "Wystapil blad podczas kupowania %s - %s; Kwota: %d", service[sNAME], quantity, price[SMS_PRICE]); return; } @@ -1536,18 +1534,24 @@ public showPlayerServices_handler(id, menu, item) menu_destroy(menu); } -_log(id, const szFormat[], any:...) +_logActor(id, const format[], any:...) { - vformat(g_szTemp, charsmax(g_szTemp), szFormat, 3); + vformat(g_szTemp, charsmax(g_szTemp), format, 3); if (is_user_connected(id)) { new name[MAX_NAME + 1], ip[MAX_IP + 1], sid[MAX_SID + 1]; get_user_name(id, name, charsmax(name)); get_user_ip(id, ip, charsmax(ip), true); get_user_authid(id, sid, charsmax(sid)); - format(g_szTemp, charsmax(g_szTemp), "%s; %s; %s. %s", name, ip, sid, g_szTemp); + log_to_file(LOG_FILE, "%s; %s; %s. %s", name, ip, sid, g_szTemp); + } else { + log_to_file(LOG_FILE, "%s", g_szTemp); } +} +_log(const format[], any:...) +{ + vformat(g_szTemp, charsmax(g_szTemp), format, 2); log_to_file(LOG_FILE, "%s", g_szTemp); } @@ -1651,7 +1655,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl g_validationAttempt = true; if (code != CURLE_OK) { - log_to_file(LOG_FILE, "Licencja nie zostala zwalidowana z nieznanych powodow. Error: %d", code); + _log("Licencja nie zostala zwalidowana z nieznanych powodow. Error: %d", code); return; } @@ -1688,7 +1692,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl trim(text); if (!equal(text, "ok")) { - log_to_file(LOG_FILE, "%s", content); + _log("%s", content); _errorUnknown(); return; } @@ -1720,17 +1724,17 @@ _checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) if (FailState != TQUERY_SUCCESS) { if (FailState == TQUERY_QUERY_FAILED) { - log_to_file(LOG_FILE, "Nie mozna polaczyc sie z baza danych."); + _log("Nie mozna polaczyc sie z baza danych."); } else if (FailState == TQUERY_CONNECT_FAILED) { - log_to_file(LOG_FILE, "Zapytanie anulowane."); + _log("Zapytanie anulowane."); g_sqlConnected = false; } - log_to_file(LOG_FILE, "Tresc bledu (%d): %s", Errorcode, Error); + _log("Tresc bledu (%d): %s", Errorcode, Error); SQL_GetQueryString(Query, g_szTemp, charsmax(g_szTemp)); - log_to_file(LOG_FILE, "Zapytanie: %s", g_szTemp); + _log("Zapytanie: %s", g_szTemp); return PLUGIN_HANDLED; } @@ -1771,7 +1775,7 @@ _checkLoadedServices() _invalidPath(id, const path[]) { - log_to_file(LOG_FILE, "Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); + _log("Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); if (id) { client_print_color(id, Blue, "^4[%s] ^1Wystapil ^3blad ^1przy zapisywaniu ustawien. Prawdopodobnie ^4brak uprawnien^1.", PREFIX); @@ -1827,13 +1831,13 @@ _getOrderOfType(type) return 0; } -_getPriceQuantity(price_id, service_id, output[], len) +_getPriceQuantity(price_index, service_index, output[], len) { new price[e_Price]; new service[e_Service]; - ArrayGetArray(g_prices, price_id, price); - ArrayGetArray(g_services, service_id, service); + ArrayGetArray(g_prices, price_index, price); + ArrayGetArray(g_services, service_index, service); if (price[QUANTITY] == -1) { formatex(output, len, "Na zawsze"); @@ -1875,22 +1879,22 @@ bool:_isDebug() // License _errorUnknown() { - log_to_file(LOG_FILE, "Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); + _log("Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); g_blocked = true; } _errorLicenseInvalidResponse(statusCode) { - log_to_file(LOG_FILE, "Error 11 - Serwer walidacyjny zwrocil bledny HTTP CODE %d.", statusCode); + _log("Error 11 - Serwer walidacyjny zwrocil bledny HTTP CODE %d.", statusCode); g_blocked = true; } _errorValidationError() { - log_to_file(LOG_FILE, "Error 12 - Walidacja wyslanych danych nie powiodla sie."); + _log("Error 12 - Walidacja wyslanych danych nie powiodla sie."); g_blocked = true; } _errorInvalidToken() { - log_to_file(LOG_FILE, "Error 13 - Bledny token licencji."); + _log("Error 13 - Bledny token licencji."); g_blocked = true; } @@ -1906,7 +1910,7 @@ _errorForbidden(const text[] = "") { // Config _errorConfigFailed(code) { - log_to_file(LOG_FILE, "Error 20 - Nie udalo sie pobrac konfiguracji serwera. Error: %d", code); + _log("Error 20 - Nie udalo sie pobrac konfiguracji serwera. Error: %d", code); g_blocked = true; } @@ -1919,7 +1923,7 @@ _errorOutdatedVersion() { } _errorConfigInvalidResponse(statusCode) { - log_to_file(LOG_FILE, "Error 23 - Podczas ladowania konfiguracji, strona WWW zwrocila bledny HTTP code %d.", statusCode); + _log("Error 23 - Podczas ladowania konfiguracji, strona WWW zwrocila bledny HTTP code %d.", statusCode); g_blocked = true; } @@ -1962,14 +1966,14 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade handle = curl_easy_init(); if (!handle) { - log_to_file(LOG_FILE, "Nie udalo sie utworzyc uchwytu CURL."); + _log("Nie udalo sie utworzyc uchwytu CURL."); return false; } new requestId = g_requestCounter++ % MAX_REQUESTS_COUNT; if (g_requestsInProgress[requestId]) { - log_to_file(LOG_FILE, "Pula requestetow jest pelna. Request nie zostal wykonany."); + _log("Pula requestetow jest pelna. Request nie zostal wykonany."); return false; } @@ -2008,11 +2012,11 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade if (code != CURLE_OK) { new szError[128]; curl_easy_strerror(code, szError, charsmax(szError)); - log_to_file(LOG_FILE, "CURL error: %d %s", code, szError); + _log("CURL error: %d %s", code, szError); } if (strlen(g_responses[data[RequestId]]) >= MAX_RESPONSE) { - log_to_file(LOG_FILE, "Response too big error | %s", g_responses[data[RequestId]]); + _log("Response too big error | %s", g_responses[data[RequestId]]); } new statusCode; @@ -2038,7 +2042,7 @@ runRequestCallback(const function[], const httpResponseContent[], playerId, CURL callfunc_push_int(playerId); callfunc_end(); } else { - log_to_file(LOG_FILE, "Funkcja nie zostala prawidlowo wywolana [%s]", function); + _log("Funkcja nie zostala prawidlowo wywolana [%s]", function); } } @@ -2050,7 +2054,7 @@ runRequestCallback(const function[], const httpResponseContent[], playerId, CURL public native_registerService(plugin, params) { if (params != 1) { - log_to_file(LOG_FILE, "Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); + _log("Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); return SS_BAD_ARGS; } @@ -2067,7 +2071,7 @@ public native_registerService(plugin, params) public native_addLog(plugin, params) { vdformat(g_szTemp, charsmax(g_szTemp), 1, 2); - log_to_file("%s", g_szTemp); + log_to_file(LOG_FILE, "%s", g_szTemp); } public native_showServicePurchase(plugin, params) @@ -2199,7 +2203,7 @@ stock matchRegex(const text[], const pattern[], output[], len, group = 0) return true; } - log_to_file(LOG_FILE, "Regex error. Pattern: %s, Error: %s, Reg: %d", pattern, error, reg); + _log("Regex error. Pattern: %s, Error: %s, Reg: %d", pattern, error, reg); return false; } From b62d159e7beb6ddcdac9c78bfa04a5e84286d3ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 25 Jan 2020 12:23:47 +0100 Subject: [PATCH 053/124] Hide message --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 2e62dc2..e016060 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -488,7 +488,9 @@ _extractServices(const content[]) service[PLUGIN] = _getServicePluginByID(service[sID]); if (service[PLUGIN] == -1) { - _log("Service plugin was not found | service_id: [%s]", service[sID]); + if (_isDebug()) { + _log("Service plugin was not found | service_id: [%s]", service[sID]); + } continue; } From 31891eeac51ce6b69173ad0ac251c9b170074940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 26 Jan 2020 12:30:27 +0100 Subject: [PATCH 054/124] Replace isdebug --- .../addons/amxmodx/scripting/sklep_sms.sma | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index e016060..c028607 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -13,6 +13,8 @@ forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); forward client_admin(id, flags); forward amxx_admin_access(id, flags, timestamp); +//#define IS_DEBUG; + #define FLAG_NICK (1<<5) // ID zadan @@ -396,11 +398,17 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p } if (statusCode >= 300) { - _errorConfigInvalidResponse(statusCode); + _log("Invalid server config response HTTP code | %d", statusCode); + _errorConfigInvalidResponse(); return; } - getField(content, "license_token", g_licenseToken, charsmax(g_licenseToken)); + if (!getField(content, "license_token", g_licenseToken, charsmax(g_licenseToken))) { + _log("Invalid server config response | %s", content); + _errorConfigInvalidResponse(); + return; + } + _validateLicense(); getField(content, "id", g_szTemp, charsmax(g_szTemp)); @@ -488,9 +496,9 @@ _extractServices(const content[]) service[PLUGIN] = _getServicePluginByID(service[sID]); if (service[PLUGIN] == -1) { - if (_isDebug()) { - _log("Service plugin was not found | service_id: [%s]", service[sID]); - } + #if defined IS_DEBUG + _log("Service plugin was not found | service_id: [%s]", service[sID]); + #endif continue; } @@ -1694,7 +1702,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl trim(text); if (!equal(text, "ok")) { - _log("%s", content); + _log("Invalid license validation response | %s", content); _errorUnknown(); return; } @@ -1870,11 +1878,6 @@ _canPayWithWallet(id) return containi(g_accountsSteamIds, steam_id) != -1; } -bool:_isDebug() -{ - return false; -} - // // ------------------------------------------------- ERRORS ---------------------------------------------------- // @@ -1924,8 +1927,8 @@ _errorOutdatedVersion() { _make_error("Error 22 - Obecna wersja pluginu nie jest juz wspierana. Dokonaj aktualizacji pluginu."); } -_errorConfigInvalidResponse(statusCode) { - _log("Error 23 - Podczas ladowania konfiguracji, strona WWW zwrocila bledny HTTP code %d.", statusCode); +_errorConfigInvalidResponse() { + _log("Error 23 - Wystapil blad podczas ladowania konfiguracji serwera."); g_blocked = true; } @@ -1962,9 +1965,9 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade { new CURL: handle, curl_slist: newHeaders, data[requestStruct]; - if (_isDebug()) { - log_amx("Request | %s %s %s", method, url, body); - } + #if defined IS_DEBUG + log_amx("Request | %s %s %s", method, url, body); + #endif handle = curl_easy_init(); if (!handle) { @@ -2033,9 +2036,9 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade runRequestCallback(const function[], const httpResponseContent[], playerId, CURLcode: code, statusCode) { - if (_isDebug()) { - log_amx("Request response | %d %d %s", code, statusCode, httpResponseContent); - } + #if defined IS_DEBUG + log_amx("Request response | %d %d %s", code, statusCode, httpResponseContent); + #endif if (!strlen(function) || callfunc_begin(function) == 1) { callfunc_push_str(httpResponseContent); From 603534da8906046fdd49520b9f405b0ed94aa3f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 26 Jan 2020 12:30:53 +0100 Subject: [PATCH 055/124] Version 3.9.1 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index e110322..09d9962 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.0" +#define VERSION "3.9.1" #define PREFIX "SKLEP-SMS" From 99feebe7b37b8da6501ba4cc12c02f8bb5dfb1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 27 Jan 2020 13:47:35 +0100 Subject: [PATCH 056/124] Do not pass platform --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index c028607..6a383ff 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -668,7 +668,7 @@ public loadPlayersServicesHandler(FailState, Handle:Query, Error[], Errorcode, d SQL_NextRow(Query); } - log_amx("Zaladowano %d uslug graczy", ArraySize(g_playersFlags)); + log_amx("Zaladowano %d uslug graczy.", ArraySize(g_playersFlags)); g_playersLoaded = true; if (data[0] && g_AmxbansExists) { // Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien @@ -1643,7 +1643,7 @@ _validateLicense() headers = curl_slist_append(headers, header); formatex(body, charsmax(body), - "platform=amxmodx&url=%s:%s&name=%s&version=%s&signature=%d&platform_version=%s", + "url=%s:%s&name=%s&version=%s&signature=%d&platform_version=%s", g_serverIp, g_serverPort, serverNameEscaped, VERSION, g_signature, AMXX_VERSION_STR ); } @@ -1894,7 +1894,7 @@ _errorLicenseInvalidResponse(statusCode) { } _errorValidationError() { - _log("Error 12 - Walidacja wyslanych danych nie powiodla sie."); + _log("Error 12 - Walidacja wyslanych danych do serwera walidacyjnego nie powiodla sie."); g_blocked = true; } From ee0720f93243fa52eb48704bda127979074bc839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 27 Jan 2020 13:53:57 +0100 Subject: [PATCH 057/124] Version 3.9.2 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 09d9962..70e4f25 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.1" +#define VERSION "3.9.2" #define PREFIX "SKLEP-SMS" From cfd2ff3864e3c98e33cf29e9311363826ac7d659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 29 Jan 2020 19:38:59 +0100 Subject: [PATCH 058/124] Use SQL_SetCharset and SQL_QuoteString --- .../addons/amxmodx/scripting/sklep_sms.sma | 23 +++++++------- server/Dockerfile | 7 +++-- server/run.sh | 30 ++++++++++++++++++- 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 6a383ff..b0286d9 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -235,11 +235,14 @@ public plugin_cfg() { _loadCvars(); - // Łaczenie z baza SqlTuple = SQL_MakeDbTuple(sql_host, sql_user, sql_pass, sql_db); if (! SqlTuple) { _error51(); } + + #if defined SQL_SetCharset + SQL_SetCharset(SqlTuple, "utf8mb4"); + #endif // Get server ip new fullIp[MAX_FULL_IP]; @@ -1478,15 +1481,16 @@ _showPlayerServices(id) return; } - new name[MAX_NAME * 2 + 1], sid[MAX_SID * 2 + 1], ip[MAX_IP + 1]; + new name[MAX_NAME + 1], sid[MAX_SID + 1], ip[MAX_IP + 1]; + new escaped_name[MAX_NAME * 2 + 1], escaped_sid[MAX_SID * 2 + 1], escaped_ip[MAX_IP * 2 + 1]; get_user_name(id, name, charsmax(name)); get_user_ip(id, ip, charsmax(ip), true); get_user_authid(id, sid, charsmax(sid)); - escapeQuotes(name, charsmax(name)); - escapeQuotes(ip, charsmax(ip)); - escapeQuotes(sid, charsmax(sid)); - + SQL_QuoteString(SqlTuple, escaped_name, charsmax(escaped_name), name); + SQL_QuoteString(SqlTuple, escaped_ip, charsmax(escaped_ip), ip); + SQL_QuoteString(SqlTuple, escaped_sid, charsmax(escaped_sid), sid); + if (SqlTuple) { new data[1]; data[0] = id; formatex(g_szTemp, charsmax(g_szTemp), @@ -1497,7 +1501,7 @@ _showPlayerServices(id) AND ((usef.type = '%d' AND usef.auth_data = '%s') \ OR (usef.type = '%d' AND usef.auth_data = '%s') \ OR (usef.type = '%d' AND usef.auth_data = '%s'))", - TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, g_serverId, TYPE_NICK, name, TYPE_IP, ip, TYPE_SID, sid + TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, g_serverId, TYPE_NICK, escaped_name, TYPE_IP, escaped_ip, TYPE_SID, escaped_sid ); SQL_ThreadQuery(SqlTuple, "showPlayerServicesHandler", g_szTemp, data, sizeof data); @@ -2138,11 +2142,6 @@ stock bool:is_steam(id) return false; } -stock escapeQuotes(string[], string_len) -{ - replace_all(string, string_len, "'", "\'"); -} - stock get_sms_cost(const number[]) { if (strlen(number) < 4) { diff --git a/server/Dockerfile b/server/Dockerfile index 9ddc345..59f61ff 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,7 +1,8 @@ FROM cm2network/steamcmd +ARG BASE_URL +ARG CSTRIKE_URL ARG metamod_version=1.20 -ARG amxmod_version=1.8.2 # Install unzip USER root @@ -33,8 +34,8 @@ ADD server/files/plugins.ini /home/steam/dedicated/cstrike/addons/metamod/plugin # ADD files/dproto.cfg /opt/hlds/cstrike/dproto.cfg # Install AMX mod X -RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-base-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - -RUN curl -sqL "http://www.amxmodx.org/release/amxmodx-$amxmod_version-cstrike-linux.tar.gz" | tar -C /home/steam/dedicated/cstrike/ -zxvf - +RUN curl -sqL "${BASE_URL}" | tar -C /home/steam/dedicated/cstrike/ -zxvf - +RUN curl -sqL "${CSTRIKE_URL}" | tar -C /home/steam/dedicated/cstrike/ -zxvf - # Add shopsms RUN sed -i '1s/^/sklep_sms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini diff --git a/server/run.sh b/server/run.sh index 63f3279..02a70ff 100755 --- a/server/run.sh +++ b/server/run.sh @@ -1,8 +1,36 @@ #!/usr/bin/env bash +set -e + +if [ "$#" -lt 1 ]; then + echo "Usage: ./run.sh " + exit 1 +fi + +declare -A BASE_VERSIONS=( + ["1.8.2"]="https://www.amxmodx.org/release/amxmodx-1.8.2-base-linux.tar.gz" + ["1.8.3"]="https://www.amxmodx.org/amxxdrop/1.8/amxmodx-1.8.3-dev-git5201-base-linux.tar.gz" + ["1.9.0"]="https://www.amxmodx.org/amxxdrop/1.9/amxmodx-1.9.0-git5241-base-linux.tar.gz" +) + +declare -A CSTRKE_VERSIONS=( + ["1.8.2"]="https://www.amxmodx.org/release/amxmodx-1.8.2-cstrike-linux.tar.gz" + ["1.8.3"]="https://www.amxmodx.org/amxxdrop/1.8/amxmodx-1.8.3-dev-git5201-cstrike-linux.tar.gz" + ["1.9.0"]="https://www.amxmodx.org/amxxdrop/1.9/amxmodx-1.9.0-git5241-cstrike-linux.tar.gz" +) + +BUILD_VERSION=$1 + +if [ -v ${BASE_VERSIONS[${BUILD_VERSION}]} ]; then + echo "Invalid version" + exit 1 +fi + DIR="$( cd "$( dirname $( dirname "${BASH_SOURCE[0]}" ) )" && pwd )" +BASE_URL="${BASE_VERSIONS[${BUILD_VERSION}]}" +CSTRIKE_URL="${CSTRKE_VERSIONS[${BUILD_VERSION}]}" # RUN IMAGE_NAME="cs16" -docker build -t ${IMAGE_NAME} -f "$DIR/server/Dockerfile" . \ +docker build -t ${IMAGE_NAME} --build-arg BASE_URL="${BASE_URL}" --build-arg CSTRIKE_URL="${CSTRIKE_URL}" -f "$DIR/server/Dockerfile" . \ && docker run --rm -it -p 27015:27015 --network sklepsms_default --name sklepsms_cs16 ${IMAGE_NAME} From b704bb4f06dd07d7d8a643c1319fe6c6ae4964ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 29 Jan 2020 19:39:39 +0100 Subject: [PATCH 059/124] Version 3.9.3 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 70e4f25..6c5ba9e 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.2" +#define VERSION "3.9.3" #define PREFIX "SKLEP-SMS" From 7c5ac52fa8437afff8dc0950e3ff9c4632b7c7e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 29 Jan 2020 19:47:05 +0100 Subject: [PATCH 060/124] Revert "Version 3.9.3" This reverts commit b704bb4f06dd07d7d8a643c1319fe6c6ae4964ef. --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 6c5ba9e..70e4f25 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.3" +#define VERSION "3.9.2" #define PREFIX "SKLEP-SMS" From b704ceec94782e3524ed0b61ff54e984c0a38136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 31 Jan 2020 00:00:29 +0100 Subject: [PATCH 061/124] Fix receiving data --- .../scripting/include/shop_sms_const.inc | 2 +- .../addons/amxmodx/scripting/sklep_sms.sma | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 70e4f25..6c5ba9e 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.2" +#define VERSION "3.9.3" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index b0286d9..a63a321 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1986,10 +1986,13 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade return false; } + // Clear response array + setc(g_responses[RequestId], MAX_RESPONSE, 0); g_requestsInProgress[requestId] = true; data[RequestId] = requestId; data[RequestPlayerId] = playerId; - format(data[RequestCallback], MAX_FUNCTION + 1, callback); + formatex(data[RequestCallback], MAX_FUNCTION, callback); + newHeaders = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"); data[RequestHeaders] = newHeaders; @@ -2009,10 +2012,17 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade @responseWrite(const data[], const size, const nmemb, const requestId) { + new iLen = strlen(g_responses[requestId]); + new max_length = MAX_RESPONSE - iLen; + + if (max_length < nmemb) { + _log("Response too big error | %s", data); + } + // We want to get "nmemb" chars from "data", because sometime there is some noise at the end od "data" - format(g_responses[requestId], min(nmemb, MAX_RESPONSE), data); + formatex(g_responses[requestId][iLen], min(nmemb, max_length), data); - // tell curl how many bytes we handled + // Tell curl how many bytes we handled return size * nmemb; } @@ -2024,10 +2034,6 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade _log("CURL error: %d %s", code, szError); } - if (strlen(g_responses[data[RequestId]]) >= MAX_RESPONSE) { - _log("Response too big error | %s", g_responses[data[RequestId]]); - } - new statusCode; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, statusCode); From b5cfc272fd41a5ddcd1b0c8ad433bef86c6c1e6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 31 Jan 2020 21:36:57 +0100 Subject: [PATCH 062/124] Better variables naming --- .../addons/amxmodx/scripting/amxbans_core.sma | 0 .../addons/amxmodx/scripting/sklep_sms.sma | 70 +++++++++++-------- 2 files changed, 40 insertions(+), 30 deletions(-) mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/amxbans_core.sma diff --git a/cstrike/addons/amxmodx/scripting/amxbans_core.sma b/cstrike/addons/amxmodx/scripting/amxbans_core.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index a63a321..27c8835 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -707,48 +707,58 @@ public addUsersToGlobalArray() set_task(0.1, "addUsersToGlobalArray"); return; } - - // Potrzebujemy drugiej tablicy, zeby elementy z amxbansa mialy takie samo id - new Array:users, Array:users2; - users = ArrayCreate(e_PlayerFlags); - users2 = ArrayCreate(e_PlayerFlags); + + // We want to persist order on the global admins list! + // We clone players flags. Then we iterate over admins stored in global admins storage. + // 1. If there is the same entry in our players flags list and in the global storage, + // then we join them into one entry and store it in the global_users. User is removed + // from the local_users. + // 2. If entry exists only in the global storage, then we simply copy it to global_users. + // Now we put local_users and global_users into the global admins storage. + + new Array:users, Array:joined_users; + local_users = ArrayCreate(e_PlayerFlags); + global_users = ArrayCreate(e_PlayerFlags); for (new i = 0; i < ArraySize(g_playersFlags); ++i) { new player_flags[e_PlayerFlags]; ArrayGetArray(g_playersFlags, i, player_flags); - ArrayPushArray(users, player_flags); + ArrayPushArray(local_users, player_flags); } for (new i = 0; i < admins_num(); ++i) { - new player_flags[e_PlayerFlags], name_bak[33]; + new global_player[e_PlayerFlags], global_player_name[33]; - admins_lookup(i, AdminProp_Auth, player_flags[pfPLAYER], 32); - copy(name_bak, charsmax(name_bak), player_flags[pfPLAYER]); - strtolower(name_bak); + admins_lookup(i, AdminProp_Auth, global_player[pfPLAYER], 32); + copy(global_player_name, charsmax(global_player_name), global_player[pfPLAYER]); + strtolower(global_player_name); - admins_lookup(i, AdminProp_Password, player_flags[pfPASSWORD], MAX_PASSWORD); + admins_lookup(i, AdminProp_Password, global_player[pfPASSWORD], MAX_PASSWORD); - player_flags[pfTYPE] = admins_lookup(i, AdminProp_Flags); - player_flags[pfFLAGS] = admins_lookup(i, AdminProp_Access); + global_player[pfTYPE] = admins_lookup(i, AdminProp_Flags); + global_player[pfFLAGS] = admins_lookup(i, AdminProp_Access); - new l = 0, p = ArraySize(users)-1, s; + new l = 0, p = ArraySize(local_users)-1, s; while (l <= p) { - new player_flags2[e_PlayerFlags]; + new local_player[e_PlayerFlags]; s = (l + p) / 2; - ArrayGetArray(users, s, player_flags2); - strtolower(player_flags2[pfPLAYER]); - if (equali(name_bak, player_flags2[pfPLAYER]) && player_flags[pfTYPE] == player_flags2[pfTYPE]) { - // Zostawiamy haslo AMXBansa - player_flags[pfFLAGS] |= player_flags2[pfFLAGS]; - ArrayPushArray(users2, player_flags); - ArrayDeleteItem(users, s); + ArrayGetArray(local_users, s, local_player); + strtolower(local_player[pfPLAYER]); + if (global_player[pfTYPE] == local_player[pfTYPE] && equali(global_player_name, local_player[pfPLAYER])) { + // Leave global password + global_player[pfFLAGS] |= local_player[pfFLAGS]; + ArrayPushArray(global_users, global_player); + ArrayDeleteItem(local_users, s); break; } - else if (strcmp(name_bak, player_flags2[pfPLAYER]) > 0) { + else if (strcmp(global_player_name, local_player[pfPLAYER]) > 0) { l = s + 1; } - else if (equali(name_bak, player_flags2[pfPLAYER]) && _getOrderOfType(player_flags[pfTYPE]) > _getOrderOfType(player_flags2[pfTYPE])) { + else if ( + _getOrderOfType(global_player[pfTYPE]) > _getOrderOfType(local_player[pfTYPE]) && + equali(global_player_name, local_player[pfPLAYER]) + ) { l = s + 1; } else { @@ -757,19 +767,19 @@ public addUsersToGlobalArray() } if (p < l) { - ArrayPushArray(users2, player_flags); + ArrayPushArray(global_users, global_player); } } + admins_flush(); - - for (new i = 0; i < ArraySize(users2); ++i) { + for (new i = 0; i < ArraySize(global_users); ++i) { new player_flags[e_PlayerFlags]; - ArrayGetArray(users2, i, player_flags); + ArrayGetArray(global_users, i, player_flags); admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } - for (new i = 0; i < ArraySize(users); ++i) { + for (new i = 0; i < ArraySize(local_users); ++i) { new player_flags[e_PlayerFlags]; - ArrayGetArray(users, i, player_flags); + ArrayGetArray(local_users, i, player_flags); admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } } From c690317b054012dc7d71e41e91a83fb955d753b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 31 Jan 2020 21:37:30 +0100 Subject: [PATCH 063/124] Fix names --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 27c8835..a9b67fe 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -716,7 +716,7 @@ public addUsersToGlobalArray() // 2. If entry exists only in the global storage, then we simply copy it to global_users. // Now we put local_users and global_users into the global admins storage. - new Array:users, Array:joined_users; + new Array:local_users, Array:global_users; local_users = ArrayCreate(e_PlayerFlags); global_users = ArrayCreate(e_PlayerFlags); From eb3df57097be7e20d3f68eaf47e9743a2992642b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 31 Jan 2020 22:33:51 +0100 Subject: [PATCH 064/124] Revert escape quotes --- .../scripting/include/shop_sms_const.inc | 2 +- .../addons/amxmodx/scripting/sklep_sms.sma | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 6c5ba9e..c973bb0 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.3" +#define VERSION "3.9.4" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index a9b67fe..8487116 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1491,16 +1491,16 @@ _showPlayerServices(id) return; } - new name[MAX_NAME + 1], sid[MAX_SID + 1], ip[MAX_IP + 1]; - new escaped_name[MAX_NAME * 2 + 1], escaped_sid[MAX_SID * 2 + 1], escaped_ip[MAX_IP * 2 + 1]; - get_user_name(id, name, charsmax(name)); - get_user_ip(id, ip, charsmax(ip), true); - get_user_authid(id, sid, charsmax(sid)); + new escaped_name[MAX_NAME * 2 + 1], escaped_ip[MAX_IP * 2 + 1], escaped_sid[MAX_SID * 2 + 1]; - SQL_QuoteString(SqlTuple, escaped_name, charsmax(escaped_name), name); - SQL_QuoteString(SqlTuple, escaped_ip, charsmax(escaped_ip), ip); - SQL_QuoteString(SqlTuple, escaped_sid, charsmax(escaped_sid), sid); + get_user_name(id, escaped_name, charsmax(escaped_name)); + get_user_ip(id, escaped_ip, charsmax(escaped_ip), true); + get_user_authid(id, escaped_sid, charsmax(escaped_sid)); + escape_quotes(escaped_name, charsmax(escaped_name)); + escape_quotes(escaped_ip, charsmax(escaped_ip)); + escape_quotes(escaped_sid, charsmax(escaped_sid)); + if (SqlTuple) { new data[1]; data[0] = id; formatex(g_szTemp, charsmax(g_szTemp), @@ -2158,6 +2158,11 @@ stock bool:is_steam(id) return false; } +stock escape_quotes(string[], string_len) +{ + replace_all(string, string_len, "'", "\'"); +} + stock get_sms_cost(const number[]) { if (strlen(number) < 4) { From dec7bc18c1be666b661cd6b21d0191980c1dffcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 5 Feb 2020 17:04:23 +0100 Subject: [PATCH 065/124] Version 3.9.0 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index c973bb0..e110322 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.4" +#define VERSION "3.9.0" #define PREFIX "SKLEP-SMS" From c8f8d36d0beef8d3ca0a3fc90109ae148d670395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 6 Feb 2020 10:51:24 +0100 Subject: [PATCH 066/124] Remove XML --- .../addons/amxmodx/scripting/sklep_sms.sma | 51 ++++++------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 8487116..f879fce 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -49,7 +49,7 @@ const MAX_FULL_IP = MAX_IP + MAX_PORT + 1; // ip + semicolon + port const MAX_URL_HOST = 128; const MAX_URL_PATH = 384; const MAX_URL = MAX_URL_HOST + MAX_URL_PATH; -const MAX_HEADERS = 128; +const MAX_HEADER = 128; const MAX_BODY = 384; const MAX_FUNCTION = 128; const TYPE_NICK = 1<<0; @@ -1314,7 +1314,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; new sign[34], sign_body[1 + charsmax(auth_data) + MAX_CODE + charsmax(g_randomKey) + 1]; - new header[MAX_HEADERS + 1]; + new header[MAX_HEADER + 1]; // Pobieramy dane o usludze ArrayGetArray(g_services, which_service[id], service); @@ -1355,6 +1355,8 @@ _purchaseService(id, const method[], const sms_code[] = "") { formatex(header, charsmax(header), "Authorization: %s", steam_id); headers = curl_slist_append(headers, header); + headers = curl_slist_append(headers, "Accept: aaplication/assoc"); + formatex(body, charsmax(body), "sign=%s&service_id=%s&type=%d&auth_data=%s&password=%s&method=%s&server_id=%d&payment_platform_id=%d&sms_code=%s&price_id=%d&ip=%s", @@ -1384,13 +1386,10 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl new szText[128], szPositive[3], szWarnings[256]; - getXMLValue(content, "text", szText, charsmax(szText)); - getXMLValue(content, "positive", szPositive, charsmax(szPositive)); - getXMLValue(content, "warnings", szWarnings, charsmax(szWarnings)); + getField(content, "text", szText, charsmax(szText)); + getField(content, "positive", szPositive, charsmax(szPositive)); + getField(content, "warnings", szWarnings, charsmax(szWarnings)); - trim(szText); - trim(szWarnings); - if (!strlen(szText)) { log_amx("Invalid response: %s", content); } @@ -1642,7 +1641,7 @@ _createShopSmsConfigFile() _validateLicense() { new curl_slist: headers; - new header[MAX_HEADERS + 1]; + new header[MAX_HEADER + 1]; new body[MAX_BODY + 1]; { @@ -1655,6 +1654,7 @@ _validateLicense() g_licenseToken ); headers = curl_slist_append(headers, header); + headers = curl_slist_append(headers, "Accept: aaplication/assoc"); formatex(body, charsmax(body), "url=%s:%s&name=%s&version=%s&signature=%d&platform_version=%s", @@ -1700,8 +1700,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl if (statusCode == 403) { new text[128 + 1]; - getXMLValue(content, "text", text, charsmax(text)); - trim(text); + getField(content, "text", text, charsmax(text)); _errorForbidden(text); return; } @@ -1712,8 +1711,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl } new text[32 + 1]; - getXMLValue(content, "text", text, charsmax(text)); - trim(text); + getField(content, "text", text, charsmax(text)); if (!equal(text, "ok")) { _log("Invalid license validation response | %s", content); @@ -1721,21 +1719,20 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl return; } - new szSignature[16], signature; - getXMLValue(content, "signature", szSignature, charsmax(szSignature)); - signature = str_to_num(szSignature); + new szSignature[16]; + getField(content, "signature", szSignature, charsmax(szSignature)); - if (signature != g_signature) { + if (str_to_num(szSignature) != g_signature) { _errorForbidden(); return; } new footer[2]; - getXMLValue(content, "footer", footer, charsmax(footer)); + getField(content, "footer", footer, charsmax(footer)); g_footer = str_to_num(footer) ? true : false; g_shopRegistered = true; - log_amx("Walidacja licencji zostala zakonczona pomyslnie"); + log_amx("Walidacja licencji zostala zakonczona pomyslnie."); } // @@ -2232,22 +2229,6 @@ stock matchRegex(const text[], const pattern[], output[], len, group = 0) return false; } -stock getXMLValue(const szText[], const tag[], output[], len) -{ - new temp[64], textStart, textEnd; - - formatex(temp, charsmax(temp), "<%s>", tag); - textStart = contain(szText, temp); - - formatex(temp, charsmax(temp), "", tag); - textEnd = contain(szText, temp); - - if (textStart >= 0) { - new tag_len = 2 + strlen(tag); - copy(output, min(len, textEnd - textStart - tag_len), szText[textStart + tag_len]); - } -} - // TODO Does not work nice with polish characters stock StringURLEncode(const szInput[], szOutput[], const iLen) { From d0de87dd00c478f044bb78b58e17b3dd89714c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 6 Feb 2020 12:41:41 +0100 Subject: [PATCH 067/124] Load users services via API --- .../addons/amxmodx/scripting/sklep_sms.sma | 183 ++++++++++-------- 1 file changed, 99 insertions(+), 84 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index f879fce..a910687 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -20,6 +20,7 @@ forward amxx_admin_access(id, flags, timestamp); // ID zadan #define TASK_KEEP_INFO_SMS 2000 #define TASK_ASSIGN_PLAYER_FLAGS 5000 +#define TASK_DISPLAY_LOADING 6000 #define TASK_KEEP_DISPLAYING_MENU 8000 // Klawisze ktore mozna uzyc w menu @@ -376,9 +377,12 @@ public loadSettingsHandler(FailState, Handle:Query, Error[], Errorcode) _loadServerConfig() { new url[MAX_URL + 1]; + new curl_slist: headers; + + headers = curl_slist_append(headers, "Accept: application/assoc"); formatex(url, charsmax(url), "%s/api/server/config?key=%s&ip=%s&port=%s&version=%s", g_shopPageUrl, g_randomKeyMD5, g_serverIp, g_serverPort, VERSION); - if (!makeRequest("GET", url, curl_slist:0, "", "onLoadServerConfigResponse")) { + if (!makeRequest("GET", url, headers, "", "onLoadServerConfigResponse")) { _errorConfigFailed(999); } } @@ -1355,8 +1359,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { formatex(header, charsmax(header), "Authorization: %s", steam_id); headers = curl_slist_append(headers, header); - headers = curl_slist_append(headers, "Accept: aaplication/assoc"); - + headers = curl_slist_append(headers, "Accept: application/assoc"); formatex(body, charsmax(body), "sign=%s&service_id=%s&type=%d&auth_data=%s&password=%s&method=%s&server_id=%d&payment_platform_id=%d&sms_code=%s&price_id=%d&ip=%s", @@ -1373,6 +1376,10 @@ _purchaseService(id, const method[], const sms_code[] = "") { public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, playerId) { + if (!is_user_connected(playerId)) { + return; + } + if (code != CURLE_OK) { _log("Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow. Error: %d", PREFIX, code); @@ -1380,33 +1387,26 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl } if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny http code.", PREFIX); + client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny HTTP code: %d", PREFIX, statusCode); return; } - new szText[128], szPositive[3], szWarnings[256]; - - getField(content, "text", szText, charsmax(szText)); - getField(content, "positive", szPositive, charsmax(szPositive)); - getField(content, "warnings", szWarnings, charsmax(szWarnings)); + new status[128], text[128]; + getField(content, "status", status, charsmax(status)); + getField(content, "text", text, charsmax(text)); - if (!strlen(szText)) { + if (strlen(text)) { + client_print_color(playerId, Red, "^4[%s] ^1%s", PREFIX, text); + } else { log_amx("Invalid response: %s", content); + client_print_color(playerId, Red, "^4[%s] ^1Wystapil blad. Brak odpowiedzi z serwera.", PREFIX); } - _handlePurchaseServiceResponse(playerId, szText, str_to_num(szPositive), szWarnings); -} + if (equal(status, "warnings")) { + new szWarnings[256]; + getField(content, "warnings", szWarnings, charsmax(szWarnings)); -_handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[]) -{ - if (! is_user_connected(id)) { - return; - } - - client_print_color(id, Red, "^4[%s] ^1%s", PREFIX, strlen(message) ? message : "Wystapil blad. Brak odpowiedzi z serwera."); - - if (strlen(szWarnings)) { - format(g_szTemp, charsmax(g_szTemp), + formatex(g_szTemp, charsmax(g_szTemp), "\ \ \ @@ -1416,14 +1416,15 @@ _handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[] ", szWarnings ); - show_motd(id, g_szTemp, "Bledy przy zakupie uslugi"); + show_motd(playerId, g_szTemp, "Bledy przy zakupie uslugi"); } - - // Wystapil jakis blad, wiec przerywamy - if (! positive) { - return; + else if (equal(status, "purchased")) { + _handleServicePurchase(playerId); } - +} + +_handleServicePurchase(id) +{ new ret, forward_handle, service[e_Service], price[e_Price]; ArrayGetArray(g_services, which_service[id], service); ArrayGetArray(g_prices, which_price[id], price); @@ -1450,7 +1451,8 @@ _handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[] formatex(g_szTemp, charsmax(g_szTemp), "


    \

    Wykupiles/as usluge: %s

    \ - Aby usluga dziala, dodaj wpis do pliku config.cfg: setinfo _ss ^"%s^"

    \ + Aby usluga dziala, dodaj wpis do pliku config.cfg:
    \ + setinfo _ss ^"%s^"

    \ W razie problemow skontaktuj sie z nami.\

    ", service[sNAME], b_passwords[id] @@ -1477,78 +1479,84 @@ _handlePurchaseServiceResponse(id, const message[], positive, const szWarnings[] } } -// -// ----------------------------------------------- OTHER ---------------------------------------------------- -// - -/** - * Wyswietlenie obecnych uslug gracza - */ _showPlayerServices(id) { if (!is_user_connected(id)) { return; } - - new escaped_name[MAX_NAME * 2 + 1], escaped_ip[MAX_IP * 2 + 1], escaped_sid[MAX_SID * 2 + 1]; - get_user_name(id, escaped_name, charsmax(escaped_name)); - get_user_ip(id, escaped_ip, charsmax(escaped_ip), true); - get_user_authid(id, escaped_sid, charsmax(escaped_sid)); + new name[MAX_NAME + 1], ip[MAX_IP + 1], steam_id[MAX_SID + 1]; + new escaped_name[MAX_NAME * 2 + 1], escaped_ip[MAX_IP * 2 + 1], escaped_steam_id[MAX_SID * 2 + 1]; - escape_quotes(escaped_name, charsmax(escaped_name)); - escape_quotes(escaped_ip, charsmax(escaped_ip)); - escape_quotes(escaped_sid, charsmax(escaped_sid)); + get_user_name(id, name, charsmax(name)); + get_user_ip(id, ip, charsmax(ip), true); + get_user_authid(id, steam_id, charsmax(steam_id)); - if (SqlTuple) { - new data[1]; data[0] = id; - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT s.name AS `service`, FROM_UNIXTIME(us.expire) AS `expire`, us.expire AS `expire_num` FROM `%suser_service` AS us \ - INNER JOIN `%suser_service_extra_flags` AS usef ON usef.us_id = us.id \ - INNER JOIN `%sservices` AS s ON us.service = s.id \ - WHERE usef.server = '%d' \ - AND ((usef.type = '%d' AND usef.auth_data = '%s') \ - OR (usef.type = '%d' AND usef.auth_data = '%s') \ - OR (usef.type = '%d' AND usef.auth_data = '%s'))", - TABLE_PREFIX, TABLE_PREFIX, TABLE_PREFIX, g_serverId, TYPE_NICK, escaped_name, TYPE_IP, escaped_ip, TYPE_SID, escaped_sid - ); - - SQL_ThreadQuery(SqlTuple, "showPlayerServicesHandler", g_szTemp, data, sizeof data); + StringURLEncode(name, escaped_name, charsmax(escaped_name)); + StringURLEncode(ip, escaped_ip, charsmax(escaped_ip)); + StringURLEncode(steam_id, escaped_steam_id, charsmax(escaped_steam_id)); + + new url[MAX_URL + 1]; + new curl_slist: headers; + + headers = curl_slist_append(headers, "Accept: application/assoc"); + formatex( + url, charsmax(url), + "%s/api/server/user_services?key=%s&server_id=%d&nick=%s&ip=%s&steam_id=%s", + g_shopPageUrl, g_randomKeyMD5, g_serverId, escaped_name, escaped_ip, escaped_steam_id + ); + + if (makeRequest("GET", url, headers, "", "onShowPlayerServicesResponse", id)) { + set_task(0.0, "task_displayLoading", TASK_DISPLAY_LOADING + id); + } else { + client_print_color(id, Red, "^4[%s] ^1Niestety, nie udalo sie uzyskac informacji o Twoich uslugach.", PREFIX); } } -public showPlayerServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) +public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, playerId) { - new id = data[0]; - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - client_print_color(id, Red, "^4[%s] ^1Niestety, nie udalo sie pozyskac informacji o Twoich uslugach.", PREFIX); + if (!is_user_connected(playerId)) { + return; + } + + if (code != CURLE_OK) { + client_print_color(playerId, Red, "^4[%s] ^1Niestety, nie udalo sie uzyskac informacji o Twoich uslugach. Error: %d", PREFIX, code); + return; + } + + if (statusCode >= 300) { + client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny HTTP code: %d.", PREFIX, statusCode); return; } + new key[256]; new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); - while (SQL_MoreResults(Query)) { - new service[MAX_SERVICE_ID + 1], expire[32 + 1], item_text[128]; - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "service"), service, charsmax(service)); - - if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire_num")) == -1) { - copy(expire, charsmax(expire), "Nigdy"); - } else { - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "expire"), expire, charsmax(expire)); - } + formatex(key, charsmax(key), "c"); + if (!getField(content, key, g_szTemp, charsmax(g_szTemp))) { + log_amx("Invalid user services response. | %s", content); + } + new count = str_to_num(g_szTemp); + + for (new i = 0; i < count; ++i) { + new service_name[MAX_SERVICE_ID + 1], expire[32 + 1], item_text[128]; - formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service, expire); + formatex(key, charsmax(key), "%d.s", i); + getField(content, key, service_name, charsmax(service_name)); + + formatex(key, charsmax(key), "%d.e", i); + getField(content, key, expire, charsmax(expire)); + + formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service_name, expire); menu_additem(menu, item_text); - - SQL_NextRow(Query); } if (menu_items(menu)) { menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - menu_display(id, menu); + menu_display(playerId, menu); } else { - client_print_color(id, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); + client_print_color(playerId, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); } } @@ -1557,6 +1565,10 @@ public showPlayerServices_handler(id, menu, item) menu_destroy(menu); } +// +// ----------------------------------------------- OTHER ---------------------------------------------------- +// + _logActor(id, const format[], any:...) { vformat(g_szTemp, charsmax(g_szTemp), format, 3); @@ -1654,7 +1666,7 @@ _validateLicense() g_licenseToken ); headers = curl_slist_append(headers, header); - headers = curl_slist_append(headers, "Accept: aaplication/assoc"); + headers = curl_slist_append(headers, "Accept: application/assoc"); formatex(body, charsmax(body), "url=%s:%s&name=%s&version=%s&signature=%d&platform_version=%s", @@ -1730,7 +1742,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl new footer[2]; getField(content, "footer", footer, charsmax(footer)); g_footer = str_to_num(footer) ? true : false; - + g_shopRegistered = true; log_amx("Walidacja licencji zostala zakonczona pomyslnie."); } @@ -1960,6 +1972,15 @@ _make_error(message[]) { // ------------------------------------------------- HTTP Requests ---------------------------------------------------- // +public task_displayLoading(task_id) +{ + new id = task_id - TASK_DISPLAY_LOADING; + + if (is_user_connected(id)) { + client_print_color(id, Red, "^4[%s] ^1Ladowanie...", PREFIX); + } +} + /** * Make HTTP request * @@ -2155,11 +2176,6 @@ stock bool:is_steam(id) return false; } -stock escape_quotes(string[], string_len) -{ - replace_all(string, string_len, "'", "\'"); -} - stock get_sms_cost(const number[]) { if (strlen(number) < 4) { @@ -2229,7 +2245,6 @@ stock matchRegex(const text[], const pattern[], output[], len, group = 0) return false; } -// TODO Does not work nice with polish characters stock StringURLEncode(const szInput[], szOutput[], const iLen) { static const HEXCHARS[ 16 ] = { From 34dd80225d3225a43341bc886a3724571acec16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 11 Feb 2020 19:17:13 +0100 Subject: [PATCH 068/124] Multiple commands (#15) --- .../addons/amxmodx/scripting/sklep_sms.sma | 87 +++++++++++++++---- server/run.sh | 2 +- 2 files changed, 72 insertions(+), 17 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index a910687..a7831c2 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -64,7 +64,10 @@ new forwrdClientAccess; // CVARs new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; -new sklep_komenda[MAX_COMMAND + 1], przeladuj_komenda[MAX_COMMAND + 1], uslugi_komenda[MAX_COMMAND + 1], show_info; +new show_info; +new Array:g_shopCommands, + Array:g_serviceListCommands, + Array:g_reloadCommands; // MySQL new const TABLE_PREFIX[] = "ss_"; @@ -175,7 +178,7 @@ public plugin_precache() _createShopSmsConfigFile(); cvar_on = register_cvar("sklepsms_on", "1"); - cvar_sklep = register_cvar("sklepsms_sklep_komenda", "/sklepsms"); + cvar_sklep = register_cvar("sklepsms_sklep_komenda", "/sklepsms,/shopsms"); cvar_przeladuj = register_cvar("sklepsms_przeladuj_komenda", "/przeladuj"); cvar_uslugi = register_cvar("sklepsms_uslugi_komenda", "/uslugi"); cvar_show_info = register_cvar("sklepsms_info", "1"); @@ -198,6 +201,9 @@ public plugin_precache() g_smses = ArrayCreate(e_SMS); g_services = ArrayCreate(e_Service); g_prices = ArrayCreate(e_Price); + g_shopCommands = ArrayCreate(MAX_COMMAND + 1); + g_serviceListCommands = ArrayCreate(MAX_COMMAND + 1); + g_reloadCommands = ArrayCreate(MAX_COMMAND + 1); } public plugin_init() @@ -269,9 +275,15 @@ public plugin_end() _loadCvars() { - get_pcvar_string(cvar_sklep, sklep_komenda, charsmax(sklep_komenda)); - get_pcvar_string(cvar_przeladuj, przeladuj_komenda, charsmax(przeladuj_komenda)); - get_pcvar_string(cvar_uslugi, uslugi_komenda, charsmax(uslugi_komenda)); + get_pcvar_string(cvar_sklep, g_szTemp, charsmax(g_szTemp)); + explode(g_szTemp, ',', g_shopCommands, MAX_COMMAND); + + get_pcvar_string(cvar_przeladuj, g_szTemp, charsmax(g_szTemp)); + explode(g_szTemp, ',', g_reloadCommands, MAX_COMMAND); + + get_pcvar_string(cvar_uslugi, g_szTemp, charsmax(g_szTemp)); + explode(g_szTemp, ',', g_serviceListCommands, MAX_COMMAND); + show_info = get_pcvar_num(cvar_show_info); get_pcvar_string(cvar_host, sql_host, charsmax(sql_host)); @@ -308,16 +320,16 @@ public amxx_admin_access(id, flags, timestamp) public sayHook(id) { - new tekst[32]; - read_argv(1, tekst, charsmax(tekst)); + new text[MAX_COMMAND + 1]; + read_argv(1, text, charsmax(text)); - if (equali(tekst, sklep_komenda)) { + if (_matchCommand(text, g_shopCommands)) { _openShopMenu(id); } - else if (equali(tekst, przeladuj_komenda)) { + else if (_matchCommand(text, g_reloadCommands)) { command_reassignPlayersFlags(id); } - else if (equali(tekst, uslugi_komenda)) { + else if (_matchCommand(text, g_serviceListCommands)) { _showPlayerServices(id); } @@ -1556,7 +1568,9 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, menu_display(playerId, menu); } else { - client_print_color(playerId, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, sklep_komenda); + new command[MAX_COMMAND + 1]; + _getFirstCommand(g_shopCommands, command, charsmax(command)); + client_print_color(playerId, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, command); } } @@ -1593,7 +1607,9 @@ _log(const format[], any:...) public displayCommercial() { if (get_playersnum() > 1) { - client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, sklep_komenda); + new command[MAX_COMMAND + 1]; + _getFirstCommand(g_shopCommands, command, charsmax(command)); + client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, command); } } @@ -1612,13 +1628,13 @@ _createShopSmsConfigFile() iLen += formatex(szText[iLen], iMax-iLen, "// 0 - wylaczony^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_on ^"1^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu wyswietlenia menu sklepiku^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_sklep_komenda ^"/sklepsms^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu wyswietlenia menu sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_sklep_komenda ^"/sklepsms,/shopsms^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie w celu przeladowania flag wykupionych w sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu przeladowania flag wykupionych w sklepiku^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_przeladuj_komenda ^"/przeladuj^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Komenda, ktora nalezy wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_uslugi_komenda ^"/uslugi^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Czy po uzyciu powyzszych komend wyswietla sie one w chacie^n"); @@ -2165,6 +2181,29 @@ vc_md5(const szString[], md5buffer[34]) // --------------------------------------------------------- Stocks ------------------------------------------------------------ +stock bool:_matchCommand(const text[], Array:commands) +{ + for (new i = 0; i < ArraySize(commands); ++i) { + new command[MAX_COMMAND + 1]; + ArrayGetString(commands, i, command, charsmax(command)); + + if (equali(text, command)) { + return true; + } + } + + return false; +} + +stock _getFirstCommand(Array:commands, output[], maxlen) +{ + if (ArraySize(commands) == 0) { + formatex(output, maxlen, ""); + } else { + ArrayGetString(commands, 0, output, maxlen); + } +} + stock bool:is_steam(id) { new auth[32]; @@ -2287,3 +2326,19 @@ stock StringURLEncode(const szInput[], szOutput[], const iLen) return iFLen; } + +/** + * https://amxx.pl/topic/43223-explode/ + */ +stock explode(const string[], const character, Array:output, maxlen) +{ + new len = strlen(string); + new oLen = 0; + + while (oLen < len) + { + new text[128 + 1]; + oLen += (1 + copyc(text, maxlen, string[oLen], character)); + ArrayPushString(output, text); + } +} diff --git a/server/run.sh b/server/run.sh index 02a70ff..024778f 100755 --- a/server/run.sh +++ b/server/run.sh @@ -33,4 +33,4 @@ CSTRIKE_URL="${CSTRKE_VERSIONS[${BUILD_VERSION}]}" # RUN IMAGE_NAME="cs16" docker build -t ${IMAGE_NAME} --build-arg BASE_URL="${BASE_URL}" --build-arg CSTRIKE_URL="${CSTRIKE_URL}" -f "$DIR/server/Dockerfile" . \ -&& docker run --rm -it -p 27015:27015 --network sklepsms_default --name sklepsms_cs16 ${IMAGE_NAME} +&& docker run --rm -it -p 27015:27015 --network sklep-sms_default --name sklepsms_cs16 ${IMAGE_NAME} From c56b03c4f24c1f586a1fd1f08abcec67dd2202c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 17 Feb 2020 19:24:04 +0100 Subject: [PATCH 069/124] Version 3.9.1-rc.1 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index e110322..c9c46a6 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.0" +#define VERSION "3.9.1-rc.1" #define PREFIX "SKLEP-SMS" From e8427e4755584c9e3655396da191be37b3f7ace3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 24 Feb 2020 18:39:46 +0200 Subject: [PATCH 070/124] Token (#16) --- .../addons/amxmodx/scripting/sklep_sms.sma | 453 ++++++------------ 1 file changed, 152 insertions(+), 301 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index a7831c2..21457c0 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -19,7 +18,6 @@ forward amxx_admin_access(id, flags, timestamp); // ID zadan #define TASK_KEEP_INFO_SMS 2000 -#define TASK_ASSIGN_PLAYER_FLAGS 5000 #define TASK_DISPLAY_LOADING 6000 #define TASK_KEEP_DISPLAYING_MENU 8000 @@ -32,7 +30,6 @@ new const LOG_FILE[] = "sklep_sms.log"; const MAX_COMMAND = 32; const MAX_CONTACT = 64; -const MAX_RANDOM_KEY = 32; const MAX_FLAGS = 26; const MAX_SERVER_NAME = 128; const MAX_SERVICE_TAG = 16; @@ -42,10 +39,12 @@ const MAX_PASSWORD = 32; const MAX_DESCRIPTION = 28; const MAX_CODE = 16; const MAX_NUMBER = 16; +const MAX_AUTH_DATA = 32; const MAX_NAME = 32; const MAX_SID = 18; const MAX_IP = 15; const MAX_PORT = 8; +const MAX_TOKEN = 32; const MAX_FULL_IP = MAX_IP + MAX_PORT + 1; // ip + semicolon + port const MAX_URL_HOST = 128; const MAX_URL_PATH = 384; @@ -57,24 +56,16 @@ const TYPE_NICK = 1<<0; const TYPE_IP = 1<<1; const TYPE_SID = 1<<2; -new bool:g_AmxbansExists = false; - // FORWARDs new forwrdClientAccess; // CVARs -new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_host, cvar_user, cvar_pass, cvar_db, cvar_server_ip, cvar_silent_command; +new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_shop_url, cvar_token, cvar_server_ip, cvar_silent_command; new show_info; new Array:g_shopCommands, Array:g_serviceListCommands, Array:g_reloadCommands; -// MySQL -new const TABLE_PREFIX[] = "ss_"; -new Handle:SqlTuple; -new bool:g_sqlConnected = false; -new sql_host[MAX_URL_HOST + 1], sql_user[32], sql_pass[32], sql_db[32]; -new const all_flags[MAX_FLAGS + 1] = "abcdefghijklmnopqrstuyvwxz"; new g_szTemp[4096]; // Server @@ -85,13 +76,10 @@ new g_serverIp[MAX_IP + 1], g_configPath[128]; // Server config -new g_serverId, - g_currency[16], - g_smsPlatformId, +new g_currency[16], g_contact[MAX_CONTACT + 1], - g_randomKey[MAX_RANDOM_KEY + 1], - g_randomKeyMD5[34], - g_shopPageUrl[MAX_URL + 1], + g_shopUrl[MAX_URL + 1], + g_serverToken[MAX_TOKEN + 1], g_smsText[MAX_SMS_TEXT + 1], Float:g_vat, g_accountsSteamIds[4096] = "", @@ -132,7 +120,7 @@ enum e_Price { new Array:g_prices; enum e_PlayerFlags { - pfPLAYER[33], + pfPLAYER[MAX_AUTH_DATA+1], pfFLAGS, pfPASSWORD[MAX_PASSWORD+2], pfTYPE @@ -148,7 +136,7 @@ new which_service[33], b_types[33]; // Requests -const MAX_RESPONSE = 4096; +const MAX_RESPONSE = 8192; const MAX_REQUESTS_COUNT = 5; new g_requestCounter = 0, g_responses[MAX_REQUESTS_COUNT][MAX_RESPONSE + 1], @@ -182,10 +170,8 @@ public plugin_precache() cvar_przeladuj = register_cvar("sklepsms_przeladuj_komenda", "/przeladuj"); cvar_uslugi = register_cvar("sklepsms_uslugi_komenda", "/uslugi"); cvar_show_info = register_cvar("sklepsms_info", "1"); - cvar_host = register_cvar("sklepsms_host", "localhost"); - cvar_user = register_cvar("sklepsms_user", "root"); - cvar_pass = register_cvar("sklepsms_pass", ""); - cvar_db = register_cvar("sklepsms_db", ""); + cvar_shop_url = register_cvar("sklepsms_url", ""); + cvar_token = register_cvar("sklepsms_token", ""); cvar_server_ip = register_cvar("sklepsms_server_ip", ""); cvar_silent_command = register_cvar("sklepsms_ciche_komendy", "0"); @@ -214,7 +200,7 @@ public plugin_init() register_concmd("Podaj_Kod_Zwrotny", "onSmsCodeEntered"); register_concmd("ssnick_Podaj_Haslo", "onNickPasswordEntered"); register_concmd("ssip_Podaj_Haslo", "onIpPasswordEntered"); - register_concmd("sklepsms_reloaddata", "command_loadPlayersServices"); + register_concmd("sklepsms_reloaddata", "command_loadPlayersFlags"); register_concmd("sklepsms_reloadusers", "command_reassignPlayersFlags"); register_clcmd("say", "sayHook"); @@ -228,7 +214,8 @@ public plugin_init() forwrdClientAccess = CreateMultiForward("ss_client_access", ET_IGNORE, FP_CELL, FP_CELL); } -public plugin_cfg() { +public plugin_cfg() +{ // Blad przy tworzeniu (brak uprawnien) if (!file_exists(g_configPath)) { _invalidPath(0, g_configPath); @@ -242,15 +229,6 @@ public plugin_cfg() { _loadCvars(); - SqlTuple = SQL_MakeDbTuple(sql_host, sql_user, sql_pass, sql_db); - if (! SqlTuple) { - _error51(); - } - - #if defined SQL_SetCharset - SQL_SetCharset(SqlTuple, "utf8mb4"); - #endif - // Get server ip new fullIp[MAX_FULL_IP]; get_pcvar_string(cvar_server_ip, fullIp, charsmax(fullIp)); @@ -262,19 +240,24 @@ public plugin_cfg() { split(fullIp, g_serverIp, charsmax(g_serverIp), g_serverPort, charsmax(g_serverPort), ":"); - _loadPlayersServices(false); - _loadSettings(); -} - -public plugin_end() -{ - if (SqlTuple) { - SqlTuple = Empty_Handle; - } + _loadServerConfig(); } _loadCvars() { + get_pcvar_string(cvar_shop_url, g_shopUrl, charsmax(g_shopUrl)); + get_pcvar_string(cvar_token, g_serverToken, charsmax(g_serverToken)); + + // Remove trailing slash + if (strlen(g_shopUrl) && g_shopUrl[strlen(g_shopUrl) - 1] == '/') { + g_shopUrl[strlen(g_shopUrl) - 1] = '^0'; + } + + if (!strlen(g_shopUrl) || !strlen(g_serverToken)) { + _errorNoShopCreds(); + return; + } + get_pcvar_string(cvar_sklep, g_szTemp, charsmax(g_szTemp)); explode(g_szTemp, ',', g_shopCommands, MAX_COMMAND); @@ -285,15 +268,14 @@ _loadCvars() explode(g_szTemp, ',', g_serviceListCommands, MAX_COMMAND); show_info = get_pcvar_num(cvar_show_info); - - get_pcvar_string(cvar_host, sql_host, charsmax(sql_host)); - get_pcvar_string(cvar_user, sql_user, charsmax(sql_user)); - get_pcvar_string(cvar_pass, sql_pass, charsmax(sql_pass)); - get_pcvar_string(cvar_db, sql_db, charsmax(sql_db)); } public client_authorized(id) -{ +{ + if (!g_playersLoaded) { + log_amx("Player [%d] joined before server config was loaded. It may result in a lack of proper permissions."); + } + _assignPlayerFlags(id); } @@ -304,7 +286,6 @@ public client_putinserver(id) public amxbans_sql_initialized() { - g_AmxbansExists = true; _reassignPlayersFlags(); } @@ -340,59 +321,13 @@ public sayHook(id) // ----------------------------------------- SERVER CONFIGURATION -------------------------------------------- // -_loadSettings() -{ - formatex(g_szTemp, charsmax(g_szTemp), - "SELECT * FROM `%ssettings` \ - WHERE `key` IN ('shop_url', 'random_key')", - TABLE_PREFIX - ); - SQL_ThreadQuery(SqlTuple, "loadSettingsHandler", g_szTemp); -} - -public loadSettingsHandler(FailState, Handle:Query, Error[], Errorcode) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } - - while (SQL_MoreResults(Query)) { - new key[128], value[256]; - - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "key"), key, charsmax(key)); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "value"), value, charsmax(value)); - - if (equali(key, "shop_url")) { - copy(g_shopPageUrl, charsmax(g_shopPageUrl), value); - - // Remove trailing slash - if (strlen(g_shopPageUrl) && g_shopPageUrl[strlen(g_shopPageUrl) - 1] == '/') { - g_shopPageUrl[strlen(g_shopPageUrl) - 1] = '^0'; - } - - if (! strlen(g_shopPageUrl)) { - _errorNoShopUrl(); - return; - } - } - else if (equali(key, "random_key")) { - copy(g_randomKey, charsmax(g_randomKey), value); - vc_md5(g_randomKey, g_randomKeyMD5); // Hashujemy random key - } - - SQL_NextRow(Query); - } - - _loadServerConfig(); -} - _loadServerConfig() { new url[MAX_URL + 1]; new curl_slist: headers; headers = curl_slist_append(headers, "Accept: application/assoc"); - formatex(url, charsmax(url), "%s/api/server/config?key=%s&ip=%s&port=%s&version=%s", g_shopPageUrl, g_randomKeyMD5, g_serverIp, g_serverPort, VERSION); + formatex(url, charsmax(url), "%s/api/server/config?token=%s&version=%s&player_flags=1&language=polish", g_shopUrl, g_serverToken, VERSION); if (!makeRequest("GET", url, headers, "", "onLoadServerConfigResponse")) { _errorConfigFailed(999); @@ -406,7 +341,7 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p return; } - if (statusCode == 404) { + if (statusCode == 404 || statusCode == 400) { _errorNoServer(); return; } @@ -430,10 +365,6 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p _validateLicense(); - getField(content, "id", g_szTemp, charsmax(g_szTemp)); - g_serverId = str_to_num(g_szTemp); - getField(content, "sms_platform_id", g_szTemp, charsmax(g_szTemp)); - g_smsPlatformId = str_to_num(g_szTemp); getField(content, "sms_text", g_smsText, charsmax(g_smsText)); getField(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); getField(content, "currency", g_currency, charsmax(g_currency)); @@ -444,13 +375,17 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p _extractSmsNumbers(content); _extractPrices(content); _extractServices(content); + _extractPlayersFlags(content); _stopPlugins(); + + _checkLoadedPlayersFlags(); _checkLoadedServices(); } _extractSmsNumbers(const content[]) { + ArrayClear(g_smses); new key[256]; formatex(key, charsmax(key), "sn.c"); @@ -471,6 +406,7 @@ _extractSmsNumbers(const content[]) _extractPrices(const content[]) { + ArrayClear(g_prices); new key[256]; formatex(key, charsmax(key), "pr.c"); @@ -501,6 +437,7 @@ _extractPrices(const content[]) _extractServices(const content[]) { + ArrayClear(g_services); new key[256]; formatex(key, charsmax(key), "se.c"); @@ -546,6 +483,50 @@ _extractServices(const content[]) } } +_extractPlayersFlags(const content[]) +{ + ArrayClear(g_playersFlags); + new key[256]; + + formatex(key, charsmax(key), "pf.c"); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + new count = str_to_num(g_szTemp); + + for (new i = 0; i < count; ++i) { + new player_flags[e_PlayerFlags]; + + formatex(key, charsmax(key), "pf.%d.t", i); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + new type = str_to_num(g_szTemp); + + formatex(key, charsmax(key), "pf.%d.a", i); + getField(content, key, player_flags[pfPLAYER], MAX_AUTH_DATA); + + formatex(key, charsmax(key), "pf.%d.p", i); + getField(content, key, player_flags[pfPASSWORD], MAX_PASSWORD); + + formatex(key, charsmax(key), "pf.%d.f", i); + getField(content, key, g_szTemp, charsmax(g_szTemp)); + + for (new i = 0; i < strlen(g_szTemp); ++i) { + player_flags[pfFLAGS] |= read_flags(g_szTemp[i]); + } + + switch (type) { + case TYPE_SID: player_flags[pfTYPE] = FLAG_AUTHID|FLAG_NOPASS; + case TYPE_IP: player_flags[pfTYPE] = FLAG_IP; + default: player_flags[pfTYPE] = FLAG_NICK|FLAG_KICK; + } + + if (player_flags[pfFLAGS] != 0) { + ArrayPushArray(g_playersFlags, player_flags); + } + } + + g_playersLoaded = true; + _reassignPlayersFlags(); +} + _stopPlugins() { new service_id[MAX_SERVICE_ID + 1]; @@ -567,16 +548,43 @@ _stopPlugins() } } +_loadPlayersFlags() +{ + new url[MAX_URL + 1]; + new curl_slist: headers; + + headers = curl_slist_append(headers, "Accept: application/assoc"); + formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=polish", g_shopUrl, g_serverToken, VERSION); + + makeRequest("GET", url, headers, "", "onLoadPlayersFlagsResponse"); +} + +public onLoadPlayersFlagsResponse(const content[], CURLcode: code, statusCode, playerId) +{ + if (code != CURLE_OK) { + return; + } + + if (statusCode == 400) { + _errorNoServer(); + return; + } + + if (statusCode >= 300) { + _log("Invalid players flags response HTTP code | %d", statusCode); + return; + } + + _extractPlayersFlags(content); +} + // // --------------------------------------------- PLAYERS FLAGS ------------------------------------------------ // -/** - * Funkcja wczytujaca z bazy ponownie dane graczy - */ -public command_loadPlayersServices() +public command_loadPlayersFlags() { - _loadPlayersServices(true); + _loadPlayersFlags(); } public command_reassignPlayersFlags(id) @@ -594,133 +602,26 @@ public command_reassignPlayersFlags(id) } } -_loadPlayersServices(bool:reloadAmxbans) { - // Czyscimy dotychczasowe dane - ArrayClear(g_playersFlags); - g_playersLoaded = false; - - if (SqlTuple) { - new iLen = 0, iMax = charsmax(g_szTemp); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "SELECT f.type, f.auth_data, f.password, \ - (f.a > UNIX_TIMESTAMP() OR f.a = '-1') AS `a`, \ - (f.b > UNIX_TIMESTAMP() OR f.b = '-1') AS `b`, \ - (f.c > UNIX_TIMESTAMP() OR f.c = '-1') AS `c`, \ - (f.d > UNIX_TIMESTAMP() OR f.d = '-1') AS `d`, \ - (f.e > UNIX_TIMESTAMP() OR f.e = '-1') AS `e`, \ - (f.f > UNIX_TIMESTAMP() OR f.f = '-1') AS `f`, \ - (f.g > UNIX_TIMESTAMP() OR f.g = '-1') AS `g`, \ - (f.h > UNIX_TIMESTAMP() OR f.h = '-1') AS `h`, " - ); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "(f.i > UNIX_TIMESTAMP() OR f.i = '-1') AS `i`, \ - (f.j > UNIX_TIMESTAMP() OR f.j = '-1') AS `j`, \ - (f.k > UNIX_TIMESTAMP() OR f.k = '-1') AS `k`, \ - (f.l > UNIX_TIMESTAMP() OR f.l = '-1') AS `l`, \ - (f.m > UNIX_TIMESTAMP() OR f.m = '-1') AS `m`, \ - (f.n > UNIX_TIMESTAMP() OR f.n = '-1') AS `n`, \ - (f.o > UNIX_TIMESTAMP() OR f.o = '-1') AS `o`, \ - (f.p > UNIX_TIMESTAMP() OR f.p = '-1') AS `p`, " - ); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "(f.q > UNIX_TIMESTAMP() OR f.q = '-1') AS `q`, \ - (f.r > UNIX_TIMESTAMP() OR f.r = '-1') AS `r`, \ - (f.s > UNIX_TIMESTAMP() OR f.s = '-1') AS `s`, \ - (f.t > UNIX_TIMESTAMP() OR f.t = '-1') AS `t`, \ - (f.u > UNIX_TIMESTAMP() OR f.u = '-1') AS `u`, \ - (f.y > UNIX_TIMESTAMP() OR f.y = '-1') AS `y`, \ - (f.v > UNIX_TIMESTAMP() OR f.v = '-1') AS `v`, \ - (f.w > UNIX_TIMESTAMP() OR f.w = '-1') AS `w`, \ - (f.x > UNIX_TIMESTAMP() OR f.x = '-1') AS `x`, \ - (f.z > UNIX_TIMESTAMP() OR f.z = '-1') AS `z` " - ); - - iLen += formatex(g_szTemp[iLen], iMax - iLen, - "FROM `%splayers_flags` AS f \ - JOIN `%sservers` AS s ON s.id = f.server \ - WHERE s.ip = '%s' \ - AND s.port = '%s' \ - ORDER BY f.auth_data, f.type DESC", - TABLE_PREFIX, TABLE_PREFIX, g_serverIp, g_serverPort - ); - - new data[1]; data[0] = reloadAmxbans; // Przeladuj liste adminow w amxbans - SQL_ThreadQuery(SqlTuple, "loadPlayersServicesHandler", g_szTemp, data, sizeof data); - } -} - -public loadPlayersServicesHandler(FailState, Handle:Query, Error[], Errorcode, data[], data_size) -{ - if (_checkForSQLErrors(Query, FailState, Error, Errorcode) == PLUGIN_HANDLED) { - return; - } - - while (SQL_MoreResults(Query)) - { - new player_flags[e_PlayerFlags], type; - type = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "type")); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "auth_data"), player_flags[pfPLAYER], 32); - SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), player_flags[pfPASSWORD], MAX_PASSWORD); - - for (new i = 0; i < strlen(all_flags); ++i) { - new temp[4]; - formatex(temp, charsmax(temp), "%c", all_flags[i]); - if (SQL_ReadResult(Query, SQL_FieldNameToNum(Query, temp))) { - player_flags[pfFLAGS] |= read_flags(temp); - } - } - - switch (type) { - case TYPE_SID: player_flags[pfTYPE] = FLAG_AUTHID|FLAG_NOPASS; - case TYPE_IP: player_flags[pfTYPE] = FLAG_IP; - default: player_flags[pfTYPE] = FLAG_NICK|FLAG_KICK; - } - - // Dodanie do tablicy - if (player_flags[pfFLAGS] != 0) { - ArrayPushArray(g_playersFlags, player_flags); - } - - SQL_NextRow(Query); - } - - log_amx("Zaladowano %d uslug graczy.", ArraySize(g_playersFlags)); - g_playersLoaded = true; - - if (data[0] && g_AmxbansExists) { // Przeladuj dane w amxbans, a tym samym uruchom komende dodawania danych do tablicy globalnej uprawnien - server_cmd("amx_reloadadmins"); - } - else { - _reassignPlayersFlags(); - } -} - /** * Reload players flags and assign them again */ _reassignPlayersFlags() { - addUsersToGlobalArray(); + _addUsersToGlobalArray(); for (new i = 1; i <= get_maxplayers(); ++i) { - if (! is_user_connected(i)) { - continue; + if (is_user_connected(i)) { + _assignPlayerFlags(i); } - - _assignPlayerFlags(i); } } /** * Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy */ -public addUsersToGlobalArray() +_addUsersToGlobalArray() { - if (!g_playersLoaded) { // Dane uzytkownikow nie zostaly jeszcze zaladowane - set_task(0.1, "addUsersToGlobalArray"); + if (!g_playersLoaded) { return; } @@ -800,18 +701,9 @@ public addUsersToGlobalArray() } } -public task_assignPlayerFlags(id) -{ - _assignPlayerFlags(id-TASK_ASSIGN_PLAYER_FLAGS); -} - _assignPlayerFlags(id) { if (! g_playersLoaded) { - if (! task_exists(TASK_ASSIGN_PLAYER_FLAGS+id)) { - set_task(0.1, "task_assignPlayerFlags", TASK_ASSIGN_PLAYER_FLAGS+id); - } - return; } @@ -901,11 +793,6 @@ _openShopMenu(id) client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepu z powodu bledow ze sklepem. Zobacz logi.", PREFIX); } - if (!g_sqlConnected) { - client_print_color(id, Red, "^4[%s] ^1Nie polaczono z baza danych.", PREFIX); - return; - } - if (!ArraySize(g_services)) { client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); return; @@ -1329,7 +1216,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; - new sign[34], sign_body[1 + charsmax(auth_data) + MAX_CODE + charsmax(g_randomKey) + 1]; + new sign[34], sign_body[1 + charsmax(auth_data) + MAX_CODE + charsmax(g_serverToken) + 1]; new header[MAX_HEADER + 1]; // Pobieramy dane o usludze @@ -1342,20 +1229,15 @@ _purchaseService(id, const method[], const sms_code[] = "") { case TYPE_NICK: get_user_name(id, auth_data, charsmax(auth_data)); } - // Jezeli usluga nie jest wykupowana na nickpass, ippass, sid, to pobieramy nick + // Get username for services without type - e.g. using OTHER service module if (!strlen(auth_data)) { get_user_name(id, auth_data, charsmax(auth_data)); } - - // Get user's IP + get_user_ip(id, ip, charsmax(ip), true); - - // Get user's SteamID get_user_authid(id, steam_id, charsmax(steam_id)); - ArrayGetArray(g_prices, which_price[id], price); - - // Encode url params + StringURLEncode(service[sID], u_service_id, charsmax(u_service_id)); StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); @@ -1365,7 +1247,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { // Calculate body sign formatex(sign_body, charsmax(sign_body), "%d#%s#%s#%s", - b_types[id], auth_data, sms_code, g_randomKey + b_types[id], auth_data, sms_code, g_serverToken ); vc_md5(sign_body, sign); @@ -1374,11 +1256,11 @@ _purchaseService(id, const method[], const sms_code[] = "") { headers = curl_slist_append(headers, "Accept: application/assoc"); formatex(body, charsmax(body), - "sign=%s&service_id=%s&type=%d&auth_data=%s&password=%s&method=%s&server_id=%d&payment_platform_id=%d&sms_code=%s&price_id=%d&ip=%s", - sign, u_service_id, b_types[id], u_auth_data, u_password, method, g_serverId, g_smsPlatformId, u_sms_code, price[pID], ip + "sign=%s&service_id=%s&type=%d&auth_data=%s&password=%s&method=%s&sms_code=%s&price_id=%d&ip=%s", + sign, u_service_id, b_types[id], u_auth_data, u_password, method, u_sms_code, price[pID], ip ); - formatex(url, charsmax(url), "%s/api/server/purchase?key=%s&language=polish", g_shopPageUrl, g_randomKeyMD5); + formatex(url, charsmax(url), "%s/api/server/purchase?token=%s&language=polish", g_shopUrl, g_serverToken); } if (!makeRequest("POST", url, headers, body, "onPurchaseServiceResponse", id)) { @@ -1415,7 +1297,7 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl } if (equal(status, "warnings")) { - new szWarnings[256]; + new szWarnings[512]; getField(content, "warnings", szWarnings, charsmax(szWarnings)); formatex(g_szTemp, charsmax(g_szTemp), @@ -1482,12 +1364,12 @@ _handleServicePurchase(id) show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); } - client_print_color(id, Blue, "^4[%s] ^1Prawidlowo kupiono ^4%s^1: %s", PREFIX, service[sNAME], quantity); + client_print_color(id, Blue, "^4[%s] ^1Prawidlowo zakupiono ^4%s^1: %s", PREFIX, service[sNAME], quantity); // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy if (service[FLAGS]) { // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo - set_task(2.0, "command_loadPlayersServices"); + set_task(2.0, "command_loadPlayersFlags"); } } @@ -1514,8 +1396,8 @@ _showPlayerServices(id) headers = curl_slist_append(headers, "Accept: application/assoc"); formatex( url, charsmax(url), - "%s/api/server/user_services?key=%s&server_id=%d&nick=%s&ip=%s&steam_id=%s", - g_shopPageUrl, g_randomKeyMD5, g_serverId, escaped_name, escaped_ip, escaped_steam_id + "%s/api/server/user_services?token=%s&nick=%s&ip=%s&steam_id=%s&language=polish", + g_shopUrl, g_serverToken, escaped_name, escaped_ip, escaped_steam_id ); if (makeRequest("GET", url, headers, "", "onShowPlayerServicesResponse", id)) { @@ -1645,19 +1527,13 @@ _createShopSmsConfigFile() iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// ### Dane Bazy MySQL ###^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// ### Dane Sklepu ###^n"); iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Adres IP^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_host ^"^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Uzytkownik^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_user ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Adres URL sklepu^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_url ^"^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Haslo^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_pass ^"^"^n"); - iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Nazwa bazy danych"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_db ^"^""); + iLen += formatex(szText[iLen], iMax-iLen, "// Token serwera^n"); + iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_token ^"^"^n"); write_file(g_configPath, szText); } } @@ -1767,35 +1643,6 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl // ------------------------------------------------- HELPERS ---------------------------------------------------- // -_checkForSQLErrors(Handle:Query, FailState, Error[], Errorcode) -{ - g_sqlConnected = true; - - if (FailState != TQUERY_SUCCESS) { - if (FailState == TQUERY_QUERY_FAILED) { - _log("Nie mozna polaczyc sie z baza danych."); - } - else if (FailState == TQUERY_CONNECT_FAILED) { - _log("Zapytanie anulowane."); - g_sqlConnected = false; - } - - _log("Tresc bledu (%d): %s", Errorcode, Error); - - SQL_GetQueryString(Query, g_szTemp, charsmax(g_szTemp)); - _log("Zapytanie: %s", g_szTemp); - - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} - -public IgnoreHandle(FailState, Handle:Query, Error[], Errorcode) -{ - _checkForSQLErrors(Query, FailState, Error, Errorcode); -} - public keepDisplayingMenu(data[]) { new id = data[0]; @@ -1813,6 +1660,15 @@ public keepDisplayingMenu(data[]) set_task(0.1, "keepDisplayingMenu", TASK_KEEP_DISPLAYING_MENU + id, data, 2); } +_checkLoadedPlayersFlags() +{ + if (!ArraySize(g_playersFlags)) { + log_amx("Nie zaladowano zadnych uslug graczy."); + } else { + log_amx("Zaladowano %d uslug graczy.", ArraySize(g_playersFlags)); + } +} + _checkLoadedServices() { if (!ArraySize(g_services)) { @@ -1900,7 +1756,7 @@ _getPriceQuantity(price_index, service_index, output[], len) _canUseShop() { - return !g_blocked && g_shopRegistered && get_pcvar_num(cvar_on) && g_sqlConnected; + return !g_blocked && g_shopRegistered && get_pcvar_num(cvar_on); } _canPayWithWallet(id) @@ -1959,7 +1815,7 @@ _errorConfigFailed(code) { } _errorNoServer() { - _make_error("Error 21 - Serwer nie znajduje sie nie liscie serwerow na stronie WWW."); + _make_error("Error 21 - Bledny token serwera."); } _errorOutdatedVersion() { @@ -1971,13 +1827,8 @@ _errorConfigInvalidResponse() { g_blocked = true; } -_errorNoShopUrl() { - _make_error("Error 24 - Nie podano adresu sklepu w ustawieniach."); -} - -// General -_error51() { - _make_error("Error 51 - Nie udalo sie utworzyc uchwytu do bazy danych."); +_errorNoShopCreds() { + _make_error("Error 24 - Nie podano danych sklepu: URL lub token."); } _make_error(message[]) { From 518f6ca9cdfc24027ef615ed8fcc402f7e000476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 24 Feb 2020 17:40:31 +0100 Subject: [PATCH 071/124] Version 3.10.0-rc.1 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index c9c46a6..8021987 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.9.1-rc.1" +#define VERSION "3.10.0-rc.1" #define PREFIX "SKLEP-SMS" From 0c1c80544e230fcdee012b4eaf31f6967b889b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 24 Feb 2020 17:57:27 +0100 Subject: [PATCH 072/124] Changes to config file --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 21457c0..b1f4b02 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1505,15 +1505,15 @@ _createShopSmsConfigFile() iLen += formatex(szText[iLen], iMax-iLen, "// SKLEP SMS: - Plik Konfiguracyjny^n"); iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Wlacza / Wylacza sklepik^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Wlacza / Wylacza sklep^n"); iLen += formatex(szText[iLen], iMax-iLen, "// 1 - wlaczony^n"); iLen += formatex(szText[iLen], iMax-iLen, "// 0 - wylaczony^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_on ^"1^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu wyswietlenia menu sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu wyswietlenia menu sklepie^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_sklep_komenda ^"/sklepsms,/shopsms^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu przeladowania flag wykupionych w sklepiku^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu przeladowania flag wykupionych w sklepie^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_przeladuj_komenda ^"/przeladuj^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); @@ -1526,9 +1526,9 @@ _createShopSmsConfigFile() iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_info ^"1^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// #####################^n"); iLen += formatex(szText[iLen], iMax-iLen, "// ### Dane Sklepu ###^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// #########################^n^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// #####################^n^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Adres URL sklepu^n"); iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_url ^"^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); From 8439fdeb3633f2a79abc784657b21cc8022a2cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 25 Feb 2020 15:25:27 +0100 Subject: [PATCH 073/124] Add sklepsms_reload --- .../addons/amxmodx/scripting/sklep_sms.sma | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index b1f4b02..ce4c047 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -89,7 +89,7 @@ new g_currency[16], new bool:g_footer = true, bool:g_blocked = false, bool:g_validationAttempt = false, - bool:g_shopRegistered = false; + bool:g_licenseValidated = false; enum e_Service { sID[MAX_SERVICE_ID + 1], @@ -200,7 +200,8 @@ public plugin_init() register_concmd("Podaj_Kod_Zwrotny", "onSmsCodeEntered"); register_concmd("ssnick_Podaj_Haslo", "onNickPasswordEntered"); register_concmd("ssip_Podaj_Haslo", "onIpPasswordEntered"); - register_concmd("sklepsms_reloaddata", "command_loadPlayersFlags"); + register_concmd("sklepsms_reload", "command_reloadServerConfig"); + register_concmd("sklepsms_reloaddata", "command_reloadPlayersFlags"); register_concmd("sklepsms_reloadusers", "command_reassignPlayersFlags"); register_clcmd("say", "sayHook"); @@ -363,7 +364,10 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p return; } - _validateLicense(); + // Do not validate twice, in case of reloading server config + if (!g_licenseValidated) { + _validateLicense(); + } getField(content, "sms_text", g_smsText, charsmax(g_smsText)); getField(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); @@ -582,7 +586,12 @@ public onLoadPlayersFlagsResponse(const content[], CURLcode: code, statusCode, p // --------------------------------------------- PLAYERS FLAGS ------------------------------------------------ // -public command_loadPlayersFlags() +public command_reloadServerConfig() +{ + _loadServerConfig(); +} + +public command_reloadPlayersFlags() { _loadPlayersFlags(); } @@ -798,7 +807,7 @@ _openShopMenu(id) return; } - if (!g_shopRegistered) { + if (!g_licenseValidated) { client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); return; } @@ -1369,7 +1378,7 @@ _handleServicePurchase(id) // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy if (service[FLAGS]) { // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo - set_task(2.0, "command_loadPlayersFlags"); + set_task(2.0, "command_reloadPlayersFlags"); } } @@ -1573,7 +1582,7 @@ _validateLicense() public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, playerId) { - g_shopRegistered = false; + g_licenseValidated = false; if (g_validationAttempt) { _errorForbidden(); @@ -1635,7 +1644,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl getField(content, "footer", footer, charsmax(footer)); g_footer = str_to_num(footer) ? true : false; - g_shopRegistered = true; + g_licenseValidated = true; log_amx("Walidacja licencji zostala zakonczona pomyslnie."); } @@ -1756,7 +1765,7 @@ _getPriceQuantity(price_index, service_index, output[], len) _canUseShop() { - return !g_blocked && g_shopRegistered && get_pcvar_num(cvar_on); + return !g_blocked && g_licenseValidated && get_pcvar_num(cvar_on); } _canPayWithWallet(id) @@ -1882,7 +1891,7 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade } // Clear response array - setc(g_responses[RequestId], MAX_RESPONSE, 0); + setc(g_responses[requestId], MAX_RESPONSE, 0); g_requestsInProgress[requestId] = true; data[RequestId] = requestId; data[RequestPlayerId] = playerId; From 3134ccc7f1925b0de31be628ce8c732dd32f6a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 25 Feb 2020 15:27:18 +0100 Subject: [PATCH 074/124] Version 3.10.0-rc.2 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 8021987..32ce53e 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.10.0-rc.1" +#define VERSION "3.10.0-rc.2" #define PREFIX "SKLEP-SMS" From 777cdf83eac6cf9c240953975b2e216e22d53254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 25 Feb 2020 15:32:52 +0100 Subject: [PATCH 075/124] Change endline chars --- cstrike/addons/amxmodx/configs/sklep_sms.cfg | 34 ++++++++--------- .../scripting/include/shop_sms_const.inc | 38 +++++++++---------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/cstrike/addons/amxmodx/configs/sklep_sms.cfg b/cstrike/addons/amxmodx/configs/sklep_sms.cfg index eb546b6..b7949f6 100644 --- a/cstrike/addons/amxmodx/configs/sklep_sms.cfg +++ b/cstrike/addons/amxmodx/configs/sklep_sms.cfg @@ -2,33 +2,33 @@ // SKLEP SMS: - Plik Konfiguracyjny // ---------------------------------- -// Wlacza / Wylacza sklepik +// Wlacza / Wylacza sklep // 1 - wlaczony // 0 - wylaczony sklepsms_on "1" -// Komenda, ktora nalezy wpisac na chacie w celu wyswietlenia menu sklepiku -sklepsms_sklep_komenda "/sklepsms" +// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu wyswietlenia menu sklepie +sklepsms_sklep_komenda "/sklepsms,/shopsms" -// Komenda, ktora nalezy wpisac na chacie w celu przeladowania flag wykupionych w sklepiku +// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu przeladowania flag wykupionych w sklepie sklepsms_przeladuj_komenda "/przeladuj" -// Wyswietlac informacje o sklepie na chacie? -sklepsms_info "1" +// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, aby zobaczyc swoje aktywne uslugi +sklepsms_uslugi_komenda "/uslugi" +// Czy po uzyciu powyzszych komend wyswietla sie one w chacie +sklepsms_ciche_komendy "0" -// ######################### -// ### Dane Bazy MySQL ### -// ######################### +// Wyswietlac informacje o sklepie na chacie? +sklepsms_info "1" -// Adres IP -sklepsms_host "" -// Uzytkownik -sklepsms_user "" +// ##################### +// ### Dane Sklepu ### +// ##################### -// Haslo -sklepsms_pass "" +// Adres URL +sklepsms_url "http://172.18.0.1:8888" -// Nazwa bazy danych -sklepsms_db "" +// Token +sklepsms_token "dcf79c5f2e867ecbfbf0627135a16bbb" diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 32ce53e..8a1f8c2 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -1,19 +1,19 @@ -#if defined _shop_sms_const_included - #endinput -#endif -#define _shop_sms_const_included - -#pragma library "shop_sms_const" - -#define VERSION "3.10.0-rc.2" - -#define PREFIX "SKLEP-SMS" - -#define SS_OK -1 -#define SS_ERROR -2 -#define SS_STOP -3 -#define SS_BAD_ARGS -4 - -#define MAX_SERVICE_ID 16 - -#define ITEM_OFF 3 +#if defined _shop_sms_const_included + #endinput +#endif +#define _shop_sms_const_included + +#pragma library "shop_sms_const" + +#define VERSION "3.10.0-rc.2" + +#define PREFIX "SKLEP-SMS" + +#define SS_OK -1 +#define SS_ERROR -2 +#define SS_STOP -3 +#define SS_BAD_ARGS -4 + +#define MAX_SERVICE_ID 16 + +#define ITEM_OFF 3 From 23aa3e8a8160703fcd436bed1ab682c77d859189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 25 Feb 2020 15:36:02 +0100 Subject: [PATCH 076/124] Update CFG --- cstrike/addons/amxmodx/configs/sklep_sms.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/configs/sklep_sms.cfg b/cstrike/addons/amxmodx/configs/sklep_sms.cfg index b7949f6..bdf5af4 100644 --- a/cstrike/addons/amxmodx/configs/sklep_sms.cfg +++ b/cstrike/addons/amxmodx/configs/sklep_sms.cfg @@ -28,7 +28,7 @@ sklepsms_info "1" // ##################### // Adres URL -sklepsms_url "http://172.18.0.1:8888" +sklepsms_url "" // Token -sklepsms_token "dcf79c5f2e867ecbfbf0627135a16bbb" +sklepsms_token "" From d08b545dcb0b8e6f0a39be14758c991e31bcae07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 25 Feb 2020 16:21:04 +0100 Subject: [PATCH 077/124] Fix formatex --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index ce4c047..fad4f6d 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -274,7 +274,7 @@ _loadCvars() public client_authorized(id) { if (!g_playersLoaded) { - log_amx("Player [%d] joined before server config was loaded. It may result in a lack of proper permissions."); + log_amx("Player [%d] joined before server config was loaded. It may result in a lack of proper permissions.", id); } _assignPlayerFlags(id); @@ -558,7 +558,7 @@ _loadPlayersFlags() new curl_slist: headers; headers = curl_slist_append(headers, "Accept: application/assoc"); - formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=polish", g_shopUrl, g_serverToken, VERSION); + formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=polish", g_shopUrl, g_serverToken); makeRequest("GET", url, headers, "", "onLoadPlayersFlagsResponse"); } From 66c714e209efd46351309ab5a070aab3c5f4200f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 25 Feb 2020 16:24:12 +0100 Subject: [PATCH 078/124] Fix formatex & increase response array --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index fad4f6d..77f2ec0 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -6,7 +6,7 @@ #include #pragma semicolon 1 -#pragma dynamic 65536 +#pragma dynamic 131072 forward amxbans_sql_initialized(Handle:sqlTuple, dbPrefix[]); forward client_admin(id, flags); @@ -136,7 +136,7 @@ new which_service[33], b_types[33]; // Requests -const MAX_RESPONSE = 8192; +const MAX_RESPONSE = 16384; const MAX_REQUESTS_COUNT = 5; new g_requestCounter = 0, g_responses[MAX_REQUESTS_COUNT][MAX_RESPONSE + 1], @@ -274,7 +274,7 @@ _loadCvars() public client_authorized(id) { if (!g_playersLoaded) { - log_amx("Player [%d] joined before server config was loaded. It may result in a lack of proper permissions.", id); + _log("Player [%d] joined before server config was loaded. It may result in a lack of proper permissions.", id); } _assignPlayerFlags(id); From ca29cf9e6de1727b3ffdfd89788ecba3ff6ae837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 25 Feb 2020 16:28:09 +0100 Subject: [PATCH 079/124] Version 3.10.0-rc.3 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 8a1f8c2..cfe139b 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.10.0-rc.2" +#define VERSION "3.10.0-rc.3" #define PREFIX "SKLEP-SMS" From 398fe237af305a754b27311d5403d445b4eccc67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 26 Feb 2020 13:38:12 +0100 Subject: [PATCH 080/124] Refactor IF block --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 77f2ec0..678c155 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -193,7 +193,7 @@ public plugin_precache() } public plugin_init() -{ +{ register_plugin("Sklep SMS", VERSION, "SeeK"); register_menucmd(register_menuid("smsDetails"), KEYS, "smsDetails_handler"); @@ -217,15 +217,13 @@ public plugin_init() public plugin_cfg() { - // Blad przy tworzeniu (brak uprawnien) - if (!file_exists(g_configPath)) { - _invalidPath(0, g_configPath); - } - - // Ponowne wczytywanie confingu if (file_exists(g_configPath)) { + // Ponowne wczytywanie confingu server_cmd("exec %s", g_configPath); server_exec(); + } else { + // Blad przy tworzeniu (brak uprawnien) + _invalidPath(0, g_configPath); } _loadCvars(); From 1da2ec9aa5f4fbf381ee21e3a2fff05920d11044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 2 Mar 2020 17:05:29 +0100 Subject: [PATCH 081/124] Version 1.10.0-rc.4, Vault and hashmap (#17) --- .../scripting/include/shop_sms_const.inc | 2 +- .../addons/amxmodx/scripting/sklep_sms.sma | 584 +++++++++++------- server/run.sh | 4 +- 3 files changed, 362 insertions(+), 228 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index cfe139b..faae6af 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.10.0-rc.3" +#define VERSION "3.10.0-rc.4" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 678c155..f18de30 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -16,15 +17,15 @@ forward amxx_admin_access(id, flags, timestamp); #define FLAG_NICK (1<<5) -// ID zadan +// Tasks ID #define TASK_KEEP_INFO_SMS 2000 #define TASK_DISPLAY_LOADING 6000 #define TASK_KEEP_DISPLAYING_MENU 8000 -// Klawisze ktore mozna uzyc w menu +// Available menu keys #define KEYS (1<<0)|(1<<9) // Keys: 10 -// Logowanie danych +// LOGS new const CFG_FILE[] = "sklep_sms.cfg"; new const LOG_FILE[] = "sklep_sms.log"; @@ -41,7 +42,7 @@ const MAX_CODE = 16; const MAX_NUMBER = 16; const MAX_AUTH_DATA = 32; const MAX_NAME = 32; -const MAX_SID = 18; +const MAX_SID = 34; const MAX_IP = 15; const MAX_PORT = 8; const MAX_TOKEN = 32; @@ -52,21 +53,28 @@ const MAX_URL = MAX_URL_HOST + MAX_URL_PATH; const MAX_HEADER = 128; const MAX_BODY = 384; const MAX_FUNCTION = 128; +const MAX_CONFIG_KEY = 64; +const MAX_NUMBER_LENGTH = 32; + const TYPE_NICK = 1<<0; const TYPE_IP = 1<<1; const TYPE_SID = 1<<2; +new g_szTemp[16384]; + +// nVault +new g_vaultHandle; +new const VAULT_PLAYER_FLAGS_KEY[] = "player_flags"; + // FORWARDs new forwrdClientAccess; // CVARs new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_shop_url, cvar_token, cvar_server_ip, cvar_silent_command; new show_info; -new Array:g_shopCommands, - Array:g_serviceListCommands, - Array:g_reloadCommands; - -new g_szTemp[4096]; +new Trie:g_shopCommands, + Trie:g_serviceListCommands, + Trie:g_reloadCommands; // Server new g_serverIp[MAX_IP + 1], @@ -82,7 +90,7 @@ new g_currency[16], g_serverToken[MAX_TOKEN + 1], g_smsText[MAX_SMS_TEXT + 1], Float:g_vat, - g_accountsSteamIds[4096] = "", + Trie:g_accountsSteamIds, g_licenseToken[63]; // License @@ -120,9 +128,9 @@ enum e_Price { new Array:g_prices; enum e_PlayerFlags { - pfPLAYER[MAX_AUTH_DATA+1], + pfAUTH[MAX_AUTH_DATA+1], pfFLAGS, - pfPASSWORD[MAX_PASSWORD+2], + pfPASSWORD[MAX_PASSWORD+1], pfTYPE }; new Array:g_playersFlags; @@ -137,7 +145,7 @@ new which_service[33], // Requests const MAX_RESPONSE = 16384; -const MAX_REQUESTS_COUNT = 5; +const MAX_REQUESTS_COUNT = 4; new g_requestCounter = 0, g_responses[MAX_REQUESTS_COUNT][MAX_RESPONSE + 1], bool:g_requestsInProgress[MAX_REQUESTS_COUNT]; @@ -187,9 +195,10 @@ public plugin_precache() g_smses = ArrayCreate(e_SMS); g_services = ArrayCreate(e_Service); g_prices = ArrayCreate(e_Price); - g_shopCommands = ArrayCreate(MAX_COMMAND + 1); - g_serviceListCommands = ArrayCreate(MAX_COMMAND + 1); - g_reloadCommands = ArrayCreate(MAX_COMMAND + 1); + g_shopCommands = TrieCreate(); + g_serviceListCommands = TrieCreate(); + g_reloadCommands = TrieCreate(); + g_accountsSteamIds = TrieCreate(); } public plugin_init() @@ -200,9 +209,9 @@ public plugin_init() register_concmd("Podaj_Kod_Zwrotny", "onSmsCodeEntered"); register_concmd("ssnick_Podaj_Haslo", "onNickPasswordEntered"); register_concmd("ssip_Podaj_Haslo", "onIpPasswordEntered"); - register_concmd("sklepsms_reload", "command_reloadServerConfig"); - register_concmd("sklepsms_reloaddata", "command_reloadPlayersFlags"); - register_concmd("sklepsms_reloadusers", "command_reassignPlayersFlags"); + register_concmd("ss_reload", "command_reloadServerConfig"); + register_concmd("ss_reload_players_flags", "command_reloadPlayersFlags"); + register_concmd("ss_reassign_players_flags", "command_reassignPlayersFlags"); register_clcmd("say", "sayHook"); register_clcmd("say_team", "sayHook"); @@ -213,16 +222,21 @@ public plugin_init() g_signature = random_num(1, 99999999); forwrdClientAccess = CreateMultiForward("ss_client_access", ET_IGNORE, FP_CELL, FP_CELL); + + g_vaultHandle = nvault_open("shopsms"); + if (g_vaultHandle == INVALID_HANDLE) { + _log("Couldn't open 'shopsms' nvault."); + } } public plugin_cfg() { if (file_exists(g_configPath)) { - // Ponowne wczytywanie confingu + // Read config once again server_cmd("exec %s", g_configPath); server_exec(); } else { - // Blad przy tworzeniu (brak uprawnien) + // File was not created (probably due to invalid permissions) _invalidPath(0, g_configPath); } @@ -232,7 +246,7 @@ public plugin_cfg() new fullIp[MAX_FULL_IP]; get_pcvar_string(cvar_server_ip, fullIp, charsmax(fullIp)); - // Brak ip w cvarach + // No IP in CVARs if (!strlen(fullIp)) { get_user_ip(0, fullIp, charsmax(fullIp), false); } @@ -240,6 +254,16 @@ public plugin_cfg() split(fullIp, g_serverIp, charsmax(g_serverIp), g_serverPort, charsmax(g_serverPort), ":"); _loadServerConfig(); + _restorePlayerFlagsFromVault(); +} + +public plugin_end() +{ + nvault_close(g_vaultHandle); + TrieDestroy(g_shopCommands); + TrieDestroy(g_serviceListCommands); + TrieDestroy(g_reloadCommands); + TrieDestroy(g_accountsSteamIds); } _loadCvars() @@ -258,22 +282,24 @@ _loadCvars() } get_pcvar_string(cvar_sklep, g_szTemp, charsmax(g_szTemp)); - explode(g_szTemp, ',', g_shopCommands, MAX_COMMAND); + _explodeCommands(g_szTemp, g_shopCommands); get_pcvar_string(cvar_przeladuj, g_szTemp, charsmax(g_szTemp)); - explode(g_szTemp, ',', g_reloadCommands, MAX_COMMAND); + _explodeCommands(g_szTemp, g_reloadCommands); get_pcvar_string(cvar_uslugi, g_szTemp, charsmax(g_szTemp)); - explode(g_szTemp, ',', g_serviceListCommands, MAX_COMMAND); + _explodeCommands(g_szTemp, g_serviceListCommands); show_info = get_pcvar_num(cvar_show_info); } public client_authorized(id) { + #if defined IS_DEBUG if (!g_playersLoaded) { _log("Player [%d] joined before server config was loaded. It may result in a lack of proper permissions.", id); } + #endif _assignPlayerFlags(id); } @@ -302,14 +328,15 @@ public sayHook(id) { new text[MAX_COMMAND + 1]; read_argv(1, text, charsmax(text)); + strtolower(text); - if (_matchCommand(text, g_shopCommands)) { + if (TrieKeyExists(g_shopCommands, text)) { _openShopMenu(id); } - else if (_matchCommand(text, g_reloadCommands)) { - command_reassignPlayersFlags(id); + else if (TrieKeyExists(g_reloadCommands, text)) { + _sayCommand_reassignPlayersFlags(id); } - else if (_matchCommand(text, g_serviceListCommands)) { + else if (TrieKeyExists(g_serviceListCommands, text)) { _showPlayerServices(id); } @@ -356,9 +383,12 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p return; } - if (!getField(content, "license_token", g_licenseToken, charsmax(g_licenseToken))) { + new Trie:dict = _createResponseDict(content); + + if (!TrieGetString(dict, "license_token", g_licenseToken, charsmax(g_licenseToken))) { _log("Invalid server config response | %s", content); _errorConfigInvalidResponse(); + TrieDestroy(dict); return; } @@ -367,38 +397,56 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p _validateLicense(); } - getField(content, "sms_text", g_smsText, charsmax(g_smsText)); - getField(content, "steam_ids", g_accountsSteamIds, charsmax(g_accountsSteamIds)); - getField(content, "currency", g_currency, charsmax(g_currency)); - getField(content, "contact", g_contact, charsmax(g_contact)); - getField(content, "vat", g_szTemp, charsmax(g_szTemp)); - g_vat = str_to_float(g_szTemp); + TrieGetString(dict, "sms_text", g_smsText, charsmax(g_smsText)); + TrieGetString(dict, "currency", g_currency, charsmax(g_currency)); + TrieGetString(dict, "contact", g_contact, charsmax(g_contact)); + TrieGetTextFloat(dict, "vat", g_vat); - _extractSmsNumbers(content); - _extractPrices(content); - _extractServices(content); - _extractPlayersFlags(content); + TrieGetString(dict, "steam_ids", g_szTemp, charsmax(g_szTemp)); - _stopPlugins(); + TrieClear(g_accountsSteamIds); + new cur_len = 0, max_len = strlen(g_szTemp); + while (cur_len < max_len) + { + new steam_id[MAX_SID + 1]; + cur_len += copyc(steam_id, charsmax(steam_id), g_szTemp[cur_len], ';') + 1; + strtolower(steam_id); + trim(steam_id); + if (strlen(steam_id)) { + TrieSetCell(g_accountsSteamIds, steam_id, 1); + } + } + + _extractSmsNumbers(dict); + _extractPrices(dict); + _extractServices(dict); + _extractPlayersFlags(dict); + + TrieDestroy(dict); + + _stopPlugins(); _checkLoadedPlayersFlags(); _checkLoadedServices(); + _storePlayerFlagsDump(); } -_extractSmsNumbers(const content[]) +_extractSmsNumbers(Trie:dict) { - ArrayClear(g_smses); - new key[256]; + new count, key[MAX_CONFIG_KEY + 1]; + + if (!TrieGetTextInt(dict, "sn.c", count)) { + _log("Invalid sms numbers dictionary."); + return; + } - formatex(key, charsmax(key), "sn.c"); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - new count = str_to_num(g_szTemp); + ArrayClear(g_smses); for (new i = 0; i < count; ++i) { new sms[e_SMS]; formatex(key, charsmax(key), "sn.%d", i); - getField(content, key, sms[NUMBER], MAX_NUMBER); + TrieGetString(dict, key, sms[NUMBER], MAX_NUMBER); sms[PRICE] = get_sms_cost(sms[NUMBER]); @@ -406,51 +454,52 @@ _extractSmsNumbers(const content[]) } } -_extractPrices(const content[]) +_extractPrices(Trie:dict) { - ArrayClear(g_prices); - new key[256]; + new count, key[MAX_CONFIG_KEY + 1]; + + if (!TrieGetTextInt(dict, "pr.c", count)) { + _log("Invalid prices dictionary."); + return; + } - formatex(key, charsmax(key), "pr.c"); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - new count = str_to_num(g_szTemp); + ArrayClear(g_prices); for (new i = 0; i < count; ++i) { new price[e_Price]; formatex(key, charsmax(key), "pr.%d.i", i); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - price[pID] = str_to_num(g_szTemp); + TrieGetTextInt(dict, key, price[pID]); formatex(key, charsmax(key), "pr.%d.s", i); - getField(content, key, price[pSERVICE_ID], MAX_SERVICE_ID); + TrieGetString(dict, key, price[pSERVICE_ID], MAX_SERVICE_ID); formatex(key, charsmax(key), "pr.%d.p", i); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - price[SMS_PRICE] = str_to_num(g_szTemp); + TrieGetTextInt(dict, key, price[SMS_PRICE]); formatex(key, charsmax(key), "pr.%d.q", i); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - price[QUANTITY] = str_to_num(g_szTemp); + TrieGetTextInt(dict, key, price[QUANTITY]); ArrayPushArray(g_prices, price); } } -_extractServices(const content[]) +_extractServices(Trie:dict) { - ArrayClear(g_services); - new key[256]; + new count, key[MAX_CONFIG_KEY + 1]; + + if (!TrieGetTextInt(dict, "se.c", count)) { + _log("Invalid services dictionary."); + return; + } - formatex(key, charsmax(key), "se.c"); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - new count = str_to_num(g_szTemp); + ArrayClear(g_services); for (new i = 0; i < count; ++i) { new service[e_Service]; formatex(key, charsmax(key), "se.%d.i", i); - getField(content, key, service[sID], MAX_SERVICE_ID); + TrieGetString(dict, key, service[sID], MAX_SERVICE_ID); service[PLUGIN] = _getServicePluginByID(service[sID]); if (service[PLUGIN] == -1) { @@ -461,20 +510,19 @@ _extractServices(const content[]) } formatex(key, charsmax(key), "se.%d.n", i); - getField(content, key, service[sNAME], MAX_SERVICE_NAME); + TrieGetString(dict, key, service[sNAME], MAX_SERVICE_NAME); formatex(key, charsmax(key), "se.%d.d", i); - getField(content, key, service[DESCRIPTION], MAX_DESCRIPTION); + TrieGetString(dict, key, service[DESCRIPTION], MAX_DESCRIPTION); formatex(key, charsmax(key), "se.%d.ta", i); - getField(content, key, service[TAG], MAX_SERVICE_TAG); + TrieGetString(dict, key, service[TAG], MAX_SERVICE_TAG); formatex(key, charsmax(key), "se.%d.f", i); - getField(content, key, service[FLAGS], MAX_FLAGS); + TrieGetString(dict, key, service[FLAGS], MAX_FLAGS); formatex(key, charsmax(key), "se.%d.ty", i); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - service[TYPES] = str_to_num(g_szTemp); + TrieGetTextInt(dict, key, service[TYPES]); ArrayPushArray(g_services, service); @@ -485,33 +533,34 @@ _extractServices(const content[]) } } -_extractPlayersFlags(const content[]) +_extractPlayersFlags(Trie:dict) { - ArrayClear(g_playersFlags); - new key[256]; + new count, key[MAX_CONFIG_KEY + 1]; + + if (!TrieGetTextInt(dict, "pf.c", count)) { + _log("Invalid players flags dictionary."); + return; + } - formatex(key, charsmax(key), "pf.c"); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - new count = str_to_num(g_szTemp); + ArrayClear(g_playersFlags); for (new i = 0; i < count; ++i) { - new player_flags[e_PlayerFlags]; + new player_flags[e_PlayerFlags], flags[MAX_FLAGS + 1], type; formatex(key, charsmax(key), "pf.%d.t", i); - getField(content, key, g_szTemp, charsmax(g_szTemp)); - new type = str_to_num(g_szTemp); + TrieGetTextInt(dict, key, type); formatex(key, charsmax(key), "pf.%d.a", i); - getField(content, key, player_flags[pfPLAYER], MAX_AUTH_DATA); + TrieGetString(dict, key, player_flags[pfAUTH], MAX_AUTH_DATA); formatex(key, charsmax(key), "pf.%d.p", i); - getField(content, key, player_flags[pfPASSWORD], MAX_PASSWORD); + TrieGetString(dict, key, player_flags[pfPASSWORD], MAX_PASSWORD); formatex(key, charsmax(key), "pf.%d.f", i); - getField(content, key, g_szTemp, charsmax(g_szTemp)); + TrieGetString(dict, key, flags, charsmax(flags)); - for (new i = 0; i < strlen(g_szTemp); ++i) { - player_flags[pfFLAGS] |= read_flags(g_szTemp[i]); + for (new i = 0; i < strlen(flags); ++i) { + player_flags[pfFLAGS] |= read_flags(flags[i]); } switch (type) { @@ -550,14 +599,13 @@ _stopPlugins() } } -_loadPlayersFlags() +public loadPlayersFlags() { new url[MAX_URL + 1]; new curl_slist: headers; headers = curl_slist_append(headers, "Accept: application/assoc"); formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=polish", g_shopUrl, g_serverToken); - makeRequest("GET", url, headers, "", "onLoadPlayersFlagsResponse"); } @@ -576,8 +624,32 @@ public onLoadPlayersFlagsResponse(const content[], CURLcode: code, statusCode, p _log("Invalid players flags response HTTP code | %d", statusCode); return; } - - _extractPlayersFlags(content); + + new Trie:dict = _createResponseDict(content); + _extractPlayersFlags(dict); + TrieDestroy(dict); + + _storePlayerFlagsDump(); +} + +Trie:_createResponseDict(const content[]) +{ + new Trie:dict = TrieCreate(); + new cur_len = 0, max_len = strlen(content); + + while (cur_len < max_len) + { + new key[MAX_CONFIG_KEY + 1]; + + cur_len += copyc(g_szTemp, charsmax(g_szTemp), content[cur_len], '^n') + 1; + new position = copyc(key, charsmax(key), g_szTemp, ':') + 1; + + if (strlen(key)) { + TrieSetString(dict, key, g_szTemp[position]); + } + } + + return dict; } // @@ -587,15 +659,24 @@ public onLoadPlayersFlagsResponse(const content[], CURLcode: code, statusCode, p public command_reloadServerConfig() { _loadServerConfig(); + log_amx("Server config has been reloaded."); } public command_reloadPlayersFlags() -{ - _loadPlayersFlags(); +{ + loadPlayersFlags(); + log_amx("Players flags have been reloaded."); } -public command_reassignPlayersFlags(id) -{ +public command_reassignPlayersFlags() +{ + g_lastReassign = get_systime(); + _reassignPlayersFlags(); + log_amx("Players flags have been reassigned."); +} + +_sayCommand_reassignPlayersFlags(id) +{ if (g_lastReassign + 10 > get_systime()) { client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); return; @@ -604,9 +685,7 @@ public command_reassignPlayersFlags(id) g_lastReassign = get_systime(); _reassignPlayersFlags(); - if (is_user_connected(id)) { - client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepiku.", PREFIX); - } + client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepie.", PREFIX); } /** @@ -653,8 +732,8 @@ _addUsersToGlobalArray() for (new i = 0; i < admins_num(); ++i) { new global_player[e_PlayerFlags], global_player_name[33]; - admins_lookup(i, AdminProp_Auth, global_player[pfPLAYER], 32); - copy(global_player_name, charsmax(global_player_name), global_player[pfPLAYER]); + admins_lookup(i, AdminProp_Auth, global_player[pfAUTH], MAX_AUTH_DATA); + copy(global_player_name, charsmax(global_player_name), global_player[pfAUTH]); strtolower(global_player_name); admins_lookup(i, AdminProp_Password, global_player[pfPASSWORD], MAX_PASSWORD); @@ -668,20 +747,20 @@ _addUsersToGlobalArray() s = (l + p) / 2; ArrayGetArray(local_users, s, local_player); - strtolower(local_player[pfPLAYER]); - if (global_player[pfTYPE] == local_player[pfTYPE] && equali(global_player_name, local_player[pfPLAYER])) { + strtolower(local_player[pfAUTH]); + if (global_player[pfTYPE] == local_player[pfTYPE] && equali(global_player_name, local_player[pfAUTH])) { // Leave global password global_player[pfFLAGS] |= local_player[pfFLAGS]; ArrayPushArray(global_users, global_player); ArrayDeleteItem(local_users, s); break; } - else if (strcmp(global_player_name, local_player[pfPLAYER]) > 0) { + else if (strcmp(global_player_name, local_player[pfAUTH]) > 0) { l = s + 1; } else if ( _getOrderOfType(global_player[pfTYPE]) > _getOrderOfType(local_player[pfTYPE]) && - equali(global_player_name, local_player[pfPLAYER]) + equali(global_player_name, local_player[pfAUTH]) ) { l = s + 1; } @@ -699,12 +778,12 @@ _addUsersToGlobalArray() for (new i = 0; i < ArraySize(global_users); ++i) { new player_flags[e_PlayerFlags]; ArrayGetArray(global_users, i, player_flags); - admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); + admins_push(player_flags[pfAUTH], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } for (new i = 0; i < ArraySize(local_users); ++i) { new player_flags[e_PlayerFlags]; ArrayGetArray(local_users, i, player_flags); - admins_push(player_flags[pfPLAYER], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); + admins_push(player_flags[pfAUTH], player_flags[pfPASSWORD], player_flags[pfFLAGS], player_flags[pfTYPE]); } } @@ -721,20 +800,20 @@ _assignPlayerFlags(id) if (player_flags[pfTYPE] & FLAG_NICK) { new name[MAX_NAME + 1]; get_user_name(id, name, charsmax(name)); - if (! equali(name, player_flags[pfPLAYER])) { + if (! equali(name, player_flags[pfAUTH])) { continue; } } else if (player_flags[pfTYPE] & FLAG_IP) { new ip[MAX_IP + 1]; get_user_ip(id, ip, charsmax(ip), true); - if (! equali(ip, player_flags[pfPLAYER])) { + if (! equali(ip, player_flags[pfAUTH])) { continue; } } else if (player_flags[pfTYPE] & FLAG_AUTHID) { new sid[MAX_SID + 1], arr_sid[MAX_SID + 1]; - copy(arr_sid, charsmax(arr_sid), player_flags[pfPLAYER]); + copy(arr_sid, charsmax(arr_sid), player_flags[pfAUTH]); get_user_authid(id, sid, charsmax(sid)); strtolower(arr_sid); @@ -781,6 +860,50 @@ _checkPassword(id, const tag[], const valid_password[]) return equal(password_md5, valid_password) || equal(password, valid_password); } +// +// ----------------------------------------------- CONFIG VAULT --------------------------------------------------- +// + +_storePlayerFlagsDump() +{ + new iLen = 0, iMax = charsmax(g_szTemp); + + iLen += formatex(g_szTemp[iLen], iMax-iLen, "pf.c:%d^n", ArraySize(g_playersFlags)); + + for (new i = 0; i < ArraySize(g_playersFlags); ++i) { + new player_flags[e_PlayerFlags], flags[MAX_FLAGS + 1], type; + + ArrayGetArray(g_playersFlags, i, player_flags); + get_flags(player_flags[pfFLAGS], flags, charsmax(flags)); + + if (player_flags[pfTYPE] & FLAG_AUTHID) { + type = TYPE_SID; + } else if (player_flags[pfTYPE] & FLAG_IP) { + type = TYPE_IP; + } else { + type = TYPE_NICK; + } + + iLen += formatex(g_szTemp[iLen], iMax-iLen, "pf.%d.t:%d^n", i, type); + iLen += formatex(g_szTemp[iLen], iMax-iLen, "pf.%d.a:%s^n", i, player_flags[pfAUTH]); + iLen += formatex(g_szTemp[iLen], iMax-iLen, "pf.%d.p:%s^n", i, player_flags[pfPASSWORD]); + iLen += formatex(g_szTemp[iLen], iMax-iLen, "pf.%d.f:%s^n", i, flags); + } + + nvault_set(g_vaultHandle, VAULT_PLAYER_FLAGS_KEY, g_szTemp); +} + +_restorePlayerFlagsFromVault() +{ + nvault_get(g_vaultHandle, VAULT_PLAYER_FLAGS_KEY, g_szTemp, charsmax(g_szTemp)); + + if (strlen(g_szTemp)) { + new Trie:dict = _createResponseDict(g_szTemp); + _extractPlayersFlags(dict); + TrieDestroy(dict); + } +} + // // ------------------------------------------------- SHOP MENU ---------------------------------------------------- // @@ -844,8 +967,7 @@ _openShopMenu(id) menu_additem(menu, szText, data, 0, menu_callback); } } - - // Replace Exit with Wyjdz + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(id, menu); @@ -924,7 +1046,6 @@ _openPricingMenu(id, service_id) menu_additem(menu, szText, data); } - // Wyjdz zamiast Exit menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); if (menu_items(menu) > 1) { @@ -972,8 +1093,8 @@ _openServiceTypeMenu(id) menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); menu_additem(menu, "Na SteamID", "", 0, menu_callback); - - menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER); + + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); new data[4]; data[0] = id; @@ -1001,10 +1122,8 @@ public serviceTypeMenu_callback(id, menu, item) public serviceTypeMenu_handler(id, menu, item) { - if (0 <= item && item <= 2) { - remove_task(TASK_KEEP_DISPLAYING_MENU+id); - menu_destroy(menu); - } + remove_task(TASK_KEEP_DISPLAYING_MENU+id); + menu_destroy(menu); switch (item) { case 0: { @@ -1291,31 +1410,32 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny HTTP code: %d", PREFIX, statusCode); return; } - - new status[128], text[128]; - getField(content, "status", status, charsmax(status)); - getField(content, "text", text, charsmax(text)); - + + new status[128], text[128], warnings[512]; + + new Trie:dict = _createResponseDict(content); + TrieGetString(dict, "status", status, charsmax(status)); + TrieGetString(dict, "text", text, charsmax(text)); + TrieGetString(dict, "warnings", warnings, charsmax(warnings)); + TrieDestroy(dict); + if (strlen(text)) { client_print_color(playerId, Red, "^4[%s] ^1%s", PREFIX, text); } else { - log_amx("Invalid response: %s", content); + _log("Invalid purchase response: %s", content); client_print_color(playerId, Red, "^4[%s] ^1Wystapil blad. Brak odpowiedzi z serwera.", PREFIX); } if (equal(status, "warnings")) { - new szWarnings[512]; - getField(content, "warnings", szWarnings, charsmax(szWarnings)); - formatex(g_szTemp, charsmax(g_szTemp), "\ \ \
    Bledy ktore wystapily przy zakupie uslugi
    \ - %s\ + %s^n\ Uzyj jeszcze raz tego samego kodu zwrotnego sms.\ ", - szWarnings + warnings ); show_motd(playerId, g_szTemp, "Bledy przy zakupie uslugi"); } @@ -1376,7 +1496,7 @@ _handleServicePurchase(id) // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy if (service[FLAGS]) { // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo - set_task(2.0, "command_reloadPlayersFlags"); + set_task(2.0, "loadPlayersFlags"); } } @@ -1430,27 +1550,32 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, return; } - new key[256]; + new count, key[MAX_CONFIG_KEY + 1]; new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); - formatex(key, charsmax(key), "c"); - if (!getField(content, key, g_szTemp, charsmax(g_szTemp))) { - log_amx("Invalid user services response. | %s", content); + new Trie:dict = _createResponseDict(content); + + if (!TrieGetTextInt(dict, "c", count)) { + _log("Invalid user services response. | %s", content); + client_print_color(playerId, Red, "^4[%s] ^1Nieprawidlowa odpowiedz serwera. Zglos problem opiekunowi serwera.", PREFIX); + TrieDestroy(dict); + return; } - new count = str_to_num(g_szTemp); for (new i = 0; i < count; ++i) { new service_name[MAX_SERVICE_ID + 1], expire[32 + 1], item_text[128]; formatex(key, charsmax(key), "%d.s", i); - getField(content, key, service_name, charsmax(service_name)); + TrieGetString(dict, key, service_name, charsmax(service_name)); formatex(key, charsmax(key), "%d.e", i); - getField(content, key, expire, charsmax(expire)); + TrieGetString(dict, key, expire, charsmax(expire)); formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service_name, expire); menu_additem(menu, item_text); } + + TrieDestroy(dict); if (menu_items(menu)) { menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); @@ -1458,8 +1583,8 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, } else { new command[MAX_COMMAND + 1]; - _getFirstCommand(g_shopCommands, command, charsmax(command)); - client_print_color(playerId, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s.", PREFIX, command); + _getShopCommand(command, charsmax(command)); + client_print_color(playerId, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s", PREFIX, command); } } @@ -1497,8 +1622,8 @@ public displayCommercial() { if (get_playersnum() > 1) { new command[MAX_COMMAND + 1]; - _getFirstCommand(g_shopCommands, command, charsmax(command)); - client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepiku! ^1Wystarczy wpisac: ^4%s", PREFIX, command); + _getShopCommand(command, charsmax(command)); + client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisac: ^4%s", PREFIX, command); } } @@ -1611,7 +1736,11 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl if (statusCode == 403) { new text[128 + 1]; - getField(content, "text", text, charsmax(text)); + + new Trie:dict = _createResponseDict(content); + TrieGetString(dict, "text", text, charsmax(text)); + TrieDestroy(dict); + _errorForbidden(text); return; } @@ -1621,8 +1750,13 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl return; } - new text[32 + 1]; - getField(content, "text", text, charsmax(text)); + new text[32 + 1], signature; + + new Trie:dict = _createResponseDict(content); + TrieGetString(dict, "text", text, charsmax(text)); + TrieGetTextInt(dict, "signature", signature); + TrieGetTextInt(dict, "footer", g_footer); + TrieDestroy(dict); if (!equal(text, "ok")) { _log("Invalid license validation response | %s", content); @@ -1630,18 +1764,11 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl return; } - new szSignature[16]; - getField(content, "signature", szSignature, charsmax(szSignature)); - - if (str_to_num(szSignature) != g_signature) { + if (signature != g_signature) { _errorForbidden(); return; } - new footer[2]; - getField(content, "footer", footer, charsmax(footer)); - g_footer = str_to_num(footer) ? true : false; - g_licenseValidated = true; log_amx("Walidacja licencji zostala zakonczona pomyslnie."); } @@ -1768,16 +1895,62 @@ _canUseShop() _canPayWithWallet(id) { - new steam_id[MAX_SID + 2]; + new steam_id[MAX_SID + 1]; get_user_authid(id, steam_id, charsmax(steam_id)); + strtolower(steam_id); + + if (TrieKeyExists(g_accountsSteamIds, steam_id)) { + return true; + } + // CSGO uses different steamid prefix. STEAM_1 instead of STEAM_0. - // That is why we want to ignore SID prefix. - replace(steam_id, charsmax(steam_id), "STEAM_1", ""); - replace(steam_id, charsmax(steam_id), "STEAM_0", ""); - format(steam_id, charsmax(steam_id), "%s;", steam_id); + // We want to check against it as well. + replace(steam_id, charsmax(steam_id), "steam_1", "steam_0"); + if (TrieKeyExists(g_accountsSteamIds, steam_id)) { + return true; + } - return containi(g_accountsSteamIds, steam_id) != -1; + replace(steam_id, charsmax(steam_id), "steam_0", "steam_1"); + return TrieKeyExists(g_accountsSteamIds, steam_id); +} + +_getShopCommand(output[], len) +{ + #if defined TrieIterCreate + new TrieIter:iter = TrieIterCreate(g_shopCommands); + if (!TrieIterEnded(iter)) { + TrieIterGetKey(iter, output, len); + } else { + formatex(output, len, ""); + } + TrieIterDestroy(iter); + #else + get_pcvar_string(cvar_sklep, g_szTemp, charsmax(g_szTemp)); + copyc(output, len, g_szTemp, ','); + #endif +} + +/** + * https://amxx.pl/topic/43223-explode/ + */ +_explodeCommands(const text[], Trie:dict) +{ + TrieClear(dict); + + new cur_len = 0, max_len = strlen(text); + + while (cur_len < max_len) + { + new command[MAX_COMMAND + 1]; + cur_len += copyc(command, charsmax(command), text[cur_len], ',') + 1; + strtolower(command); + trim(command); + + if (strlen(command)) { + TrieSetCell(dict, command, 1); + } + } } // @@ -1872,19 +2045,19 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade new CURL: handle, curl_slist: newHeaders, data[requestStruct]; #if defined IS_DEBUG - log_amx("Request | %s %s %s", method, url, body); + _log("Request | %s %s %s", method, url, body); #endif handle = curl_easy_init(); if (!handle) { - _log("Nie udalo sie utworzyc uchwytu CURL."); + _log("The CURL handle couldn't be initialized."); return false; } new requestId = g_requestCounter++ % MAX_REQUESTS_COUNT; if (g_requestsInProgress[requestId]) { - _log("Pula requestetow jest pelna. Request nie zostal wykonany."); + _log("Requests pool is full. Request has not been execeuted."); return false; } @@ -1949,7 +2122,7 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade runRequestCallback(const function[], const httpResponseContent[], playerId, CURLcode: code, statusCode) { #if defined IS_DEBUG - log_amx("Request response | %d %d %s", code, statusCode, httpResponseContent); + _log("Request response | %d %d %s", code, statusCode, httpResponseContent); #endif if (!strlen(function) || callfunc_begin(function) == 1) { @@ -1959,7 +2132,7 @@ runRequestCallback(const function[], const httpResponseContent[], playerId, CURL callfunc_push_int(playerId); callfunc_end(); } else { - _log("Funkcja nie zostala prawidlowo wywolana [%s]", function); + _log("Functions hasn't been execeuted properly [%s]", function); } } @@ -2039,38 +2212,11 @@ vc_md5(const szString[], md5buffer[34]) // --------------------------------------------------------- Stocks ------------------------------------------------------------ -stock bool:_matchCommand(const text[], Array:commands) -{ - for (new i = 0; i < ArraySize(commands); ++i) { - new command[MAX_COMMAND + 1]; - ArrayGetString(commands, i, command, charsmax(command)); - - if (equali(text, command)) { - return true; - } - } - - return false; -} - -stock _getFirstCommand(Array:commands, output[], maxlen) -{ - if (ArraySize(commands) == 0) { - formatex(output, maxlen, ""); - } else { - ArrayGetString(commands, 0, output, maxlen); - } -} - stock bool:is_steam(id) { new auth[32]; get_user_authid(id, auth, charsmax(auth)); - if (contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1) { - return true; - } - - return false; + return contain(auth, "STEAM_0:0:") != -1 || contain(auth, "STEAM_0:1:") != -1; } stock get_sms_cost(const number[]) @@ -2120,28 +2266,6 @@ stock groupDigits(a, output[], len) } } -stock getField(const text[], const field[], output[], len) -{ - new pattern[64]; - formatex(pattern, charsmax(pattern), "^^%s:(.*)$", field); - return matchRegex(text, pattern, output, len, 1); -} - -stock matchRegex(const text[], const pattern[], output[], len, group = 0) -{ - new ret, error[32]; - new Regex:reg = regex_match(text, pattern, ret, error, charsmax(error), "m"); - - if (reg > REGEX_NO_MATCH) { - regex_substr(reg, group, output, len); - regex_free(reg); - return true; - } - - _log("Regex error. Pattern: %s, Error: %s, Reg: %d", pattern, error, reg); - return false; -} - stock StringURLEncode(const szInput[], szOutput[], const iLen) { static const HEXCHARS[ 16 ] = { @@ -2185,18 +2309,26 @@ stock StringURLEncode(const szInput[], szOutput[], const iLen) return iFLen; } -/** - * https://amxx.pl/topic/43223-explode/ - */ -stock explode(const string[], const character, Array:output, maxlen) +stock bool:TrieGetTextInt(Trie: dict, const key[], &output) { - new len = strlen(string); - new oLen = 0; - - while (oLen < len) - { - new text[128 + 1]; - oLen += (1 + copyc(text, maxlen, string[oLen], character)); - ArrayPushString(output, text); + new szNumber[MAX_NUMBER_LENGTH + 1]; + + if (TrieGetString(dict, key, szNumber, charsmax(szNumber))) { + output = str_to_num(szNumber); + return true; } + + return false; +} + +stock bool:TrieGetTextFloat(Trie: dict, const key[], &Float:output) +{ + new szNumber[MAX_NUMBER_LENGTH + 1]; + + if (TrieGetString(dict, key, szNumber, charsmax(szNumber))) { + output = str_to_float(szNumber); + return true; + } + + return false; } diff --git a/server/run.sh b/server/run.sh index 024778f..bce64a6 100755 --- a/server/run.sh +++ b/server/run.sh @@ -7,6 +7,8 @@ if [ "$#" -lt 1 ]; then exit 1 fi +DIRECTORY=$(cd `dirname $0` && pwd) + declare -A BASE_VERSIONS=( ["1.8.2"]="https://www.amxmodx.org/release/amxmodx-1.8.2-base-linux.tar.gz" ["1.8.3"]="https://www.amxmodx.org/amxxdrop/1.8/amxmodx-1.8.3-dev-git5201-base-linux.tar.gz" @@ -33,4 +35,4 @@ CSTRIKE_URL="${CSTRKE_VERSIONS[${BUILD_VERSION}]}" # RUN IMAGE_NAME="cs16" docker build -t ${IMAGE_NAME} --build-arg BASE_URL="${BASE_URL}" --build-arg CSTRIKE_URL="${CSTRIKE_URL}" -f "$DIR/server/Dockerfile" . \ -&& docker run --rm -it -p 27015:27015 --network sklep-sms_default --name sklepsms_cs16 ${IMAGE_NAME} +&& docker run --rm -it -p 27015:27015 --network sklep-sms_default --name sklepsms_cs16 -v "$DIRECTORY/storage/vault":"/home/steam/dedicated/cstrike/addons/amxmodx/data/vault" ${IMAGE_NAME} From 2e9996412cc57cbdfeb84aad6fa0b285cfbb5e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 2 Mar 2020 17:12:51 +0100 Subject: [PATCH 082/124] Remove regex usage --- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 1 - 1 file changed, 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index f18de30..178f09b 100644 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include From 0498c286695f695a508d8bb83f242b4909e679b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 14 Mar 2020 22:07:03 +0100 Subject: [PATCH 083/124] Version 3.10.0 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index faae6af..d59c2ad 100644 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.10.0-rc.4" +#define VERSION "3.10.0" #define PREFIX "SKLEP-SMS" From 30ee9b86e5bff3c634d51f4ea203c1b72a6af749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Mar 2020 14:19:52 +0100 Subject: [PATCH 084/124] Use /home/builder --- cstrike/addons/amxmodx/scripting/include/colorchat.inc | 0 cstrike/addons/amxmodx/scripting/include/curl.inc | 0 cstrike/addons/amxmodx/scripting/include/curl_consts.inc | 0 cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc | 0 cstrike/addons/amxmodx/scripting/include/shop_sms.inc | 0 cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 0 cstrike/addons/amxmodx/scripting/sklep_sms.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma | 0 .../addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma | 0 .../addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma | 0 .../addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma | 0 cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma | 0 18 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/include/colorchat.inc mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/include/curl.inc mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/include/curl_consts.inc mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/include/shop_sms.inc mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklep_sms.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma mode change 100644 => 100755 cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma diff --git a/cstrike/addons/amxmodx/scripting/include/colorchat.inc b/cstrike/addons/amxmodx/scripting/include/colorchat.inc old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/include/curl.inc b/cstrike/addons/amxmodx/scripting/include/curl.inc old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/include/curl_consts.inc b/cstrike/addons/amxmodx/scripting/include/curl_consts.inc old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc b/cstrike/addons/amxmodx/scripting/include/custom_color_chat.inc old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma old mode 100644 new mode 100755 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma old mode 100644 new mode 100755 From 93f9e5372b539db8a3616f6a6a8bba36006f1fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Mar 2020 14:59:04 +0100 Subject: [PATCH 085/124] Do not store shop url and token --- .../addons/amxmodx/scripting/sklep_sms.sma | 107 +++++++++++------- 1 file changed, 64 insertions(+), 43 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 178f09b..8eed8ad 100755 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -44,7 +44,7 @@ const MAX_NAME = 32; const MAX_SID = 34; const MAX_IP = 15; const MAX_PORT = 8; -const MAX_TOKEN = 32; +const MAX_SHOP_TOKEN = 32; const MAX_FULL_IP = MAX_IP + MAX_PORT + 1; // ip + semicolon + port const MAX_URL_HOST = 128; const MAX_URL_PATH = 384; @@ -69,7 +69,7 @@ new const VAULT_PLAYER_FLAGS_KEY[] = "player_flags"; new forwrdClientAccess; // CVARs -new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_shop_url, cvar_token, cvar_server_ip, cvar_silent_command; +new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_shop_url, cvar_token, cvar_silent_command; new show_info; new Trie:g_shopCommands, Trie:g_serviceListCommands, @@ -84,9 +84,7 @@ new g_serverIp[MAX_IP + 1], // Server config new g_currency[16], - g_contact[MAX_CONTACT + 1], - g_shopUrl[MAX_URL + 1], - g_serverToken[MAX_TOKEN + 1], + g_contact[MAX_CONTACT + 1], g_smsText[MAX_SMS_TEXT + 1], Float:g_vat, Trie:g_accountsSteamIds, @@ -136,7 +134,7 @@ new Array:g_playersFlags; new bool:g_playersLoaded = false; new g_lastReassign; -// Dodatkowe zmienne +// Purchase additional variables new which_service[33], which_price[33], b_passwords[33][MAX_PASSWORD + 1], @@ -179,7 +177,6 @@ public plugin_precache() cvar_show_info = register_cvar("sklepsms_info", "1"); cvar_shop_url = register_cvar("sklepsms_url", ""); cvar_token = register_cvar("sklepsms_token", ""); - cvar_server_ip = register_cvar("sklepsms_server_ip", ""); cvar_silent_command = register_cvar("sklepsms_ciche_komendy", "0"); // Read config @@ -238,19 +235,23 @@ public plugin_cfg() // File was not created (probably due to invalid permissions) _invalidPath(0, g_configPath); } + + new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1]; + + _getShopToken(shop_token, charsmax(shop_token)); + _getShopUrl(shop_url, charsmax(shop_url)); + + if (!strlen(shop_url) || !strlen(shop_token)) { + _errorNoShopCreds(); + return; + } _loadCvars(); // Get server ip - new fullIp[MAX_FULL_IP]; - get_pcvar_string(cvar_server_ip, fullIp, charsmax(fullIp)); - - // No IP in CVARs - if (!strlen(fullIp)) { - get_user_ip(0, fullIp, charsmax(fullIp), false); - } - - split(fullIp, g_serverIp, charsmax(g_serverIp), g_serverPort, charsmax(g_serverPort), ":"); + new full_ip[MAX_FULL_IP]; + get_user_ip(0, full_ip, charsmax(full_ip), false); + split(full_ip, g_serverIp, charsmax(g_serverIp), g_serverPort, charsmax(g_serverPort), ":"); _loadServerConfig(); _restorePlayerFlagsFromVault(); @@ -267,19 +268,6 @@ public plugin_end() _loadCvars() { - get_pcvar_string(cvar_shop_url, g_shopUrl, charsmax(g_shopUrl)); - get_pcvar_string(cvar_token, g_serverToken, charsmax(g_serverToken)); - - // Remove trailing slash - if (strlen(g_shopUrl) && g_shopUrl[strlen(g_shopUrl) - 1] == '/') { - g_shopUrl[strlen(g_shopUrl) - 1] = '^0'; - } - - if (!strlen(g_shopUrl) || !strlen(g_serverToken)) { - _errorNoShopCreds(); - return; - } - get_pcvar_string(cvar_sklep, g_szTemp, charsmax(g_szTemp)); _explodeCommands(g_szTemp, g_shopCommands); @@ -348,11 +336,14 @@ public sayHook(id) _loadServerConfig() { - new url[MAX_URL + 1]; + new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1], url[MAX_URL + 1]; new curl_slist: headers; + _getShopUrl(shop_url, charsmax(shop_url)); + _getShopToken(shop_token, charsmax(shop_token)); + headers = curl_slist_append(headers, "Accept: application/assoc"); - formatex(url, charsmax(url), "%s/api/server/config?token=%s&version=%s&player_flags=1&language=polish", g_shopUrl, g_serverToken, VERSION); + formatex(url, charsmax(url), "%s/api/server/config?token=%s&version=%s&player_flags=1&language=polish", shop_url, shop_token, VERSION); if (!makeRequest("GET", url, headers, "", "onLoadServerConfigResponse")) { _errorConfigFailed(999); @@ -600,11 +591,14 @@ _stopPlugins() public loadPlayersFlags() { - new url[MAX_URL + 1]; + new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1], url[MAX_URL + 1]; new curl_slist: headers; + _getShopUrl(shop_url, charsmax(shop_url)); + _getShopToken(shop_token, charsmax(shop_token)); + headers = curl_slist_append(headers, "Accept: application/assoc"); - formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=polish", g_shopUrl, g_serverToken); + formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=polish", shop_url, shop_token); makeRequest("GET", url, headers, "", "onLoadPlayersFlagsResponse"); } @@ -1338,16 +1332,20 @@ _purchaseService(id, const method[], const sms_code[] = "") { new curl_slist: headers; { new service[e_Service], auth_data[32 + 1], steam_id[32 + 1], price[e_Price], ip[MAX_IP + 1]; - new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_steam_id[64 + 1], - u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; + new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; - new sign[34], sign_body[1 + charsmax(auth_data) + MAX_CODE + charsmax(g_serverToken) + 1]; + new sign[34], sign_body[1 + charsmax(auth_data) + MAX_CODE + MAX_SHOP_TOKEN + 1]; new header[MAX_HEADER + 1]; - // Pobieramy dane o usludze + new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1]; + + _getShopUrl(shop_url, charsmax(shop_url)); + _getShopToken(shop_token, charsmax(shop_token)); + + // Get service's data ArrayGetArray(g_services, which_service[id], service); - // Pobieramy dane gracza Nick / IP / SID + // Get player's auth data switch (b_types[id]) { case TYPE_IP: get_user_ip(id, auth_data, charsmax(auth_data), true); case TYPE_SID: get_user_authid(id, auth_data, charsmax(auth_data)); @@ -1367,12 +1365,11 @@ _purchaseService(id, const method[], const sms_code[] = "") { StringURLEncode(auth_data, u_auth_data, charsmax(u_auth_data)); StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); - StringURLEncode(steam_id, u_steam_id, charsmax(u_steam_id)); // Calculate body sign formatex(sign_body, charsmax(sign_body), "%d#%s#%s#%s", - b_types[id], auth_data, sms_code, g_serverToken + b_types[id], auth_data, sms_code, shop_token ); vc_md5(sign_body, sign); @@ -1385,7 +1382,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { sign, u_service_id, b_types[id], u_auth_data, u_password, method, u_sms_code, price[pID], ip ); - formatex(url, charsmax(url), "%s/api/server/purchase?token=%s&language=polish", g_shopUrl, g_serverToken); + formatex(url, charsmax(url), "%s/api/server/purchase?token=%s&language=polish", shop_url, shop_token); } if (!makeRequest("POST", url, headers, body, "onPurchaseServiceResponse", id)) { @@ -1516,14 +1513,17 @@ _showPlayerServices(id) StringURLEncode(ip, escaped_ip, charsmax(escaped_ip)); StringURLEncode(steam_id, escaped_steam_id, charsmax(escaped_steam_id)); - new url[MAX_URL + 1]; + new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1], url[MAX_URL + 1]; new curl_slist: headers; + _getShopUrl(shop_url, charsmax(shop_url)); + _getShopToken(shop_token, charsmax(shop_token)); + headers = curl_slist_append(headers, "Accept: application/assoc"); formatex( url, charsmax(url), "%s/api/server/user_services?token=%s&nick=%s&ip=%s&steam_id=%s&language=polish", - g_shopUrl, g_serverToken, escaped_name, escaped_ip, escaped_steam_id + shop_url, shop_token, escaped_name, escaped_ip, escaped_steam_id ); if (makeRequest("GET", url, headers, "", "onShowPlayerServicesResponse", id)) { @@ -1538,6 +1538,10 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, if (!is_user_connected(playerId)) { return; } + + if (task_exists(TASK_DISPLAY_LOADING + playerId)) { + remove_task(TASK_DISPLAY_LOADING + playerId); + } if (code != CURLE_OK) { client_print_color(playerId, Red, "^4[%s] ^1Niestety, nie udalo sie uzyskac informacji o Twoich uslugach. Error: %d", PREFIX, code); @@ -1930,6 +1934,23 @@ _getShopCommand(output[], len) #endif } +_getShopToken(output[], len) +{ + get_pcvar_string(cvar_token, output, len); + trim(output); +} + +_getShopUrl(output[], len) +{ + get_pcvar_string(cvar_shop_url, output, len); + trim(output); + + // Remove trailing slash + if (strlen(output) && output[strlen(output) - 1] == '/') { + output[strlen(output)-1] = 0; + } +} + /** * https://amxx.pl/topic/43223-explode/ */ From fb9dcbfc12b5536327c2ade86cd36e5bf722fa34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Mar 2020 15:19:44 +0100 Subject: [PATCH 086/124] Replace endline (#18) --- .../addons/amxmodx/scripting/amxbans_core.sma | 1580 ++++++++--------- .../scripting/sklepsms_usluga_bf2_odznaki.sma | 278 +-- .../scripting/sklepsms_usluga_cod_exp.sma | 92 +- .../sklepsms_usluga_dodatkowe_flagi.sma | 56 +- .../scripting/sklepsms_usluga_gxm_bm.sma | 70 +- .../scripting/sklepsms_usluga_gxm_exp.sma | 70 +- .../sklepsms_usluga_rezerwacja_nicku.sma | 26 +- .../sklepsms_usluga_rezerwacja_slota.sma | 56 +- .../amxmodx/scripting/sklepsms_usluga_vip.sma | 56 +- .../scripting/sklepsms_usluga_vippro.sma | 56 +- .../scripting/sklepsms_usluga_zp_ap.sma | 70 +- 11 files changed, 1205 insertions(+), 1205 deletions(-) mode change 100755 => 100644 cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma diff --git a/cstrike/addons/amxmodx/scripting/amxbans_core.sma b/cstrike/addons/amxmodx/scripting/amxbans_core.sma index 1597953..59824d3 100755 --- a/cstrike/addons/amxmodx/scripting/amxbans_core.sma +++ b/cstrike/addons/amxmodx/scripting/amxbans_core.sma @@ -1,790 +1,790 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * - * AMX Bans - http://www.amxbans.net - * Plugin - Core - * - * Copyright (C) 2014 Ryan "YamiKaitou" LeBlanc - * Copyright (C) 2009, 2010 Thomas Kurz - * Forked from "Admin Base (SQL)" in AMX Mod X (version 1.8.1) - * - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#define PLUGINNAME "AMXBans Core" -#define PLUGINAUTHOR "YamiKaitou edited by SeeK" -new const PLUGINVERSION[] = "2.0"; - -#include -#include -#include - -new AdminCount; - -#define ADMIN_LOOKUP (1<<0) -#define ADMIN_NORMAL (1<<1) -#define ADMIN_STEAM (1<<2) -#define ADMIN_IPADDR (1<<3) -#define ADMIN_NAME (1<<4) - -new g_cmdLoopback[16] -new bool:g_CaseSensitiveName[33]; - -// pcvars -new amx_mode; -new amx_password_field; -new amx_default_access; - -//amxbans -new pcvarip -new pcvarprefix -new pcvaradminsfile -new g_ServerAddr[100] -new g_dbPrefix[32] -new g_AdminsFromFile -new g_szAdminNick[33][32] -new g_iAdminUseStaticBantime[33] -new Array:g_AdminNick -new Array:g_AdminUseStaticBantime - -//multi forward handles -new bool:g_isAdmin[33] -enum MFHANDLE_TYPES { - Amxbans_Sql_Initialized=0, - Admin_Connect, - Admin_Disconnect -} -new MFHandle[MFHANDLE_TYPES] - -new Handle:info - -public plugin_init() -{ - register_plugin(PLUGINNAME, PLUGINVERSION, PLUGINAUTHOR); - - register_dictionary("admin.txt") - register_dictionary("common.txt") - amx_mode=register_cvar("amx_mode", "1") - amx_password_field=register_cvar("amx_password_field", "_pw") - amx_default_access=register_cvar("amx_default_access", "") - - register_cvar("amx_vote_ratio", "0.02") - register_cvar("amx_vote_time", "10") - register_cvar("amx_vote_answers", "1") - register_cvar("amx_vote_delay", "60") - register_cvar("amx_last_voting", "0") - register_cvar("amx_show_activity", "2") - register_cvar("amx_votekick_ratio", "0.40") - register_cvar("amx_voteban_ratio", "0.40") - register_cvar("amx_votemap_ratio", "0.40") - - set_cvar_float("amx_last_voting", 0.0) - - - register_srvcmd("amx_sqladmins", "adminSql") - register_cvar("amx_sql_table", "admins") -// amxbans - pcvarip=register_cvar("amxbans_server_address","") - pcvarprefix=register_cvar("amx_sql_prefix", "amx") - pcvaradminsfile=register_cvar("amxbans_use_admins_file","0") - - g_AdminNick=ArrayCreate(32,32) - g_AdminUseStaticBantime=ArrayCreate(1,32) -// - register_cvar("amx_sql_host", "127.0.0.1") - register_cvar("amx_sql_user", "root") - register_cvar("amx_sql_pass", "") - register_cvar("amx_sql_db", "amx") - register_cvar("amx_sql_type", "mysql") - - register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG) - //register_concmd("amx_addadmin", "addadminfn", ADMIN_RCON, " [password] [authtype] - add specified player as an admin to users.ini") - - format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z')) - - register_clcmd(g_cmdLoopback, "ackSignal") - - remove_user_flags(0, read_flags("z")) // Remove 'user' flag from server rights - - new configsDir[64] - get_configsdir(configsDir, 63) - - server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file - server_cmd("exec %s/sql.cfg", configsDir) - //server_cmd("exec %s/amxbans.cfg", configsDir) - -} - -public client_connect(id) -{ - g_CaseSensitiveName[id] = false; -} - -public plugin_cfg() -{ - //fixx to be sure cfgs are loaded - create_forwards() - set_task(0.1,"delayed_plugin_cfg") -} - -create_forwards() -{ - MFHandle[Amxbans_Sql_Initialized]=CreateMultiForward("amxbans_sql_initialized",ET_IGNORE,FP_CELL,FP_STRING) - MFHandle[Admin_Connect]=CreateMultiForward("amxbans_admin_connect",ET_IGNORE,FP_CELL) - MFHandle[Admin_Disconnect]=CreateMultiForward("amxbans_admin_disconnect",ET_IGNORE,FP_CELL) -} - -public delayed_plugin_cfg() -{ - //check if amxbans plugins are the first plugins and default admin plugins are disabled - //added for admins who cant read the docs - if(find_plugin_byfile("admin.amxx") != INVALID_PLUGIN_ID) - { - log_amx("[AMXBans] WARNING: admin.amxx plugin running! stopped.") - pause("acd","admin.amxx") - } - if(find_plugin_byfile("admin_sql.amxx") != INVALID_PLUGIN_ID) - { - log_amx("[AMXBans] WARNING: admin_sql.amxx plugin running! stopped.") - pause("acd","admin_sql.amxx") - } - //if(find_plugin_byfile("amxbans_core.amxx") != 0) log_amx("[AMXBans] WARNING: amxbans_core.amxx should be the fist entry in your plugins.ini!") - //if(find_plugin_byfile("amxbans_main.amxx") != 1) log_amx("[AMXBans] WARNING: amxbans_main.amxx should be the second entry in your plugins.ini!") - - get_pcvar_string(pcvarprefix,g_dbPrefix,charsmax(g_dbPrefix)) - get_pcvar_string(pcvarip,g_ServerAddr,charsmax(g_ServerAddr)) - g_AdminsFromFile=get_pcvar_num(pcvaradminsfile) - - if(strlen(g_ServerAddr) < 9) - { - new ip[32] - get_user_ip(0,ip,charsmax(ip)) - formatex(g_ServerAddr,charsmax(g_ServerAddr),"%s",ip) - } - if(get_cvar_num("amxbans_debug") >= 1) server_print("[AMXBans] plugin_cfg: ip %s / prefix %s",g_ServerAddr,g_dbPrefix) - - server_cmd("amx_sqladmins") - server_exec(); - - set_task(6.1, "delayed_load") -} - -public delayed_load() -{ - new configFile[128], curMap[64], configDir[128] - - get_configsdir(configDir, charsmax(configDir)) - get_mapname(curMap, charsmax(curMap)) - - new i=0; - - while (curMap[i] != '_' && curMap[i++] != '^0') {} - - if (curMap[i]=='_') - { - // this map has a prefix - curMap[i]='^0'; - formatex(configFile, charsmax(configFile), "%s/maps/prefix_%s.cfg", configDir, curMap); - - if (file_exists(configFile)) - { - server_cmd("exec %s", configFile); - } - } - - get_mapname(curMap, charsmax(curMap)) - - formatex(configFile, charsmax(configFile), "%s/maps/%s.cfg", configDir, curMap) - - if (file_exists(configFile)) - { - server_cmd("exec %s", configFile) - } -} - -loadSettings(szFilename[]) -{ - new File=fopen(szFilename,"r"); - - if (File) - { - new Text[512]; - new Flags[33]; - new Access[33] - new AuthData[44]; - new Password[33]; - new Name[34]; - new Static[2]; - - while (!feof(File)) - { - fgets(File,Text,charsmax(Text)); - - trim(Text); - - // comment - if (Text[0]==';') - { - continue; - } - - Flags[0]=0; - Access[0]=0; - AuthData[0]=0; - Password[0]=0; - Name[0] = 0; - Static[0] = 0; - - // not enough parameters - if (parse(Text, AuthData, charsmax(AuthData), Password, charsmax(Password), Access, charsmax(Access), Flags, charsmax(Flags), Name, charsmax(Name), Static, sizeof Static) < 2) - { - continue; - } - - admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); - ArrayPushString(g_AdminNick, Name); - ArrayPushCell(g_AdminUseStaticBantime, str_to_num(Static)); - - AdminCount++; - } - - fclose(File); - } - - if (AdminCount == 1) - { - server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMIN"); - } - else - { - server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount); - } - - return 1; -} - -public adminSql() -{ - new table[32], error[128], errno - AdminCount = 0; - admins_flush(); - - SQL_SetAffinity("mysql") - info = SQL_MakeStdTuple() - new Handle:sql = SQL_Connect(info, errno, error, 127) - - get_cvar_string("amx_sql_table", table, 31) - - //sql error or amxbans_use_admins_file == 1 - if (sql == Empty_Handle || g_AdminsFromFile > 0) - { - if(!g_AdminsFromFile) server_print("[AMXBans] %L", LANG_SERVER, "SQL_CANT_CON", error) - - //backup to users.ini - new configsDir[64] - - get_configsdir(configsDir, charsmax(configsDir)) - format(configsDir, charsmax(configsDir), "%s/users.ini", configsDir) - loadSettings(configsDir) // Load admins accounts - - new players[32], num, pv - new name[33] - get_players(players, num) - for (new i=0; i 1) - { - if (sql != Empty_Handle) - { - //Fix by EpicMorg: - SQL_FreeHandle(sql) - server_print("[amxbans_core.amxx] [AMXBans] SQL Connection closed.") - } - return PLUGIN_HANDLED - } - - ArrayClear(g_AdminNick) - ArrayClear(g_AdminUseStaticBantime) - - new Handle:query - -//amxbans - new pquery[1024] - - formatex(pquery,1023,"SELECT aa.steamid,aa.password,aa.access,aa.flags,aa.nickname,ads.custom_flags,ads.use_static_bantime \ - FROM %s_amxadmins as aa, %s_admins_servers as ads, %s_serverinfo as si \ - WHERE ((ads.admin_id=aa.id) AND (ads.server_id=si.id) AND \ - ((aa.days=0) OR (aa.expired>UNIX_TIMESTAMP(NOW()))) AND (si.address='%s'))", g_dbPrefix, g_dbPrefix, g_dbPrefix, g_ServerAddr) - - query = SQL_PrepareQuery(sql,pquery) - - SQL_Execute(query) -// - - if(SQL_NumRows(query)) - { - /* do this incase people change the query order and forget to modify below */ - new qcolAuth = SQL_FieldNameToNum(query, "steamid") - new qcolPass = SQL_FieldNameToNum(query, "password") - new qcolAccess = SQL_FieldNameToNum(query, "access") - new qcolFlags = SQL_FieldNameToNum(query, "flags") - new qcolNick = SQL_FieldNameToNum(query, "nickname") - new qcolCustom = SQL_FieldNameToNum(query, "custom_flags") - new qcolStatic = SQL_FieldNameToNum(query, "use_static_bantime") - - - new AuthData[44]; - new Password[44]; - new Access[33]; - new Flags[33]; - new Nick[33]; - new Static[5] - new iStatic - - while (SQL_MoreResults(query)) - { - SQL_ReadResult(query, qcolAuth, AuthData, charsmax(AuthData)); - SQL_ReadResult(query, qcolPass, Password, charsmax(Password)); - SQL_ReadResult(query, qcolStatic, Static, charsmax(Static)); - SQL_ReadResult(query, qcolCustom, Access, charsmax(Access)); - SQL_ReadResult(query, qcolNick, Nick, charsmax(Nick)); - SQL_ReadResult(query, qcolFlags, Flags, charsmax(Flags)); - - //if custom access not set get the global - trim(Access) - if(equal(Access,"")) SQL_ReadResult(query, qcolAccess, Access, charsmax(Access)); - - admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); - - //save nick - ArrayPushString(g_AdminNick,Nick) - - //save static bantime - iStatic=1 - if(equal(Static,"no")) iStatic=0 - ArrayPushCell(g_AdminUseStaticBantime,iStatic) - - ++AdminCount; - SQL_NextRow(query) - } - } - - if (AdminCount == 1) - { - server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMIN") - } - else - { - server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount) - } - - SQL_FreeHandle(query) - SQL_FreeHandle(sql) - - new players[32], num, pv - new name[33] - get_players(players, num) - for (new i=0; i<%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", - name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) - } - else - { - new password3[33], md5_password[34], md5_password2[34]; - admins_lookup(index,AdminProp_Password,password3,charsmax(password3)); - - md5(password,md5_password); - md5(password2,md5_password2); - - //log_amx("%s %s %s %s %s",password,md5_password,password2,md5_password2,password3); - if ( equal(password, password3) || equal(md5_password, password3) || equal(password2, password3) || equal(md5_password2, password3) ) - { - result |= 12 - set_user_flags(id, Access) - - new sflags[32] - get_flags(Access, sflags, 31) - - new ret - if(!g_isAdmin[id]) ExecuteForward(MFHandle[Admin_Connect],ret,id) - g_isAdmin[id] = true - - log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", - name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) - } - else - { - result |= 1 - - if (Flags & FLAG_KICK) - { - result |= 2 - g_isAdmin[id] = false - log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", - name, get_user_userid(id), authid, AuthData, ip) - } - } - } - } - else if (get_pcvar_num(amx_mode) == 2) - { - result |= 2 - } - else - { - new defaccess[32] - - get_pcvar_string(amx_default_access, defaccess, 31) - - if (!strlen(defaccess)) - { - copy(defaccess, 32, "z") - } - - new idefaccess = read_flags(defaccess) - - if (idefaccess) - { - result |= 8 - set_user_flags(id, idefaccess) - } - } - - return result; -} - -accessUser(id, name[] = "") -{ - remove_user_flags(id) - - new userip[32], userauthid[32], password[32], password2[33], passfield[32], username[32] - - get_user_ip(id, userip, 31, 1) - get_user_authid(id, userauthid, 31) - - if (name[0]) - { - copy(username, 31, name) - } - else - { - get_user_name(id, username, 31) - } - - get_pcvar_string(amx_password_field, passfield, 31) - get_user_info(id, passfield, password, 31) - get_user_info(id, "_ss", password2, charsmax(password2)) - - new result = getAccess(id, username, userauthid, userip, password, password2) - - if (result & 1) - { - client_cmd(id, "echo ^"* %L^"", id, "INV_PAS") - } - - if (result & 2) - { - client_cmd(id, "%s", g_cmdLoopback) - return PLUGIN_HANDLED - } - - if (result & 4) - { - client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC") - } - - if (result & 8) - { - client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET") - } - - return PLUGIN_CONTINUE -} - -public client_infochanged(id) -{ - if (!is_user_connected(id) || !get_pcvar_num(amx_mode)) - { - return PLUGIN_CONTINUE - } - - new newname[32], oldname[32] - - get_user_name(id, oldname, 31) - get_user_info(id, "name", newname, 31) - - if (g_CaseSensitiveName[id]) - { - if (!equal(newname, oldname)) - { - accessUser(id, newname) - } - } - else - { - if (!equali(newname, oldname)) - { - accessUser(id, newname) - } - } - return PLUGIN_CONTINUE -} - -public client_disconnect(id) -{ - if(g_isAdmin[id]) - { - new ret - ExecuteForward(MFHandle[Admin_Disconnect],ret,id) - } - g_isAdmin[id]=false -} - -public ackSignal(id) -{ - server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY") - return PLUGIN_HANDLED -} - -public client_authorized(id) - return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE - -public client_putinserver(id) -{ - if (!is_dedicated_server() && id == 1) - return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE - - return PLUGIN_CONTINUE -} - -//natives -public plugin_natives() -{ - register_library("AMXBansCore") - - register_native("amxbans_get_db_prefix","native_amxbans_get_prefix") - register_native("amxbans_get_admin_nick","native_amxbans_get_nick") - register_native("amxbans_get_static_bantime","native_amxbans_static_bantime") -} - -public native_amxbans_get_prefix() -{ - new len= get_param(2) - set_array(1,g_dbPrefix,len) -} - -public native_amxbans_get_nick() -{ - - new id = get_param(1) - new len= get_param(3) - - set_array(2,g_szAdminNick[id],len) -} - -public native_amxbans_static_bantime() -{ - new id = get_param(1) - if(get_cvar_num("amxbans_debug") >= 3) log_amx("[AMXBans Core] Native static bantime: id: %d | result: %d",id,g_iAdminUseStaticBantime[id]) - return g_iAdminUseStaticBantime[id] -} +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * + * AMX Bans - http://www.amxbans.net + * Plugin - Core + * + * Copyright (C) 2014 Ryan "YamiKaitou" LeBlanc + * Copyright (C) 2009, 2010 Thomas Kurz + * Forked from "Admin Base (SQL)" in AMX Mod X (version 1.8.1) + * + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of this program with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#define PLUGINNAME "AMXBans Core" +#define PLUGINAUTHOR "YamiKaitou edited by SeeK" +new const PLUGINVERSION[] = "2.0"; + +#include +#include +#include + +new AdminCount; + +#define ADMIN_LOOKUP (1<<0) +#define ADMIN_NORMAL (1<<1) +#define ADMIN_STEAM (1<<2) +#define ADMIN_IPADDR (1<<3) +#define ADMIN_NAME (1<<4) + +new g_cmdLoopback[16] +new bool:g_CaseSensitiveName[33]; + +// pcvars +new amx_mode; +new amx_password_field; +new amx_default_access; + +//amxbans +new pcvarip +new pcvarprefix +new pcvaradminsfile +new g_ServerAddr[100] +new g_dbPrefix[32] +new g_AdminsFromFile +new g_szAdminNick[33][32] +new g_iAdminUseStaticBantime[33] +new Array:g_AdminNick +new Array:g_AdminUseStaticBantime + +//multi forward handles +new bool:g_isAdmin[33] +enum MFHANDLE_TYPES { + Amxbans_Sql_Initialized=0, + Admin_Connect, + Admin_Disconnect +} +new MFHandle[MFHANDLE_TYPES] + +new Handle:info + +public plugin_init() +{ + register_plugin(PLUGINNAME, PLUGINVERSION, PLUGINAUTHOR); + + register_dictionary("admin.txt") + register_dictionary("common.txt") + amx_mode=register_cvar("amx_mode", "1") + amx_password_field=register_cvar("amx_password_field", "_pw") + amx_default_access=register_cvar("amx_default_access", "") + + register_cvar("amx_vote_ratio", "0.02") + register_cvar("amx_vote_time", "10") + register_cvar("amx_vote_answers", "1") + register_cvar("amx_vote_delay", "60") + register_cvar("amx_last_voting", "0") + register_cvar("amx_show_activity", "2") + register_cvar("amx_votekick_ratio", "0.40") + register_cvar("amx_voteban_ratio", "0.40") + register_cvar("amx_votemap_ratio", "0.40") + + set_cvar_float("amx_last_voting", 0.0) + + + register_srvcmd("amx_sqladmins", "adminSql") + register_cvar("amx_sql_table", "admins") +// amxbans + pcvarip=register_cvar("amxbans_server_address","") + pcvarprefix=register_cvar("amx_sql_prefix", "amx") + pcvaradminsfile=register_cvar("amxbans_use_admins_file","0") + + g_AdminNick=ArrayCreate(32,32) + g_AdminUseStaticBantime=ArrayCreate(1,32) +// + register_cvar("amx_sql_host", "127.0.0.1") + register_cvar("amx_sql_user", "root") + register_cvar("amx_sql_pass", "") + register_cvar("amx_sql_db", "amx") + register_cvar("amx_sql_type", "mysql") + + register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG) + //register_concmd("amx_addadmin", "addadminfn", ADMIN_RCON, " [password] [authtype] - add specified player as an admin to users.ini") + + format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z')) + + register_clcmd(g_cmdLoopback, "ackSignal") + + remove_user_flags(0, read_flags("z")) // Remove 'user' flag from server rights + + new configsDir[64] + get_configsdir(configsDir, 63) + + server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file + server_cmd("exec %s/sql.cfg", configsDir) + //server_cmd("exec %s/amxbans.cfg", configsDir) + +} + +public client_connect(id) +{ + g_CaseSensitiveName[id] = false; +} + +public plugin_cfg() +{ + //fixx to be sure cfgs are loaded + create_forwards() + set_task(0.1,"delayed_plugin_cfg") +} + +create_forwards() +{ + MFHandle[Amxbans_Sql_Initialized]=CreateMultiForward("amxbans_sql_initialized",ET_IGNORE,FP_CELL,FP_STRING) + MFHandle[Admin_Connect]=CreateMultiForward("amxbans_admin_connect",ET_IGNORE,FP_CELL) + MFHandle[Admin_Disconnect]=CreateMultiForward("amxbans_admin_disconnect",ET_IGNORE,FP_CELL) +} + +public delayed_plugin_cfg() +{ + //check if amxbans plugins are the first plugins and default admin plugins are disabled + //added for admins who cant read the docs + if(find_plugin_byfile("admin.amxx") != INVALID_PLUGIN_ID) + { + log_amx("[AMXBans] WARNING: admin.amxx plugin running! stopped.") + pause("acd","admin.amxx") + } + if(find_plugin_byfile("admin_sql.amxx") != INVALID_PLUGIN_ID) + { + log_amx("[AMXBans] WARNING: admin_sql.amxx plugin running! stopped.") + pause("acd","admin_sql.amxx") + } + //if(find_plugin_byfile("amxbans_core.amxx") != 0) log_amx("[AMXBans] WARNING: amxbans_core.amxx should be the fist entry in your plugins.ini!") + //if(find_plugin_byfile("amxbans_main.amxx") != 1) log_amx("[AMXBans] WARNING: amxbans_main.amxx should be the second entry in your plugins.ini!") + + get_pcvar_string(pcvarprefix,g_dbPrefix,charsmax(g_dbPrefix)) + get_pcvar_string(pcvarip,g_ServerAddr,charsmax(g_ServerAddr)) + g_AdminsFromFile=get_pcvar_num(pcvaradminsfile) + + if(strlen(g_ServerAddr) < 9) + { + new ip[32] + get_user_ip(0,ip,charsmax(ip)) + formatex(g_ServerAddr,charsmax(g_ServerAddr),"%s",ip) + } + if(get_cvar_num("amxbans_debug") >= 1) server_print("[AMXBans] plugin_cfg: ip %s / prefix %s",g_ServerAddr,g_dbPrefix) + + server_cmd("amx_sqladmins") + server_exec(); + + set_task(6.1, "delayed_load") +} + +public delayed_load() +{ + new configFile[128], curMap[64], configDir[128] + + get_configsdir(configDir, charsmax(configDir)) + get_mapname(curMap, charsmax(curMap)) + + new i=0; + + while (curMap[i] != '_' && curMap[i++] != '^0') {} + + if (curMap[i]=='_') + { + // this map has a prefix + curMap[i]='^0'; + formatex(configFile, charsmax(configFile), "%s/maps/prefix_%s.cfg", configDir, curMap); + + if (file_exists(configFile)) + { + server_cmd("exec %s", configFile); + } + } + + get_mapname(curMap, charsmax(curMap)) + + formatex(configFile, charsmax(configFile), "%s/maps/%s.cfg", configDir, curMap) + + if (file_exists(configFile)) + { + server_cmd("exec %s", configFile) + } +} + +loadSettings(szFilename[]) +{ + new File=fopen(szFilename,"r"); + + if (File) + { + new Text[512]; + new Flags[33]; + new Access[33] + new AuthData[44]; + new Password[33]; + new Name[34]; + new Static[2]; + + while (!feof(File)) + { + fgets(File,Text,charsmax(Text)); + + trim(Text); + + // comment + if (Text[0]==';') + { + continue; + } + + Flags[0]=0; + Access[0]=0; + AuthData[0]=0; + Password[0]=0; + Name[0] = 0; + Static[0] = 0; + + // not enough parameters + if (parse(Text, AuthData, charsmax(AuthData), Password, charsmax(Password), Access, charsmax(Access), Flags, charsmax(Flags), Name, charsmax(Name), Static, sizeof Static) < 2) + { + continue; + } + + admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); + ArrayPushString(g_AdminNick, Name); + ArrayPushCell(g_AdminUseStaticBantime, str_to_num(Static)); + + AdminCount++; + } + + fclose(File); + } + + if (AdminCount == 1) + { + server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMIN"); + } + else + { + server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount); + } + + return 1; +} + +public adminSql() +{ + new table[32], error[128], errno + AdminCount = 0; + admins_flush(); + + SQL_SetAffinity("mysql") + info = SQL_MakeStdTuple() + new Handle:sql = SQL_Connect(info, errno, error, 127) + + get_cvar_string("amx_sql_table", table, 31) + + //sql error or amxbans_use_admins_file == 1 + if (sql == Empty_Handle || g_AdminsFromFile > 0) + { + if(!g_AdminsFromFile) server_print("[AMXBans] %L", LANG_SERVER, "SQL_CANT_CON", error) + + //backup to users.ini + new configsDir[64] + + get_configsdir(configsDir, charsmax(configsDir)) + format(configsDir, charsmax(configsDir), "%s/users.ini", configsDir) + loadSettings(configsDir) // Load admins accounts + + new players[32], num, pv + new name[33] + get_players(players, num) + for (new i=0; i 1) + { + if (sql != Empty_Handle) + { + //Fix by EpicMorg: + SQL_FreeHandle(sql) + server_print("[amxbans_core.amxx] [AMXBans] SQL Connection closed.") + } + return PLUGIN_HANDLED + } + + ArrayClear(g_AdminNick) + ArrayClear(g_AdminUseStaticBantime) + + new Handle:query + +//amxbans + new pquery[1024] + + formatex(pquery,1023,"SELECT aa.steamid,aa.password,aa.access,aa.flags,aa.nickname,ads.custom_flags,ads.use_static_bantime \ + FROM %s_amxadmins as aa, %s_admins_servers as ads, %s_serverinfo as si \ + WHERE ((ads.admin_id=aa.id) AND (ads.server_id=si.id) AND \ + ((aa.days=0) OR (aa.expired>UNIX_TIMESTAMP(NOW()))) AND (si.address='%s'))", g_dbPrefix, g_dbPrefix, g_dbPrefix, g_ServerAddr) + + query = SQL_PrepareQuery(sql,pquery) + + SQL_Execute(query) +// + + if(SQL_NumRows(query)) + { + /* do this incase people change the query order and forget to modify below */ + new qcolAuth = SQL_FieldNameToNum(query, "steamid") + new qcolPass = SQL_FieldNameToNum(query, "password") + new qcolAccess = SQL_FieldNameToNum(query, "access") + new qcolFlags = SQL_FieldNameToNum(query, "flags") + new qcolNick = SQL_FieldNameToNum(query, "nickname") + new qcolCustom = SQL_FieldNameToNum(query, "custom_flags") + new qcolStatic = SQL_FieldNameToNum(query, "use_static_bantime") + + + new AuthData[44]; + new Password[44]; + new Access[33]; + new Flags[33]; + new Nick[33]; + new Static[5] + new iStatic + + while (SQL_MoreResults(query)) + { + SQL_ReadResult(query, qcolAuth, AuthData, charsmax(AuthData)); + SQL_ReadResult(query, qcolPass, Password, charsmax(Password)); + SQL_ReadResult(query, qcolStatic, Static, charsmax(Static)); + SQL_ReadResult(query, qcolCustom, Access, charsmax(Access)); + SQL_ReadResult(query, qcolNick, Nick, charsmax(Nick)); + SQL_ReadResult(query, qcolFlags, Flags, charsmax(Flags)); + + //if custom access not set get the global + trim(Access) + if(equal(Access,"")) SQL_ReadResult(query, qcolAccess, Access, charsmax(Access)); + + admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); + + //save nick + ArrayPushString(g_AdminNick,Nick) + + //save static bantime + iStatic=1 + if(equal(Static,"no")) iStatic=0 + ArrayPushCell(g_AdminUseStaticBantime,iStatic) + + ++AdminCount; + SQL_NextRow(query) + } + } + + if (AdminCount == 1) + { + server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMIN") + } + else + { + server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount) + } + + SQL_FreeHandle(query) + SQL_FreeHandle(sql) + + new players[32], num, pv + new name[33] + get_players(players, num) + for (new i=0; i<%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", + name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) + } + else + { + new password3[33], md5_password[34], md5_password2[34]; + admins_lookup(index,AdminProp_Password,password3,charsmax(password3)); + + md5(password,md5_password); + md5(password2,md5_password2); + + //log_amx("%s %s %s %s %s",password,md5_password,password2,md5_password2,password3); + if ( equal(password, password3) || equal(md5_password, password3) || equal(password2, password3) || equal(md5_password2, password3) ) + { + result |= 12 + set_user_flags(id, Access) + + new sflags[32] + get_flags(Access, sflags, 31) + + new ret + if(!g_isAdmin[id]) ExecuteForward(MFHandle[Admin_Connect],ret,id) + g_isAdmin[id] = true + + log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", + name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) + } + else + { + result |= 1 + + if (Flags & FLAG_KICK) + { + result |= 2 + g_isAdmin[id] = false + log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", + name, get_user_userid(id), authid, AuthData, ip) + } + } + } + } + else if (get_pcvar_num(amx_mode) == 2) + { + result |= 2 + } + else + { + new defaccess[32] + + get_pcvar_string(amx_default_access, defaccess, 31) + + if (!strlen(defaccess)) + { + copy(defaccess, 32, "z") + } + + new idefaccess = read_flags(defaccess) + + if (idefaccess) + { + result |= 8 + set_user_flags(id, idefaccess) + } + } + + return result; +} + +accessUser(id, name[] = "") +{ + remove_user_flags(id) + + new userip[32], userauthid[32], password[32], password2[33], passfield[32], username[32] + + get_user_ip(id, userip, 31, 1) + get_user_authid(id, userauthid, 31) + + if (name[0]) + { + copy(username, 31, name) + } + else + { + get_user_name(id, username, 31) + } + + get_pcvar_string(amx_password_field, passfield, 31) + get_user_info(id, passfield, password, 31) + get_user_info(id, "_ss", password2, charsmax(password2)) + + new result = getAccess(id, username, userauthid, userip, password, password2) + + if (result & 1) + { + client_cmd(id, "echo ^"* %L^"", id, "INV_PAS") + } + + if (result & 2) + { + client_cmd(id, "%s", g_cmdLoopback) + return PLUGIN_HANDLED + } + + if (result & 4) + { + client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC") + } + + if (result & 8) + { + client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET") + } + + return PLUGIN_CONTINUE +} + +public client_infochanged(id) +{ + if (!is_user_connected(id) || !get_pcvar_num(amx_mode)) + { + return PLUGIN_CONTINUE + } + + new newname[32], oldname[32] + + get_user_name(id, oldname, 31) + get_user_info(id, "name", newname, 31) + + if (g_CaseSensitiveName[id]) + { + if (!equal(newname, oldname)) + { + accessUser(id, newname) + } + } + else + { + if (!equali(newname, oldname)) + { + accessUser(id, newname) + } + } + return PLUGIN_CONTINUE +} + +public client_disconnect(id) +{ + if(g_isAdmin[id]) + { + new ret + ExecuteForward(MFHandle[Admin_Disconnect],ret,id) + } + g_isAdmin[id]=false +} + +public ackSignal(id) +{ + server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY") + return PLUGIN_HANDLED +} + +public client_authorized(id) + return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE + +public client_putinserver(id) +{ + if (!is_dedicated_server() && id == 1) + return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE + + return PLUGIN_CONTINUE +} + +//natives +public plugin_natives() +{ + register_library("AMXBansCore") + + register_native("amxbans_get_db_prefix","native_amxbans_get_prefix") + register_native("amxbans_get_admin_nick","native_amxbans_get_nick") + register_native("amxbans_get_static_bantime","native_amxbans_static_bantime") +} + +public native_amxbans_get_prefix() +{ + new len= get_param(2) + set_array(1,g_dbPrefix,len) +} + +public native_amxbans_get_nick() +{ + + new id = get_param(1) + new len= get_param(3) + + set_array(2,g_szAdminNick[id],len) +} + +public native_amxbans_static_bantime() +{ + new id = get_param(1) + if(get_cvar_num("amxbans_debug") >= 3) log_amx("[AMXBans Core] Native static bantime: id: %d | result: %d",id,g_iAdminUseStaticBantime[id]) + return g_iAdminUseStaticBantime[id] +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma old mode 100755 new mode 100644 index c458fa3..771c3e9 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma @@ -1,139 +1,139 @@ -#include -#include - -native bf2_get_maxbadges(); -native bf2_get_badge_name(badge_id, badge_level, name[], len); -native bf2_get_user_badge(index, badge_id); -native bf2_set_user_badge(index, badge_id, level); - -new const service_id[MAX_SERVICE_ID + 1] = "bf2_badge"; -#define PLUGIN "Sklep-SMS: Usluga BF2 Odznaki" -#define AUTHOR "SeeK" - -#define TASK_MENU1 1000 - -new stronaP[33], bool:wybranoP[33] -new dane[33] - -public plugin_natives() { - set_native_filter("native_filter"); -} - -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) -} - -public plugin_cfg() { - ss_register_service(service_id); -} - -public ss_service_chosen(id, amount) { - new menu = menu_create("Wybierz odznake:", "menuHandler") - new menu_callback = menu_makecallback("menuCallback"); - new nazwa[64] - for(new i = 0; i < bf2_get_maxbadges(); ++i) { - bf2_get_badge_name(i, amount, nazwa, charsmax(nazwa)) - new data[2] - data[0] = i+1 - data[1] = bf2_get_user_badge(id, i) >= amount ? 0 : 1 - - menu_additem(menu, nazwa, data, 0, menu_callback) - } - - menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); - menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - - //Zerujemy - wybranoP[id] = false - stronaP[id] = 0 - - // Dane dla taska - new data[2] - data[0] = id - data[1] = menu - - // Wyswietlamy - wyswietlMenu(data) - - return SS_STOP -} - -public menuCallback(id, menu, item) { - new data[3], iName[2]; - new zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - - return data[1] ? ITEM_ENABLED : ITEM_DISABLED - //return ITEM_ENABLED -} - -public wyswietlMenu(data[]) { - new id = data[0] - if(!is_user_connected(id)) { - menu_destroy(data[1]) - return - } - if(!wybranoP[id]) { - new menu, newmenu, page - player_menu_info(id, menu, newmenu, page) - if(newmenu != data[1]) - menu_display(id, data[1], stronaP[id]) - else - stronaP[id] = page - - set_task(0.1, "wyswietlMenu", TASK_MENU1+id, data, 2) - } -} - -public menuHandler(id, menu, item) { - if(item == MENU_EXIT) { - // Niszczymy menu - wybranoP[id] = true - menu_destroy(menu) - return - } - - if(item >= 0) { - // Wybrano odznake - wybranoP[id] = true - - new data[2], iName[2]; - new zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - - dane[id] = data[0]-1 - - // Niszczymy menu - menu_destroy(menu) - - ss_show_sms_info(id) - } -} - -public ss_service_bought(id, amount) { - new badge_id = dane[id]; - new badge_level = amount; - - if( bf2_set_user_badge(id, badge_id, badge_level) == -1 ) - return SS_ERROR; - - new szText[512]; - bf2_get_badge_name(badge_id, badge_level, szText, charsmax(szText)); - format(szText, charsmax(szText), "


    \ -

    Kupiles/as odznake: %s

    \ - W razie problemow skontaktuj sie z nami.\ -

    ", szText); - show_motd(id, szText, "Informacje dotyczace uslugi"); - - return SS_OK; -} - -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown - pause_plugin(); - return PLUGIN_HANDLED; - } - return PLUGIN_CONTINUE; -} +#include +#include + +native bf2_get_maxbadges(); +native bf2_get_badge_name(badge_id, badge_level, name[], len); +native bf2_get_user_badge(index, badge_id); +native bf2_set_user_badge(index, badge_id, level); + +new const service_id[MAX_SERVICE_ID + 1] = "bf2_badge"; +#define PLUGIN "Sklep-SMS: Usluga BF2 Odznaki" +#define AUTHOR "SeeK" + +#define TASK_MENU1 1000 + +new stronaP[33], bool:wybranoP[33] +new dane[33] + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_chosen(id, amount) { + new menu = menu_create("Wybierz odznake:", "menuHandler") + new menu_callback = menu_makecallback("menuCallback"); + new nazwa[64] + for(new i = 0; i < bf2_get_maxbadges(); ++i) { + bf2_get_badge_name(i, amount, nazwa, charsmax(nazwa)) + new data[2] + data[0] = i+1 + data[1] = bf2_get_user_badge(id, i) >= amount ? 0 : 1 + + menu_additem(menu, nazwa, data, 0, menu_callback) + } + + menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); + menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); + + //Zerujemy + wybranoP[id] = false + stronaP[id] = 0 + + // Dane dla taska + new data[2] + data[0] = id + data[1] = menu + + // Wyswietlamy + wyswietlMenu(data) + + return SS_STOP +} + +public menuCallback(id, menu, item) { + new data[3], iName[2]; + new zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); + + return data[1] ? ITEM_ENABLED : ITEM_DISABLED + //return ITEM_ENABLED +} + +public wyswietlMenu(data[]) { + new id = data[0] + if(!is_user_connected(id)) { + menu_destroy(data[1]) + return + } + if(!wybranoP[id]) { + new menu, newmenu, page + player_menu_info(id, menu, newmenu, page) + if(newmenu != data[1]) + menu_display(id, data[1], stronaP[id]) + else + stronaP[id] = page + + set_task(0.1, "wyswietlMenu", TASK_MENU1+id, data, 2) + } +} + +public menuHandler(id, menu, item) { + if(item == MENU_EXIT) { + // Niszczymy menu + wybranoP[id] = true + menu_destroy(menu) + return + } + + if(item >= 0) { + // Wybrano odznake + wybranoP[id] = true + + new data[2], iName[2]; + new zaccess, callback; + menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); + + dane[id] = data[0]-1 + + // Niszczymy menu + menu_destroy(menu) + + ss_show_sms_info(id) + } +} + +public ss_service_bought(id, amount) { + new badge_id = dane[id]; + new badge_level = amount; + + if( bf2_set_user_badge(id, badge_id, badge_level) == -1 ) + return SS_ERROR; + + new szText[512]; + bf2_get_badge_name(badge_id, badge_level, szText, charsmax(szText)); + format(szText, charsmax(szText), "


    \ +

    Kupiles/as odznake: %s

    \ + W razie problemow skontaktuj sie z nami.\ +

    ", szText); + show_motd(id, szText, "Informacje dotyczace uslugi"); + + return SS_OK; +} + +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + return PLUGIN_CONTINUE; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma index 868380d..3d3e996 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma @@ -1,46 +1,46 @@ -#include -#include -#include -native cod_get_user_class(id); -native cod_get_user_xp(id); -native cod_set_user_xp(id, wartosc); - -new const service_id[MAX_SERVICE_ID + 1] = "cod_exp"; -#define PLUGIN "Sklep-SMS: Usluga COD EXP" -#define AUTHOR "SeeK" - -public plugin_natives() { - set_native_filter("native_filter"); -} - -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) -} - -public plugin_cfg() { - ss_register_service(service_id) -} - -public ss_service_chosen(id) { - if( !cod_get_user_class(id) ) { - client_print_color(id, Red, "^4[%s] ^1Musisz ^3wybrac klase^1, aby moc zakupic EXP.", PREFIX); - return SS_STOP; - } - - return SS_OK; -} - -public ss_service_bought(id, amount) { - cod_set_user_xp(id, cod_get_user_xp(id)+amount); -} - -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} +#include +#include +#include +native cod_get_user_class(id); +native cod_get_user_xp(id); +native cod_set_user_xp(id, wartosc); + +new const service_id[MAX_SERVICE_ID + 1] = "cod_exp"; +#define PLUGIN "Sklep-SMS: Usluga COD EXP" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_chosen(id) { + if( !cod_get_user_class(id) ) { + client_print_color(id, Red, "^4[%s] ^1Musisz ^3wybrac klase^1, aby moc zakupic EXP.", PREFIX); + return SS_STOP; + } + + return SS_OK; +} + +public ss_service_bought(id, amount) { + cod_set_user_xp(id, cod_get_user_xp(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + + return PLUGIN_CONTINUE; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma index 9400f32..1fe1f34 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma @@ -1,28 +1,28 @@ -#include -#include - -new const service_id[MAX_SERVICE_ID + 1] = ""; -#define PLUGIN "Sklep-SMS: Usluga Dodatkowe Flagi" - -new szFlags[32 + 1]; - -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") -} - -public plugin_cfg() { - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) { - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} +#include +#include + +new const service_id[MAX_SERVICE_ID + 1] = ""; +#define PLUGIN "Sklep-SMS: Usluga Dodatkowe Flagi" + +new szFlags[32 + 1]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[], flags[]) { + copy(szFlags, charsmax(szFlags), flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) { + return ITEM_DISABLED; + } + + return ITEM_ENABLED; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma index fbc02c8..61e3e78 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma @@ -1,35 +1,35 @@ -#include -#include -native get_user_bm(id); -native set_user_bm(id, ilosc); - -new const service_id[MAX_SERVICE_ID + 1] = "gxm_bm"; -#define PLUGIN "Sklep-SMS: Usluga GXM BM" -#define AUTHOR "SeeK" - -public plugin_natives() { - set_native_filter("native_filter"); -} - -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) -} - -public plugin_cfg() { - ss_register_service(service_id) -} - -public ss_service_bought(id, amount) { - set_user_bm(id, get_user_bm(id)+amount); -} - -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} +#include +#include +native get_user_bm(id); +native set_user_bm(id, ilosc); + +new const service_id[MAX_SERVICE_ID + 1] = "gxm_bm"; +#define PLUGIN "Sklep-SMS: Usluga GXM BM" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_bought(id, amount) { + set_user_bm(id, get_user_bm(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + + return PLUGIN_CONTINUE; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma index 013f3e2..fc74e0e 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma @@ -1,35 +1,35 @@ -#include -#include -native get_user_xp(id); -native set_user_xp(id, ilosc); - -new const service_id[MAX_SERVICE_ID + 1] = "gxm_exp"; -#define PLUGIN "Sklep-SMS: Usluga GXM EXP" -#define AUTHOR "SeeK" - -public plugin_natives() { - set_native_filter("native_filter"); -} - -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) -} - -public plugin_cfg() { - ss_register_service(service_id) -} - -public ss_service_bought(id, amount) { - set_user_xp(id, get_user_xp(id)+amount); -} - -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} +#include +#include +native get_user_xp(id); +native set_user_xp(id, ilosc); + +new const service_id[MAX_SERVICE_ID + 1] = "gxm_exp"; +#define PLUGIN "Sklep-SMS: Usluga GXM EXP" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_bought(id, amount) { + set_user_xp(id, get_user_xp(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + + return PLUGIN_CONTINUE; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma index 61e7efa..524fcb2 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma @@ -1,13 +1,13 @@ -#include -#include - -new const service_id[MAX_SERVICE_ID + 1] = "resnick"; -#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Nicku" - -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") -} - -public plugin_cfg() { - ss_register_service(service_id); -} +#include +#include + +new const service_id[MAX_SERVICE_ID + 1] = "resnick"; +#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Nicku" + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma index 3e1d34e..2c6ea29 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma @@ -1,28 +1,28 @@ -#include -#include - -new const service_id[MAX_SERVICE_ID + 1] = "resslot"; -#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Slota" - -new szFlags[32 + 1]; - -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") -} - -public plugin_cfg() { - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) { - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} +#include +#include + +new const service_id[MAX_SERVICE_ID + 1] = "resslot"; +#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Slota" + +new szFlags[32 + 1]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[], flags[]) { + copy(szFlags, charsmax(szFlags), flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { + return ITEM_DISABLED; + } + + return ITEM_ENABLED; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma index d2e9cb5..d491a03 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma @@ -1,28 +1,28 @@ -#include -#include - -new const service_id[MAX_SERVICE_ID + 1] = "vip"; -#define PLUGIN "Sklep-SMS: Usluga VIP" - -new szFlags[32 + 1]; - -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") -} - -public plugin_cfg() { - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) { - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} +#include +#include + +new const service_id[MAX_SERVICE_ID + 1] = "vip"; +#define PLUGIN "Sklep-SMS: Usluga VIP" + +new szFlags[32 + 1]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[], flags[]) { + copy(szFlags, charsmax(szFlags), flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { + return ITEM_DISABLED; + } + + return ITEM_ENABLED; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma index bcce8a2..995aab7 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma @@ -1,28 +1,28 @@ -#include -#include - -new const service_id[MAX_SERVICE_ID + 1] = "vippro"; -#define PLUGIN "Sklep-SMS: Usluga VIP PRO" - -new szFlags[32 + 1]; - -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") -} - -public plugin_cfg() { - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) { - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} +#include +#include + +new const service_id[MAX_SERVICE_ID + 1] = "vippro"; +#define PLUGIN "Sklep-SMS: Usluga VIP PRO" + +new szFlags[32 + 1]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, "SeeK") +} + +public plugin_cfg() { + ss_register_service(service_id); +} + +public ss_service_data(name[], flags[]) { + copy(szFlags, charsmax(szFlags), flags); +} + +public ss_service_addingtolist(id) { + // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag + if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { + return ITEM_DISABLED; + } + + return ITEM_ENABLED; +} diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma index 1fda5ff..12369f6 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma @@ -1,35 +1,35 @@ -#include -#include -native zp_get_user_ammo_packs(id); -native zp_set_user_ammo_packs(id, amount); - -new const service_id[MAX_SERVICE_ID + 1] = "zp_ap"; -#define PLUGIN "Sklep-SMS: Usluga ZP AP" -#define AUTHOR "SeeK" - -public plugin_natives() { - set_native_filter("native_filter"); -} - -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) -} - -public plugin_cfg() { - ss_register_service(service_id) -} - -public ss_service_bought(id, amount) { - zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id)+amount); -} - -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} +#include +#include +native zp_get_user_ammo_packs(id); +native zp_set_user_ammo_packs(id, amount); + +new const service_id[MAX_SERVICE_ID + 1] = "zp_ap"; +#define PLUGIN "Sklep-SMS: Usluga ZP AP" +#define AUTHOR "SeeK" + +public plugin_natives() { + set_native_filter("native_filter"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR) +} + +public plugin_cfg() { + ss_register_service(service_id) +} + +public ss_service_bought(id, amount) { + zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id)+amount); +} + +// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji +public native_filter(const native_name[], index, trap) { + if(trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + pause_plugin(); + return PLUGIN_HANDLED; + } + + return PLUGIN_CONTINUE; +} From d8ff4f1aaa92449c3aa8c57e0f04c0c32f38a5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Mar 2020 15:52:19 +0100 Subject: [PATCH 087/124] Add translation --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 5 +++++ .../amxmodx/scripting/include/shop_sms_const.inc | 2 +- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 16 ++++++---------- server/Dockerfile | 4 ++++ 4 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 cstrike/addons/amxmodx/data/lang/shopsms.txt diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt new file mode 100644 index 0000000..652943b --- /dev/null +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -0,0 +1,5 @@ +[en] +INVALID_PASSWORD = Invalid password + +[pl] +INVALID_PASSWORD = Nieprawidlowe haslo diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index d59c2ad..c8bfe1e 100755 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.10.0" +#define VERSION "3.10.1" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 8eed8ad..83858ff 100755 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -201,6 +201,8 @@ public plugin_init() { register_plugin("Sklep SMS", VERSION, "SeeK"); + register_dictionary("shopsms.txt"); + register_menucmd(register_menuid("smsDetails"), KEYS, "smsDetails_handler"); register_concmd("Podaj_Kod_Zwrotny", "onSmsCodeEntered"); register_concmd("ssnick_Podaj_Haslo", "onNickPasswordEntered"); @@ -828,14 +830,14 @@ _assignPlayerFlags(id) ) { if (player_flags[pfTYPE]&FLAG_KICK) { - server_cmd("kick #%d ^"Nieprawidlowe haslo^"", get_user_userid(id)); + server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INVALID_PASSWORD"); return; } // Do not kick the player, instead do not assign him any flags continue; } - + set_user_flags(id, player_flags[pfFLAGS]); new ret; @@ -913,7 +915,7 @@ _openShopMenu(id) } if (g_blocked) { - client_print_color(id, Red, "^4[%s] ^1Nie mozna otworzyc sklepu z powodu bledow ze sklepem. Zobacz logi.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1Wystapily bledy ze sklepem, zobacz logi.", PREFIX); } if (!ArraySize(g_services)) { @@ -922,7 +924,7 @@ _openShopMenu(id) } if (!g_licenseValidated) { - client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji lub wystapil blad w zapytaniu do bazy danych.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji.", PREFIX); return; } @@ -961,7 +963,6 @@ _openShopMenu(id) } } - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(id, menu); client_print_color(id, Red, "^4[%s] ^1W razie problemow mozesz sie z nami skontaktowac", PREFIX); @@ -1039,8 +1040,6 @@ _openPricingMenu(id, service_id) menu_additem(menu, szText, data); } - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - if (menu_items(menu) > 1) { menu_display(id, menu); } @@ -1086,8 +1085,6 @@ _openServiceTypeMenu(id) menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); menu_additem(menu, "Na SteamID", "", 0, menu_callback); - - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); new data[4]; data[0] = id; @@ -1581,7 +1578,6 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, TrieDestroy(dict); if (menu_items(menu)) { - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(playerId, menu); } else { diff --git a/server/Dockerfile b/server/Dockerfile index 59f61ff..3fb9c35 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -37,8 +37,12 @@ ADD server/files/plugins.ini /home/steam/dedicated/cstrike/addons/metamod/plugin RUN curl -sqL "${BASE_URL}" | tar -C /home/steam/dedicated/cstrike/ -zxvf - RUN curl -sqL "${CSTRIKE_URL}" | tar -C /home/steam/dedicated/cstrike/ -zxvf - +# Disable admin.amxx +RUN sed -i 's/admin.amxx.*/;admin.amxx/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini + # Add shopsms RUN sed -i '1s/^/sklep_sms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini +ADD cstrike/addons/amxmodx/data/lang/* /home/steam/dedicated/cstrike/addons/amxmodx/data/lang/ ADD cstrike/addons/amxmodx/modules/* /home/steam/dedicated/cstrike/addons/amxmodx/modules/ ADD cstrike/addons/amxmodx/configs/* /home/steam/dedicated/cstrike/addons/amxmodx/configs/ ADD cstrike/addons/amxmodx/plugins/* /home/steam/dedicated/cstrike/addons/amxmodx/plugins/ From 32284c94b91518ccd254529162c41d1784890af6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Mar 2020 16:36:04 +0100 Subject: [PATCH 088/124] ss_show_smn_info to ss_open_payment_method_menu --- cstrike/addons/amxmodx/scripting/include/shop_sms.inc | 10 +++++----- cstrike/addons/amxmodx/scripting/sklep_sms.sma | 7 ++++--- .../amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma | 11 ++++------- .../amxmodx/scripting/sklepsms_usluga_cod_te.sma | 2 +- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc index de02012..352f24f 100755 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc @@ -14,7 +14,7 @@ native ss_register_service(const service_id[]); * service_id[] - id uslugi ------------------------------*/ -native ss_show_sms_info(id); +native ss_open_payment_method_menu(id); /*------------------------------ * Kontynuuje proces zakupu po zwroceniu wartosci SS_STOP w forwardzie ss_service_chosen * --------------------------- @@ -31,7 +31,7 @@ native ss_show_service_purchase(id, const service_id[]); native ss_log(const message[], any:...); /*------------------------------ - * Dodaje informacje do logw. + * Dodaje informacje do log�w. ------------------------------*/ native bool:ss_is_steam(id); @@ -55,7 +55,7 @@ forward ss_service_addingtolist(id); /*------------------------------ * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) * w momencie dodawania uslugi do menu z uslugami. - * Funkcja powinna zwraca jedn z dwoch wartosci: + * Funkcja powinna zwracać jedną z dwóch wartosci: * ITEM_ENABLED - usluga ma byc dostepna * ITEM_DISABLED - usluga ma byc niedostepna * --------------------------- @@ -68,8 +68,8 @@ forward ss_service_chosen(id, quantity); * w momencie wybrania uslugi. * Funkcja powinna zwracac jedna z dwoch wartosci: * SS_OK - * SS_STOP - gdy chcemy na pewien czas zatrzyma proces wykupowania usugi. - * Potem musimy go wznowi za pomoca natywu ss_show_sms_info. + * SS_STOP - gdy chcemy na pewien czas zatrzymać proces wykupowania usługi. + * Potem musimy go wznowić za pomoca natywu ss_open_payment_method_menu. * --------------------------- * id - index gracza dokonujacego zakupu * quantity - wybrana ilosc ( opcja ) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 83858ff..61aa43a 100755 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -159,7 +159,7 @@ public plugin_natives() register_library("shop_sms"); register_native("ss_register_service", "native_registerService"); register_native("ss_show_service_purchase", "native_showServicePurchase"); - register_native("ss_show_sms_info", "native_displaySmsDetails"); + register_native("ss_open_payment_method_menu", "native_openPaymentMethodMenu"); register_native("ss_log", "native_addLog"); register_native("ss_is_steam", "native_is_steam"); } @@ -583,6 +583,7 @@ _stopPlugins() // Stop the plugin new plugin_name[64]; get_plugin(ArrayGetCell(service_plugins, i), plugin_name, charsmax(plugin_name)); + server_print("Stop %s", plugin_name); pause("acd", plugin_name); ArrayDeleteItem(service_ids, i); ArrayDeleteItem(service_plugins, i); @@ -2194,13 +2195,13 @@ public native_showServicePurchase(plugin, params) return SS_OK; } -public native_displaySmsDetails(plugin, params) +public native_openPaymentMethodMenu(plugin, params) { if (params != 1) { return SS_BAD_ARGS; } - _displaySmsDetails(get_param(1)); + _openPaymentMethodMenu(get_param(1)); return SS_OK; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma index 771c3e9..b647444 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma @@ -52,8 +52,7 @@ public ss_service_chosen(id, amount) { new data[2] data[0] = id data[1] = menu - - // Wyswietlamy + wyswietlMenu(data) return SS_STOP @@ -65,7 +64,6 @@ public menuCallback(id, menu, item) { menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); return data[1] ? ITEM_ENABLED : ITEM_DISABLED - //return ITEM_ENABLED } public wyswietlMenu(data[]) { @@ -103,11 +101,10 @@ public menuHandler(id, menu, item) { menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); dane[id] = data[0]-1 - - // Niszczymy menu + menu_destroy(menu) - - ss_show_sms_info(id) + + ss_open_payment_method_menu(id) } } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma index d5972a1..134be74 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma @@ -124,7 +124,7 @@ public chosen_checkSecondClass(id) { if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase // Ustawiamy klase ktora mial gracz przed zakupem cod_set_user_class(id, currentClass[id], 1); - ss_show_sms_info(id); + ss_open_payment_method_menu(id); } else if ( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy set_task(0.2, "chosen_checkSecondClass", TASK_CHECK_SECOND+id); From 4eedbfb26460442ead04989b66ba3cf47c5b5de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Mar 2020 17:00:45 +0100 Subject: [PATCH 089/124] Refactor --- .../scripting/sklepsms_usluga_bf2_odznaki.sma | 131 ++++++++++-------- .../scripting/sklepsms_usluga_cod_exp.sma | 39 ++++-- .../scripting/sklepsms_usluga_cod_te.sma | 116 +++++++++------- .../sklepsms_usluga_dodatkowe_flagi.sma | 22 +-- .../scripting/sklepsms_usluga_gxm_bm.sma | 34 +++-- .../scripting/sklepsms_usluga_gxm_exp.sma | 34 +++-- .../sklepsms_usluga_rezerwacja_nicku.sma | 11 +- .../sklepsms_usluga_rezerwacja_slota.sma | 21 +-- .../amxmodx/scripting/sklepsms_usluga_vip.sma | 21 +-- .../scripting/sklepsms_usluga_vippro.sma | 23 +-- .../scripting/sklepsms_usluga_zp_ap.sma | 33 +++-- 11 files changed, 284 insertions(+), 201 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma index b647444..cd2ac7e 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma @@ -6,114 +6,130 @@ native bf2_get_badge_name(badge_id, badge_level, name[], len); native bf2_get_user_badge(index, badge_id); native bf2_set_user_badge(index, badge_id, level); -new const service_id[MAX_SERVICE_ID + 1] = "bf2_badge"; -#define PLUGIN "Sklep-SMS: Usluga BF2 Odznaki" -#define AUTHOR "SeeK" +#pragma semicolon 1 +#define PLUGIN "Sklep-SMS: BF2 Odznaki" +#define AUTHOR "SeeK" #define TASK_MENU1 1000 -new stronaP[33], bool:wybranoP[33] -new dane[33] +new const service_id[MAX_SERVICE_ID + 1] = "bf2_badge"; + +new stronaP[33], bool:wybranoP[33]; +new dane[33]; -public plugin_natives() { +public plugin_natives() +{ set_native_filter("native_filter"); } -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) +public plugin_init() +{ + register_plugin(PLUGIN, VERSION, AUTHOR); } -public plugin_cfg() { +public plugin_cfg() +{ ss_register_service(service_id); } -public ss_service_chosen(id, amount) { - new menu = menu_create("Wybierz odznake:", "menuHandler") +public ss_service_chosen(id, amount) +{ + new menu = menu_create("Wybierz odznake:", "menuHandler"); new menu_callback = menu_makecallback("menuCallback"); - new nazwa[64] + new nazwa[64]; + for(new i = 0; i < bf2_get_maxbadges(); ++i) { - bf2_get_badge_name(i, amount, nazwa, charsmax(nazwa)) - new data[2] - data[0] = i+1 - data[1] = bf2_get_user_badge(id, i) >= amount ? 0 : 1 + bf2_get_badge_name(i, amount, nazwa, charsmax(nazwa)); + new data[2]; + data[0] = i+1; + data[1] = bf2_get_user_badge(id, i) >= amount ? 0 : 1; - menu_additem(menu, nazwa, data, 0, menu_callback) + menu_additem(menu, nazwa, data, 0, menu_callback); } menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - //Zerujemy - wybranoP[id] = false - stronaP[id] = 0 + // Reset + wybranoP[id] = false; + stronaP[id] = 0; - // Dane dla taska - new data[2] - data[0] = id - data[1] = menu + // Task data + new data[2]; + data[0] = id; + data[1] = menu; - wyswietlMenu(data) + wyswietlMenu(data); - return SS_STOP + return SS_STOP; } -public menuCallback(id, menu, item) { +public menuCallback(id, menu, item) +{ new data[3], iName[2]; new zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - return data[1] ? ITEM_ENABLED : ITEM_DISABLED + return data[1] ? ITEM_ENABLED : ITEM_DISABLED; } -public wyswietlMenu(data[]) { - new id = data[0] - if(!is_user_connected(id)) { - menu_destroy(data[1]) - return +public wyswietlMenu(data[]) +{ + new id = data[0]; + + if (!is_user_connected(id)) { + menu_destroy(data[1]); + return; } - if(!wybranoP[id]) { - new menu, newmenu, page - player_menu_info(id, menu, newmenu, page) - if(newmenu != data[1]) - menu_display(id, data[1], stronaP[id]) - else - stronaP[id] = page + + if (!wybranoP[id]) { + new menu, newmenu, page; + player_menu_info(id, menu, newmenu, page); + + if (newmenu != data[1]) { + menu_display(id, data[1], stronaP[id]); + } + else { + stronaP[id] = page; + } - set_task(0.1, "wyswietlMenu", TASK_MENU1+id, data, 2) + set_task(0.1, "wyswietlMenu", TASK_MENU1+id, data, 2); } } -public menuHandler(id, menu, item) { - if(item == MENU_EXIT) { - // Niszczymy menu - wybranoP[id] = true - menu_destroy(menu) - return +public menuHandler(id, menu, item) +{ + if (item == MENU_EXIT) { + wybranoP[id] = true; + menu_destroy(menu); + return; } - if(item >= 0) { - // Wybrano odznake - wybranoP[id] = true + if (item >= 0) { + // Badge has been selected + wybranoP[id] = true; new data[2], iName[2]; new zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - dane[id] = data[0]-1 + dane[id] = data[0] - 1; - menu_destroy(menu) + menu_destroy(menu); - ss_open_payment_method_menu(id) + ss_open_payment_method_menu(id); } } -public ss_service_bought(id, amount) { +public ss_service_bought(id, amount) +{ new badge_id = dane[id]; new badge_level = amount; - if( bf2_set_user_badge(id, badge_id, badge_level) == -1 ) + if (bf2_set_user_badge(id, badge_id, badge_level) == -1) { return SS_ERROR; + } new szText[512]; bf2_get_badge_name(badge_id, badge_level, szText, charsmax(szText)); @@ -126,9 +142,10 @@ public ss_service_bought(id, amount) { return SS_OK; } -public native_filter(const native_name[], index, trap) { +public native_filter(const native_name[], index, trap) +{ if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown + register_plugin(PLUGIN, VERSION, AUTHOR); pause_plugin(); return PLUGIN_HANDLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma index 3d3e996..dc2cb92 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma @@ -1,28 +1,36 @@ #include #include #include + native cod_get_user_class(id); native cod_get_user_xp(id); native cod_set_user_xp(id, wartosc); -new const service_id[MAX_SERVICE_ID + 1] = "cod_exp"; -#define PLUGIN "Sklep-SMS: Usluga COD EXP" +#pragma semicolon 1 + +#define PLUGIN "Sklep-SMS: COD EXP" #define AUTHOR "SeeK" -public plugin_natives() { +new const service_id[MAX_SERVICE_ID + 1] = "cod_exp"; + +public plugin_natives() +{ set_native_filter("native_filter"); } -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) +public plugin_init() +{ + register_plugin(PLUGIN, VERSION, AUTHOR); } -public plugin_cfg() { - ss_register_service(service_id) +public plugin_cfg() +{ + ss_register_service(service_id); } -public ss_service_chosen(id) { - if( !cod_get_user_class(id) ) { +public ss_service_chosen(id) +{ + if (!cod_get_user_class(id) ) { client_print_color(id, Red, "^4[%s] ^1Musisz ^3wybrac klase^1, aby moc zakupic EXP.", PREFIX); return SS_STOP; } @@ -30,14 +38,15 @@ public ss_service_chosen(id) { return SS_OK; } -public ss_service_bought(id, amount) { - cod_set_user_xp(id, cod_get_user_xp(id)+amount); +public ss_service_bought(id, amount) +{ + cod_set_user_xp(id, cod_get_user_xp(id) + amount); } -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown +public native_filter(const native_name[], index, trap) +{ + if (trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); pause_plugin(); return PLUGIN_HANDLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma index 134be74..e881598 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma @@ -1,6 +1,7 @@ #include #include #include + native cod_get_classes_num(); native cod_get_class_name(perk, Return[], len); native cod_get_user_class(id); @@ -8,87 +9,94 @@ native cod_get_user_xp(id); native cod_set_user_xp(id, wartosc); native cod_set_user_class(id, klasa, zmien=0); +#pragma semicolon 1 + +#define PLUGIN "Sklep-SMS: COD TE" +#define AUTHOR "SeeK" + #define TASK_CHECK_FIRST 1000 #define TASK_CHECK_SECOND 2000 new const service_id[MAX_SERVICE_ID + 1] = "cod_exp_transfer"; -#define PLUGIN "Sklep-SMS: Usluga COD PE" -#define AUTHOR "SeeK" new fromClass[33], toClass[33], currentClass[33], fromClassExp[33]; -public plugin_natives() { +public plugin_natives() +{ set_native_filter("native_filter"); } -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) +public plugin_init() +{ + register_plugin(PLUGIN, VERSION, AUTHOR); } -public plugin_cfg() { +public plugin_cfg() +{ ss_register_service(service_id); } -public ss_service_addingtolist(id) { - return cod_get_classes_num() >= 2 ? ITEM_ENABLED : ITEM_OFF +public ss_service_addingtolist(id) +{ + return cod_get_classes_num() >= 2 ? ITEM_ENABLED : ITEM_OFF; } -public ss_service_chosen(id) { +public ss_service_chosen(id) +{ fromClass[id] = toClass[id] = currentClass[id] = fromClassExp[id] = 0; - new menu = menu_create("Z jakiej klasy?", "fromClassMenu_handle") - for(new i = 1; i <= cod_get_classes_num(); ++i) { + new menu = menu_create("Z jakiej klasy?", "fromClassMenu_handle"); + for (new i = 1; i <= cod_get_classes_num(); ++i) { new name[64+1]; - cod_get_class_name(i, name, charsmax(name)) - - menu_additem(menu, name) + cod_get_class_name(i, name, charsmax(name)); + menu_additem(menu, name); } menu_setprop(menu, MPROP_BACKNAME, "Poprzednia"); menu_setprop(menu, MPROP_NEXTNAME, "Nastepna"); - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz") + menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_display(id, menu); return SS_STOP; } -public fromClassMenu_handle(id, menu, item) { - if(item < 0) { - // Niszczymy poprzednie menu - menu_destroy(menu) +public fromClassMenu_handle(id, menu, item) +{ + if (item < 0) { + menu_destroy(menu); return; } // +1 poniewaz klasy zaczynaja sie od id: 1 fromClass[id] = item+1; - new menu2 = menu_create("Na jaka klase?", "toClassMenu_handle") + new menu2 = menu_create("Na jaka klase?", "toClassMenu_handle"); new menu_callback = menu_makecallback("toClassMenu_callback"); - for(new i = 1; i <= cod_get_classes_num(); ++i) { - new name[64+1] - cod_get_class_name(i, name, charsmax(name)) - - menu_additem(menu2, name, "", 0, menu_callback) + + for (new i = 1; i <= cod_get_classes_num(); ++i) { + new name[64+1]; + cod_get_class_name(i, name, charsmax(name)); + menu_additem(menu2, name, "", 0, menu_callback); } menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia"); menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna"); - menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz") - - // Niszczymy poprzednie menu - menu_destroy(menu) + menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz"); + menu_destroy(menu); menu_display(id, menu2); } -public toClassMenu_callback(id, menu, item) { +public toClassMenu_callback(id, menu, item) +{ return fromClass[id] == item+1 ? ITEM_DISABLED : ITEM_ENABLED; } -public toClassMenu_handle(id, menu, item) { - if( item < 0 ) { - menu_destroy(menu) +public toClassMenu_handle(id, menu, item) +{ + if ( item < 0 ) { + menu_destroy(menu); return; } @@ -102,14 +110,15 @@ public toClassMenu_handle(id, menu, item) { // Sprawdzamy czy pierwsza klasa jest dostepna ( nie jest np. klasa VIP ) cod_set_user_class(id, fromClass[id], 1); - chosen_checkFirstClass(TASK_CHECK_FIRST+id) + chosen_checkFirstClass(TASK_CHECK_FIRST+id); } -public chosen_checkFirstClass(id) { +public chosen_checkFirstClass(id) +{ id -= TASK_CHECK_FIRST; if( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase cod_set_user_class(id, toClass[id], 1); - chosen_checkSecondClass(TASK_CHECK_SECOND+id) + chosen_checkSecondClass(TASK_CHECK_SECOND+id); } else if ( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy set_task(0.2, "chosen_checkFirstClass", TASK_CHECK_FIRST+id); @@ -119,7 +128,8 @@ public chosen_checkFirstClass(id) { } } -public chosen_checkSecondClass(id) { +public chosen_checkSecondClass(id) +{ id -= TASK_CHECK_SECOND; if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase // Ustawiamy klase ktora mial gracz przed zakupem @@ -129,12 +139,13 @@ public chosen_checkSecondClass(id) { else if ( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy set_task(0.2, "chosen_checkSecondClass", TASK_CHECK_SECOND+id); } - else if( !cod_get_user_class(id) ) { + else if ( !cod_get_user_class(id) ) { client_print_color(id, Red, "^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy na ktora chcesz przeniesc EXP.", PREFIX); } } -public ss_service_bought(id, amount) { +public ss_service_bought(id, amount) +{ // Ustawiamy pierwsza klase cod_set_user_class(id, fromClass[id], 1); @@ -142,9 +153,10 @@ public ss_service_bought(id, amount) { bought_checkFirstClass(TASK_CHECK_FIRST+id); } -public bought_checkFirstClass(id) { +public bought_checkFirstClass(id) +{ id -= TASK_CHECK_FIRST; - if( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase + if ( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase // Zapisujemy EXP pierwszej klasy fromClassExp[id] = cod_get_user_xp(id); @@ -157,16 +169,17 @@ public bought_checkFirstClass(id) { // Ustawiamy druga klase cod_set_user_class(id, toClass[id], 1); - bought_checkSecondClass(TASK_CHECK_SECOND+id) + bought_checkSecondClass(TASK_CHECK_SECOND+id); } - else if( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy + else if ( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy set_task(0.2, "bought_checkFirstClass", TASK_CHECK_FIRST+id); } } -public bought_checkSecondClass(id) { +public bought_checkSecondClass(id) +{ id -= TASK_CHECK_SECOND; - if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase + if ( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase // Ustawiamy EXP na drugiej klasie cod_set_user_xp(id, cod_get_user_xp(id)+fromClassExp[id]); @@ -176,18 +189,17 @@ public bought_checkSecondClass(id) { new name[32+1]; get_user_name(id, name, charsmax(name)); new class1[64+1]; cod_get_class_name(fromClass[id], class1, charsmax(class1)); new class2[64+1]; cod_get_class_name(toClass[id], class2, charsmax(class2)); - ss_log("Przeniesiono graczowi %s %d EXPa z klasy %s na klase %s", name, fromClassExp[id], class1, class2) + ss_log("Przeniesiono graczowi %s %d EXPa z klasy %s na klase %s", name, fromClassExp[id], class1, class2); } - else if( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy + else if ( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy set_task(0.2, "bought_checkSecondClass", TASK_CHECK_SECOND+id); } } - -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown +public native_filter(const native_name[], index, trap) +{ + if (trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); pause_plugin(); return PLUGIN_HANDLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma index 1fe1f34..47586ee 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma @@ -1,28 +1,32 @@ #include #include +#pragma semicolon 1 + new const service_id[MAX_SERVICE_ID + 1] = ""; -#define PLUGIN "Sklep-SMS: Usluga Dodatkowe Flagi" new szFlags[32 + 1]; -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") +public plugin_init() +{ + register_plugin("Sklep-SMS: Dodatkowe Flagi", VERSION, "SeeK"); } -public plugin_cfg() { +public plugin_cfg() +{ ss_register_service(service_id); } -public ss_service_data(name[], flags[]) { +public ss_service_data(name[], flags[]) +{ copy(szFlags, charsmax(szFlags), flags); } -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id)&read_flags(szFlags) == read_flags(szFlags)) { +public ss_service_addingtolist(id) +{ + if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; } - + return ITEM_ENABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma index 61e3e78..b72a142 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma @@ -1,35 +1,43 @@ #include #include + native get_user_bm(id); native set_user_bm(id, ilosc); -new const service_id[MAX_SERVICE_ID + 1] = "gxm_bm"; -#define PLUGIN "Sklep-SMS: Usluga GXM BM" +#pragma semicolon 1 + +#define PLUGIN "Sklep-SMS: GXM BM" #define AUTHOR "SeeK" -public plugin_natives() { +new const service_id[MAX_SERVICE_ID + 1] = "gxm_bm"; + +public plugin_natives() +{ set_native_filter("native_filter"); } -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) +public plugin_init() +{ + register_plugin(PLUGIN, VERSION, AUTHOR); } -public plugin_cfg() { - ss_register_service(service_id) +public plugin_cfg() +{ + ss_register_service(service_id); } -public ss_service_bought(id, amount) { +public ss_service_bought(id, amount) +{ set_user_bm(id, get_user_bm(id)+amount); } -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown +public native_filter(const native_name[], index, trap) +{ + if (trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); pause_plugin(); return PLUGIN_HANDLED; } - + return PLUGIN_CONTINUE; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma index fc74e0e..4d7d69e 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma @@ -1,32 +1,40 @@ #include #include + native get_user_xp(id); native set_user_xp(id, ilosc); -new const service_id[MAX_SERVICE_ID + 1] = "gxm_exp"; -#define PLUGIN "Sklep-SMS: Usluga GXM EXP" +#pragma semicolon 1 + +#define PLUGIN "Sklep-SMS: GXM EXP" #define AUTHOR "SeeK" -public plugin_natives() { +new const service_id[MAX_SERVICE_ID + 1] = "gxm_exp"; + +public plugin_natives() +{ set_native_filter("native_filter"); } -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) +public plugin_init() +{ + register_plugin(PLUGIN, VERSION, AUTHOR); } -public plugin_cfg() { - ss_register_service(service_id) +public plugin_cfg() +{ + ss_register_service(service_id); } -public ss_service_bought(id, amount) { - set_user_xp(id, get_user_xp(id)+amount); +public ss_service_bought(id, amount) +{ + set_user_xp(id, get_user_xp(id) + amount); } -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown +public native_filter(const native_name[], index, trap) +{ + if (trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); pause_plugin(); return PLUGIN_HANDLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma index 524fcb2..fabda15 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma @@ -1,13 +1,16 @@ #include #include +#pragma semicolon 1 + new const service_id[MAX_SERVICE_ID + 1] = "resnick"; -#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Nicku" -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") +public plugin_init() +{ + register_plugin("Sklep-SMS: Rezerwacja Nicku", VERSION, "SeeK"); } -public plugin_cfg() { +public plugin_cfg() +{ ss_register_service(service_id); } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma index 2c6ea29..8335399 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma @@ -1,26 +1,31 @@ #include #include +#pragma semicolon 1 + new const service_id[MAX_SERVICE_ID + 1] = "resslot"; -#define PLUGIN "Sklep-SMS: Usluga Rezerwacja Slota" new szFlags[32 + 1]; -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") +public plugin_init() +{ + register_plugin("Sklep-SMS: Rezerwacja Slota", VERSION, "SeeK"); } -public plugin_cfg() { +public plugin_cfg() +{ ss_register_service(service_id); } -public ss_service_data(name[], flags[]) { +public ss_service_data(name[], flags[]) +{ copy(szFlags, charsmax(szFlags), flags); } -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { +public ss_service_addingtolist(id) +{ + // Disable purchasing if the user already has a flag set + if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma index d491a03..02c41c6 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma @@ -1,26 +1,31 @@ #include #include +#pragma semicolon 1 + new const service_id[MAX_SERVICE_ID + 1] = "vip"; -#define PLUGIN "Sklep-SMS: Usluga VIP" new szFlags[32 + 1]; -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") +public plugin_init() +{ + register_plugin("Sklep-SMS: VIP", VERSION, "SeeK"); } -public plugin_cfg() { +public plugin_cfg() +{ ss_register_service(service_id); } -public ss_service_data(name[], flags[]) { +public ss_service_data(name[], flags[]) +{ copy(szFlags, charsmax(szFlags), flags); } -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { +public ss_service_addingtolist(id) +{ + // Disable purchasing if the user already has a flag set + if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma index 995aab7..1d72f73 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma @@ -1,28 +1,33 @@ #include #include +#pragma semicolon 1 + new const service_id[MAX_SERVICE_ID + 1] = "vippro"; -#define PLUGIN "Sklep-SMS: Usluga VIP PRO" new szFlags[32 + 1]; -public plugin_init() { - register_plugin(PLUGIN, VERSION, "SeeK") +public plugin_init() +{ + register_plugin("Sklep-SMS: VIP PRO", VERSION, "SeeK"); } -public plugin_cfg() { +public plugin_cfg() +{ ss_register_service(service_id); } -public ss_service_data(name[], flags[]) { +public ss_service_data(name[], flags[]) +{ copy(szFlags, charsmax(szFlags), flags); } -public ss_service_addingtolist(id) { - // Wylaczamy mozliwosc zakupu, jezeli gracz juz ma odpowiedni zestaw flag - if(get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { +public ss_service_addingtolist(id) +{ + // Disable purchasing if the user already has a flag set + if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { return ITEM_DISABLED; } - + return ITEM_ENABLED; } diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma index 12369f6..b0d9497 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma +++ b/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma @@ -3,30 +3,37 @@ native zp_get_user_ammo_packs(id); native zp_set_user_ammo_packs(id, amount); -new const service_id[MAX_SERVICE_ID + 1] = "zp_ap"; -#define PLUGIN "Sklep-SMS: Usluga ZP AP" +#pragma semicolon 1 + +#define PLUGIN "Sklep-SMS: ZP AP" #define AUTHOR "SeeK" -public plugin_natives() { +new const service_id[MAX_SERVICE_ID + 1] = "zp_ap"; + +public plugin_natives() +{ set_native_filter("native_filter"); } -public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR) +public plugin_init() +{ + register_plugin(PLUGIN, VERSION, AUTHOR); } -public plugin_cfg() { - ss_register_service(service_id) +public plugin_cfg() +{ + ss_register_service(service_id); } -public ss_service_bought(id, amount) { - zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id)+amount); +public ss_service_bought(id, amount) +{ + zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + amount); } -// Zabezpieczenie, jezeli plugin jest odpalony na serwerze bez odpowiednich funkcji -public native_filter(const native_name[], index, trap) { - if(trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); // Rejestrujemy plugin, aby nie bylo na liscie unknown +public native_filter(const native_name[], index, trap) +{ + if (trap == 0) { + register_plugin(PLUGIN, VERSION, AUTHOR); pause_plugin(); return PLUGIN_HANDLED; } From 7014354a026f7734b2f28fb17962f848f157f454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 28 Mar 2020 18:33:37 +0100 Subject: [PATCH 090/124] Replace endline --- .../amxmodx/scripting/include/colorchat.inc | 452 +-- .../addons/amxmodx/scripting/include/curl.inc | 78 +- .../amxmodx/scripting/include/curl_consts.inc | 2648 ++++++++--------- .../amxmodx/scripting/include/shop_sms.inc | 200 +- 4 files changed, 1689 insertions(+), 1689 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/colorchat.inc b/cstrike/addons/amxmodx/scripting/include/colorchat.inc index c1328bb..acdde70 100755 --- a/cstrike/addons/amxmodx/scripting/include/colorchat.inc +++ b/cstrike/addons/amxmodx/scripting/include/colorchat.inc @@ -1,227 +1,227 @@ -#if defined _colorchat_included - #endinput -#endif -#define _colorchat_included - -/* ColorChat Support */ -#define RED Red -#define BLUE Blue -#define GREY Grey -#define ColorChat client_print_color -/* ColorChat Support */ - -enum { - Grey = 33, - Red, - Blue -}; - -stock client_print_color(id, sender, const fmt[], any:...) -{ - // check if id is different from 0 - if( id && !is_user_connected(id) ) - { - return 0; - } - - static const szTeamName[][] = - { - "", - "TERRORIST", - "CT" - }; - - new szMessage[192]; - - new iParams = numargs(); - // Specific player code - if( id ) - { - if( iParams == 3 ) - { - copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value - } - else - { - vformat(szMessage, charsmax(szMessage), fmt, 4); - } - - if( sender > Grey ) - { - if( sender > Blue ) - { - sender = id; - } - else - { - _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); - } - } - _CC_SayText(id, sender, szMessage); - } - - // Send message to all players - else - { - // Figure out if at least 1 player is connected - // so we don't execute useless useless code if not - new iPlayers[32], iNum; - get_players(iPlayers, iNum, "ch"); - if( !iNum ) - { - return 0; - } - - new iMlNumber, i, j; - new Array:aStoreML = ArrayCreate(); - if( iParams >= 5 ) // ML can be used - { - for(j=3; j Grey ) - { - _CC_TeamInfo(0, sender, szTeamName[sender-Grey]); - } - _CC_SayText(0, sender, szMessage); - return 1; - } - } - - if( sender > Blue ) - { - sender = 0; // use receiver index - } - - for(--iNum; iNum>=0; iNum--) - { - id = iPlayers[iNum]; - - if( iMlNumber ) - { - for(j=0; j Grey ) - { - _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); - } - _CC_SayText(id, sender, szMessage); - } - - ArrayDestroy(aStoreML); - } - return 1; -} - -stock _CC_TeamInfo(iReceiver, iSender, szTeam[]) -{ - static iTeamInfo = 0; - if( !iTeamInfo ) - { - iTeamInfo = get_user_msgid("TeamInfo"); - } - message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver); - write_byte(iSender); - write_string(szTeam); - message_end(); -} - -stock _CC_SayText(iReceiver, iSender, szMessage[]) -{ - static iSayText = 0; - if( !iSayText ) - { - iSayText = get_user_msgid("SayText"); - } - message_begin(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver); - write_byte(iSender ? iSender : iReceiver); - write_string(szMessage); - message_end(); -} - -stock register_dictionary_colored(const filename[]) -{ - if( !register_dictionary(filename) ) - { - return 0; - } - - new szFileName[256]; - get_localinfo("amxx_datadir", szFileName, charsmax(szFileName)); - format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename); - new fp = fopen(szFileName, "rt"); - if( !fp ) - { - log_amx("Failed to open %s", szFileName); - return 0; - } - - new szBuffer[512], szLang[3], szKey[64], szTranslation[256], TransKey:iKey; - - while( !feof(fp) ) - { - fgets(fp, szBuffer, charsmax(szBuffer)); - trim(szBuffer); - - if( szBuffer[0] == '[' ) - { - strtok(szBuffer[1], szLang, charsmax(szLang), szBuffer, 1, ']'); - } - else if( szBuffer[0] ) - { - strbreak(szBuffer, szKey, charsmax(szKey), szTranslation, charsmax(szTranslation)); - iKey = GetLangTransKey(szKey); - if( iKey != TransKey_Bad ) - { - replace_all(szTranslation, charsmax(szTranslation), "!g", "^4"); - replace_all(szTranslation, charsmax(szTranslation), "!t", "^3"); - replace_all(szTranslation, charsmax(szTranslation), "!n", "^1"); - AddTranslation(szLang, iKey, szTranslation[2]); - } - } - } - - fclose(fp); - return 1; +#if defined _colorchat_included + #endinput +#endif +#define _colorchat_included + +/* ColorChat Support */ +#define RED Red +#define BLUE Blue +#define GREY Grey +#define ColorChat client_print_color +/* ColorChat Support */ + +enum { + Grey = 33, + Red, + Blue +}; + +stock client_print_color(id, sender, const fmt[], any:...) +{ + // check if id is different from 0 + if( id && !is_user_connected(id) ) + { + return 0; + } + + static const szTeamName[][] = + { + "", + "TERRORIST", + "CT" + }; + + new szMessage[192]; + + new iParams = numargs(); + // Specific player code + if( id ) + { + if( iParams == 3 ) + { + copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value + } + else + { + vformat(szMessage, charsmax(szMessage), fmt, 4); + } + + if( sender > Grey ) + { + if( sender > Blue ) + { + sender = id; + } + else + { + _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); + } + } + _CC_SayText(id, sender, szMessage); + } + + // Send message to all players + else + { + // Figure out if at least 1 player is connected + // so we don't execute useless useless code if not + new iPlayers[32], iNum; + get_players(iPlayers, iNum, "ch"); + if( !iNum ) + { + return 0; + } + + new iMlNumber, i, j; + new Array:aStoreML = ArrayCreate(); + if( iParams >= 5 ) // ML can be used + { + for(j=3; j Grey ) + { + _CC_TeamInfo(0, sender, szTeamName[sender-Grey]); + } + _CC_SayText(0, sender, szMessage); + return 1; + } + } + + if( sender > Blue ) + { + sender = 0; // use receiver index + } + + for(--iNum; iNum>=0; iNum--) + { + id = iPlayers[iNum]; + + if( iMlNumber ) + { + for(j=0; j Grey ) + { + _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); + } + _CC_SayText(id, sender, szMessage); + } + + ArrayDestroy(aStoreML); + } + return 1; +} + +stock _CC_TeamInfo(iReceiver, iSender, szTeam[]) +{ + static iTeamInfo = 0; + if( !iTeamInfo ) + { + iTeamInfo = get_user_msgid("TeamInfo"); + } + message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver); + write_byte(iSender); + write_string(szTeam); + message_end(); +} + +stock _CC_SayText(iReceiver, iSender, szMessage[]) +{ + static iSayText = 0; + if( !iSayText ) + { + iSayText = get_user_msgid("SayText"); + } + message_begin(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver); + write_byte(iSender ? iSender : iReceiver); + write_string(szMessage); + message_end(); +} + +stock register_dictionary_colored(const filename[]) +{ + if( !register_dictionary(filename) ) + { + return 0; + } + + new szFileName[256]; + get_localinfo("amxx_datadir", szFileName, charsmax(szFileName)); + format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename); + new fp = fopen(szFileName, "rt"); + if( !fp ) + { + log_amx("Failed to open %s", szFileName); + return 0; + } + + new szBuffer[512], szLang[3], szKey[64], szTranslation[256], TransKey:iKey; + + while( !feof(fp) ) + { + fgets(fp, szBuffer, charsmax(szBuffer)); + trim(szBuffer); + + if( szBuffer[0] == '[' ) + { + strtok(szBuffer[1], szLang, charsmax(szLang), szBuffer, 1, ']'); + } + else if( szBuffer[0] ) + { + strbreak(szBuffer, szKey, charsmax(szKey), szTranslation, charsmax(szTranslation)); + iKey = GetLangTransKey(szKey); + if( iKey != TransKey_Bad ) + { + replace_all(szTranslation, charsmax(szTranslation), "!g", "^4"); + replace_all(szTranslation, charsmax(szTranslation), "!t", "^3"); + replace_all(szTranslation, charsmax(szTranslation), "!n", "^1"); + AddTranslation(szLang, iKey, szTranslation[2]); + } + } + } + + fclose(fp); + return 1; } \ No newline at end of file diff --git a/cstrike/addons/amxmodx/scripting/include/curl.inc b/cstrike/addons/amxmodx/scripting/include/curl.inc index a77b882..b9e4b00 100755 --- a/cstrike/addons/amxmodx/scripting/include/curl.inc +++ b/cstrike/addons/amxmodx/scripting/include/curl.inc @@ -1,39 +1,39 @@ -#if defined _curl_included - #endinput -#endif -#define _curl_included - -#include - -#if AMXX_VERSION_NUM >= 175 - #pragma reqlib curl - #if !defined AMXMODX_NOAUTOLOAD - #pragma loadlib curl - #endif -#else - #pragma library curl -#endif - -enum _:curl_off_t { - curl_off_left, - curl_off_right -} - -native curl_easy_escape(const CURL:handle, const url[], escapedUrl[], const len); -native curl_easy_unescape(const CURL:handle, const url[], unescapedUrl[], const len); - -native CURL:curl_easy_init(); -native void:curl_easy_perform(const CURL:handle, const callbackComplite[], const data[] = {}, const data_len = 0); -native CURLcode:curl_easy_setopt(const CURL:handle, const CURLoption:option, any:...); -native void:curl_easy_cleanup(const CURL:handle); -native void:curl_easy_reset(const CURL:handle); -native CURLcode:curl_easy_getinfo(const CURL:handle, const CURLINFO:info, any:...); -native void:curl_easy_strerror(const CURLcode:code, errorBuf[], const len); - -native CURLFORMcode:curl_formadd(&curl_httppost:first, &curl_httppost:last, any:...); -native void:curl_formfree(&curl_httppost:first); - -native curl_slist:curl_slist_append(curl_slist:list, buffer[]); -native void:curl_slist_free_all(curl_slist:list); - -native void:curl_version(buf[], len); +#if defined _curl_included + #endinput +#endif +#define _curl_included + +#include + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib curl + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib curl + #endif +#else + #pragma library curl +#endif + +enum _:curl_off_t { + curl_off_left, + curl_off_right +} + +native curl_easy_escape(const CURL:handle, const url[], escapedUrl[], const len); +native curl_easy_unescape(const CURL:handle, const url[], unescapedUrl[], const len); + +native CURL:curl_easy_init(); +native void:curl_easy_perform(const CURL:handle, const callbackComplite[], const data[] = {}, const data_len = 0); +native CURLcode:curl_easy_setopt(const CURL:handle, const CURLoption:option, any:...); +native void:curl_easy_cleanup(const CURL:handle); +native void:curl_easy_reset(const CURL:handle); +native CURLcode:curl_easy_getinfo(const CURL:handle, const CURLINFO:info, any:...); +native void:curl_easy_strerror(const CURLcode:code, errorBuf[], const len); + +native CURLFORMcode:curl_formadd(&curl_httppost:first, &curl_httppost:last, any:...); +native void:curl_formfree(&curl_httppost:first); + +native curl_slist:curl_slist_append(curl_slist:list, buffer[]); +native void:curl_slist_free_all(curl_slist:list); + +native void:curl_version(buf[], len); diff --git a/cstrike/addons/amxmodx/scripting/include/curl_consts.inc b/cstrike/addons/amxmodx/scripting/include/curl_consts.inc index 642445e..2ffa0b4 100755 --- a/cstrike/addons/amxmodx/scripting/include/curl_consts.inc +++ b/cstrike/addons/amxmodx/scripting/include/curl_consts.inc @@ -1,1325 +1,1325 @@ -#if defined _curlconst_included - #endinput -#endif -#define _curlconst_included - -#define CURL_ERROR_SIZE 256 - -/*#if defined(WIN32) -#define CURL_SOCKET_BAD (~0) -#else -#define CURL_SOCKET_BAD -1 -#endif*/ - -#define CURLPAUSE_RECV (1<<0) -#define CURLPAUSE_RECV_CONT (0) - -#define CURLPAUSE_SEND (1<<2) -#define CURLPAUSE_SEND_CONT (0) - -#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) -#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) - -/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ -#define CURLPROTO_HTTP (1<<0) -#define CURLPROTO_HTTPS (1<<1) -#define CURLPROTO_FTP (1<<2) -#define CURLPROTO_FTPS (1<<3) -#define CURLPROTO_SCP (1<<4) -#define CURLPROTO_SFTP (1<<5) -#define CURLPROTO_TELNET (1<<6) -#define CURLPROTO_LDAP (1<<7) -#define CURLPROTO_LDAPS (1<<8) -#define CURLPROTO_DICT (1<<9) -#define CURLPROTO_FILE (1<<10) -#define CURLPROTO_TFTP (1<<11) -#define CURLPROTO_IMAP (1<<12) -#define CURLPROTO_IMAPS (1<<13) -#define CURLPROTO_POP3 (1<<14) -#define CURLPROTO_POP3S (1<<15) -#define CURLPROTO_SMTP (1<<16) -#define CURLPROTO_SMTPS (1<<17) -#define CURLPROTO_RTSP (1<<18) -#define CURLPROTO_RTMP (1<<19) -#define CURLPROTO_RTMPT (1<<20) -#define CURLPROTO_RTMPE (1<<21) -#define CURLPROTO_RTMPTE (1<<22) -#define CURLPROTO_RTMPS (1<<23) -#define CURLPROTO_RTMPTS (1<<24) -#define CURLPROTO_GOPHER (1<<25) -#define CURLPROTO_ALL (~0) /* enable everything */ - -/* - * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: - * - * CURLAUTH_NONE - No HTTP authentication - * CURLAUTH_BASIC - HTTP Basic authentication (default) - * CURLAUTH_DIGEST - HTTP Digest authentication - * CURLAUTH_GSSNEGOTIATE - HTTP GSS-Negotiate authentication - * CURLAUTH_NTLM - HTTP NTLM authentication - * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour - * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper - * CURLAUTH_ONLY - Use together with a single other type to force no - * authentication or just that single type - * CURLAUTH_ANY - All fine types set - * CURLAUTH_ANYSAFE - All fine types except Basic - */ - -#define CURLAUTH_NONE 0 -#define CURLAUTH_BASIC (1<<0) -#define CURLAUTH_DIGEST (1<<1) -#define CURLAUTH_GSSNEGOTIATE (1<<2) -#define CURLAUTH_NTLM (1<<3) -#define CURLAUTH_DIGEST_IE (1<<4) -#define CURLAUTH_NTLM_WB (1<<5) -#define CURLAUTH_ONLY (1<<31) -#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) -#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) - -#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ -#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ -#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ -#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ -#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ -#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ -#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ -#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY - -#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ -#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ -#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ - -/* symbols to use with CURLOPT_POSTREDIR. - CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 - can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 - | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ - -#define CURL_REDIR_GET_ALL 0 -#define CURL_REDIR_POST_301 1 -#define CURL_REDIR_POST_302 2 -#define CURL_REDIR_POST_303 4 -#define CURL_REDIR_POST_ALL \ - (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) - -/* bitmask defines for CURLOPT_HEADEROPT */ -#define CURLHEADER_UNIFIED 0 -#define CURLHEADER_SEPARATE (1<<0) - - /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host - name resolves addresses using more than one IP protocol version, this - option might be handy to force libcurl to use a specific IP version. */ -#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP - versions that your system allows */ -#define CURL_IPRESOLVE_V4 1 /* resolve to ipv4 addresses */ -#define CURL_IPRESOLVE_V6 2 /* resolve to ipv6 addresses */ - -/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ - -/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the - name of improving interoperability with older servers. Some SSL libraries - have introduced work-arounds for this flaw but those work-arounds sometimes - make the SSL communication fail. To regain functionality with those broken - servers, a user can this way allow the vulnerability back. */ -#define CURLSSLOPT_ALLOW_BEAST (1<<0) - -/* This is a magic return code for the write callback that, when returned, - will signal libcurl to pause receiving on the current transfer. */ -#define CURL_WRITEFUNC_PAUSE 0x10000001 - -/* This is a return code for the read callback that, when returned, will - signal libcurl to immediately abort the current transfer. */ -#define CURL_READFUNC_ABORT 0x10000000 -/* This is a return code for the read callback that, when returned, will - signal libcurl to pause sending data on the current transfer. */ -#define CURL_READFUNC_PAUSE 0x10000001 - -enum curlioerr { - CURLIOE_OK, /* I/O operation successful */ - CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ - CURLIOE_FAILRESTART, /* failed to restart the read */ - CURLIOE_LAST /* never use */ -} - -enum curliocmd { - CURLIOCMD_NOP, /* no operation */ - CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ - CURLIOCMD_LAST /* never use */ -} - -enum curlsocktype { - CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ - CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ - CURLSOCKTYPE_LAST /* never use */ -} - -/* The return code from the sockopt_callback can signal information back - to libcurl: */ -#define CURL_SOCKOPT_OK 0 -#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return - CURLE_ABORTED_BY_CALLBACK */ -#define CURL_SOCKOPT_ALREADY_CONNECTED 2 - - -/* - * Public API enums for RTSP requests - */ -enum { - CURL_RTSPREQ_NONE, /* first in list */ - CURL_RTSPREQ_OPTIONS, - CURL_RTSPREQ_DESCRIBE, - CURL_RTSPREQ_ANNOUNCE, - CURL_RTSPREQ_SETUP, - CURL_RTSPREQ_PLAY, - CURL_RTSPREQ_PAUSE, - CURL_RTSPREQ_TEARDOWN, - CURL_RTSPREQ_GET_PARAMETER, - CURL_RTSPREQ_SET_PARAMETER, - CURL_RTSPREQ_RECORD, - CURL_RTSPREQ_RECEIVE, - CURL_RTSPREQ_LAST /* last in list */ -} - -enum { - CURL_SSLVERSION_DEFAULT, - CURL_SSLVERSION_TLSv1, /* TLS 1.x */ - CURL_SSLVERSION_SSLv2, - CURL_SSLVERSION_SSLv3, - CURL_SSLVERSION_TLSv1_0, - CURL_SSLVERSION_TLSv1_1, - CURL_SSLVERSION_TLSv1_2, - - CURL_SSLVERSION_LAST /* never use, keep last */ -} - - /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ -enum { - CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd - like the library to choose the best possible - for us! */ - CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ - CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ - CURL_HTTP_VERSION_2_0, /* please use HTTP 2.0 in the request */ - - CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ -} - - /* These enums are for use with the CURLOPT_NETRC option. */ -enum CURL_NETRC_OPTION { - CURL_NETRC_IGNORED, /* The .netrc will never be read. - * This is the default. */ - CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred - * to one in the .netrc. */ - CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. - * Unless one is set programmatically, the .netrc - * will be queried. */ - CURL_NETRC_LAST -} - -enum curl_proxytype { - CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use - CONNECT HTTP/1.1 */ - CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT - HTTP/1.0 */ - CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already - in 7.10 */ - CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ - CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ - CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the - host name rather than the IP address. added - in 7.18.0 */ -} /* this enum was added in 7.10 */ - -enum curl_infotype { - CURLINFO_TEXT = 0, - CURLINFO_HEADER_IN, /* 1 */ - CURLINFO_HEADER_OUT, /* 2 */ - CURLINFO_DATA_IN, /* 3 */ - CURLINFO_DATA_OUT, /* 4 */ - CURLINFO_SSL_DATA_IN, /* 5 */ - CURLINFO_SSL_DATA_OUT, /* 6 */ - CURLINFO_END -} - -/* use this for multipart formpost building */ -/* Returns code for curl_formadd() - * - * Returns: - * CURL_FORMADD_OK on success - * CURL_FORMADD_MEMORY if the FormInfo allocation fails - * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form - * CURL_FORMADD_NULL if a null pointer was given for a char - * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed - * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used - * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) - * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated - * CURL_FORMADD_MEMORY if some allocation for string copying failed. - * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array - * - ***************************************************************************/ -enum CURLFORMcode { - CURL_FORMADD_OK, /* first, no error */ - - CURL_FORMADD_MEMORY, - CURL_FORMADD_OPTION_TWICE, - CURL_FORMADD_NULL, - CURL_FORMADD_UNKNOWN_OPTION, - CURL_FORMADD_INCOMPLETE, - CURL_FORMADD_ILLEGAL_ARRAY, - CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ - - CURL_FORMADD_LAST /* last */ -} - -/* parameter for the CURLOPT_FTP_FILEMETHOD option */ -enum curl_ftpmethod { - CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ - CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ - CURLFTPMETHOD_NOCWD, /* no CWD at all */ - CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ - CURLFTPMETHOD_LAST /* not an option, never use */ -} - -/* parameter for the CURLOPT_FTP_SSL_CCC option */ -enum curl_ftpccc { - CURLFTPSSL_CCC_NONE, /* do not send CCC */ - CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ - CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ - CURLFTPSSL_CCC_LAST /* not an option, never use */ -} - -/* parameter for the CURLOPT_FTPSSLAUTH option */ -enum curl_ftpauth { - CURLFTPAUTH_DEFAULT, /* let libcurl decide */ - CURLFTPAUTH_SSL, /* use "AUTH SSL" */ - CURLFTPAUTH_TLS, /* use "AUTH TLS" */ - CURLFTPAUTH_LAST /* not an option, never use */ -} - -/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ -enum curl_ftpcreatedir { - CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ - CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD - again if MKD succeeded, for SFTP this does - similar magic */ - CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD - again even if MKD failed! */ - CURLFTP_CREATE_DIR_LAST /* not an option, never use */ -} - -/* parameter for the CURLOPT_USE_SSL option */ -enum curl_usessl { - CURLUSESSL_NONE, /* do not attempt to use SSL */ - CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ - CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ - CURLUSESSL_ALL, /* SSL for all communication or fail */ - CURLUSESSL_LAST /* not an option, never use */ -} - -#define CFINIT(%0) CURLFORM_%0 -enum CURLformoption { - CFINIT(NOTHING), /********* the first one is unused ************/ - - /* */ - CFINIT(COPYNAME), - CFINIT(PTRNAME), - CFINIT(NAMELENGTH), - CFINIT(COPYCONTENTS), - CFINIT(PTRCONTENTS), - CFINIT(CONTENTSLENGTH), - CFINIT(FILECONTENT), - CFINIT(ARRAY), - CFINIT(OBSOLETE), - CFINIT(FILE), - - CFINIT(BUFFER), - CFINIT(BUFFERPTR), - CFINIT(BUFFERLENGTH), - - CFINIT(CONTENTTYPE), - CFINIT(CONTENTHEADER), - CFINIT(FILENAME), - CFINIT(END), - CFINIT(OBSOLETE2), - - CFINIT(STREAM), - - CURLFORM_LASTENTRY /* the last unused */ -} - -#undef CFINIT /* done */ - -enum CURLcode { - CURLE_OK = 0, - CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ - CURLE_FAILED_INIT, /* 2 */ - CURLE_URL_MALFORMAT, /* 3 */ - CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for - 7.17.0, reused in April 2011 for 7.21.5] */ - CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ - CURLE_COULDNT_RESOLVE_HOST, /* 6 */ - CURLE_COULDNT_CONNECT, /* 7 */ - CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */ - CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server - due to lack of access - when login fails - this is not returned. */ - CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for - 7.15.4, reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ - CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server - [was obsoleted in August 2007 for 7.17.0, - reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ - CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ - CURLE_FTP_CANT_GET_HOST, /* 15 */ - CURLE_OBSOLETE16, /* 16 - NOT USED */ - CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ - CURLE_PARTIAL_FILE, /* 18 */ - CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ - CURLE_OBSOLETE20, /* 20 - NOT USED */ - CURLE_QUOTE_ERROR, /* 21 - quote command failure */ - CURLE_HTTP_RETURNED_ERROR, /* 22 */ - CURLE_WRITE_ERROR, /* 23 */ - CURLE_OBSOLETE24, /* 24 - NOT USED */ - CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ - CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ - CURLE_OUT_OF_MEMORY, /* 27 */ - /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error - instead of a memory allocation error if CURL_DOES_CONVERSIONS - is defined - */ - CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ - CURLE_OBSOLETE29, /* 29 - NOT USED */ - CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ - CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ - CURLE_OBSOLETE32, /* 32 - NOT USED */ - CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ - CURLE_HTTP_POST_ERROR, /* 34 */ - CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ - CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ - CURLE_FILE_COULDNT_READ_FILE, /* 37 */ - CURLE_LDAP_CANNOT_BIND, /* 38 */ - CURLE_LDAP_SEARCH_FAILED, /* 39 */ - CURLE_OBSOLETE40, /* 40 - NOT USED */ - CURLE_FUNCTION_NOT_FOUND, /* 41 */ - CURLE_ABORTED_BY_CALLBACK, /* 42 */ - CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ - CURLE_OBSOLETE44, /* 44 - NOT USED */ - CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ - CURLE_OBSOLETE46, /* 46 - NOT USED */ - CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */ - CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ - CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */ - CURLE_OBSOLETE50, /* 50 - NOT USED */ - CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint - wasn't verified fine */ - CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ - CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ - CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as - default */ - CURLE_SEND_ERROR, /* 55 - failed sending network data */ - CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ - CURLE_OBSOLETE57, /* 57 - NOT IN USE */ - CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ - CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ - CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */ - CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ - CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ - CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ - CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ - CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind - that failed */ - CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ - CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not - accepted and we failed to login */ - CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ - CURLE_TFTP_PERM, /* 69 - permission problem on server */ - CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ - CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ - CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ - CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ - CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ - CURLE_CONV_FAILED, /* 75 - conversion failed */ - CURLE_CONV_REQD, /* 76 - caller must register conversion - callbacks using curl_easy_setopt options - CURLOPT_CONV_FROM_NETWORK_FUNCTION, - CURLOPT_CONV_TO_NETWORK_FUNCTION, and - CURLOPT_CONV_FROM_UTF8_FUNCTION */ - CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing - or wrong format */ - CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ - CURLE_SSH, /* 79 - error from the SSH layer, somewhat - generic so the error message will be of - interest when this has happened */ - - CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL - connection */ - CURLE_AGAIN, /* 81 - socket is not ready for send/recv, - wait till it's ready and try again (Added - in 7.18.2) */ - CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or - wrong format (Added in 7.19.0) */ - CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in - 7.19.0) */ - CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ - CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ - CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ - CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ - CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ - CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the - session will be queued */ - CURL_LAST /* never use! */ -} - - -#define CURLINFO_STRING 0x100000 -#define CURLINFO_LONG 0x200000 -#define CURLINFO_DOUBLE 0x300000 -#define CURLINFO_SLIST 0x400000 -#define CURLINFO_MASK 0x0fffff -#define CURLINFO_TYPEMASK 0xf00000 - -enum CURLINFO { - CURLINFO_NONE, /* first, never use this */ - CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, - CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, - CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, - CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, - CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, - CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, - CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, - CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, - CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, - CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, - CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, - CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, - CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, - CURLINFO_FILETIME = CURLINFO_LONG + 14, - CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, - CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, - CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, - CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, - CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, - CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, - CURLINFO_PRIVATE = CURLINFO_STRING + 21, - CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, - CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, - CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, - CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, - CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, - CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, - CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, - CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, - CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, - CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, - CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, - CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, - CURLINFO_CERTINFO = CURLINFO_SLIST + 34, - CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, - CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, - CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, - CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, - CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, - CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, - CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, - CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, - CURLINFO_TLS_SESSION = CURLINFO_SLIST + 43, - /* Fill in new entries below here! */ - - CURLINFO_LASTONE = 43 -} - -#define CURLOPTTYPE_LONG 0 -#define CURLOPTTYPE_OBJECTPOINT 10000 -#define CURLOPTTYPE_FUNCTIONPOINT 20000 -#define CURLOPTTYPE_OFF_T 30000 - -#define LONG CURLOPTTYPE_LONG -#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT -#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT -#define OFF_T CURLOPTTYPE_OFF_T - -#define CINIT(%0,%1,%2) CURLOPT_%0 = %1 + %2 - -enum CURLoption { - /* This is the FILE * or void * the regular output should be written to. */ - CINIT(WRITEDATA, OBJECTPOINT, 1), - - /* The full URL to get/put */ - CINIT(URL, OBJECTPOINT, 2), - - /* Port number to connect to, if other than default. */ - CINIT(PORT, LONG, 3), - - /* Name of proxy to use. */ - CINIT(PROXY, OBJECTPOINT, 4), - - /* "user:password;options" to use when fetching. */ - CINIT(USERPWD, OBJECTPOINT, 5), - - /* "user:password" to use with proxy. */ - CINIT(PROXYUSERPWD, OBJECTPOINT, 6), - - /* Range to get, specified as an ASCII string. */ - CINIT(RANGE, OBJECTPOINT, 7), - - /* not used */ - - /* Specified file stream to upload from (use as input): */ - CINIT(READDATA, OBJECTPOINT, 9), - - /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE - * bytes big. If this is not used, error messages go to stderr instead: */ - CINIT(ERRORBUFFER, OBJECTPOINT, 10), - - /* Function that will be called to store the output (instead of fwrite). The - * parameters will use fwrite() syntax, make sure to follow them. */ - CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11), - - /* Function that will be called to read the input (instead of fread). The - * parameters will use fread() syntax, make sure to follow them. */ - CINIT(READFUNCTION, FUNCTIONPOINT, 12), - - /* Time-out the read operation after this amount of seconds */ - CINIT(TIMEOUT, LONG, 13), - - /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about - * how large the file being sent really is. That allows better error - * checking and better verifies that the upload was successful. -1 means - * unknown size. - * - * For large file support, there is also a _LARGE version of the key - * which takes an off_t type, allowing platforms with larger off_t - * sizes to handle larger files. See below for INFILESIZE_LARGE. - */ - CINIT(INFILESIZE, LONG, 14), - - /* POST static input fields. */ - CINIT(POSTFIELDS, OBJECTPOINT, 15), - - /* Set the referrer page (needed by some CGIs) */ - CINIT(REFERER, OBJECTPOINT, 16), - - /* Set the FTP PORT string (interface name, named or numerical IP address) - Use i.e '-' to use default address. */ - CINIT(FTPPORT, OBJECTPOINT, 17), - - /* Set the User-Agent string (examined by some CGIs) */ - CINIT(USERAGENT, OBJECTPOINT, 18), - - /* If the download receives less than "low speed limit" bytes/second - * during "low speed time" seconds, the operations is aborted. - * You could i.e if you have a pretty high speed connection, abort if - * it is less than 2000 bytes/sec during 20 seconds. - */ - - /* Set the "low speed limit" */ - CINIT(LOW_SPEED_LIMIT, LONG, 19), - - /* Set the "low speed time" */ - CINIT(LOW_SPEED_TIME, LONG, 20), - - /* Set the continuation offset. - * - * Note there is also a _LARGE version of this key which uses - * off_t types, allowing for large file offsets on platforms which - * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. - */ - CINIT(RESUME_FROM, LONG, 21), - - /* Set cookie in request: */ - CINIT(COOKIE, OBJECTPOINT, 22), - - /* This points to a linked list of headers, struct curl_slist kind. This - list is also used for RTSP (in spite of its name) */ - CINIT(HTTPHEADER, OBJECTPOINT, 23), - - /* This points to a linked list of post entries, struct curl_httppost */ - CINIT(HTTPPOST, OBJECTPOINT, 24), - - /* name of the file keeping your private SSL-certificate */ - CINIT(SSLCERT, OBJECTPOINT, 25), - - /* password for the SSL or SSH private key */ - CINIT(KEYPASSWD, OBJECTPOINT, 26), - - /* send TYPE parameter? */ - CINIT(CRLF, LONG, 27), - - /* send linked-list of QUOTE commands */ - CINIT(QUOTE, OBJECTPOINT, 28), - - /* send FILE * or void * to store headers to, if you use a callback it - is simply passed to the callback unmodified */ - CINIT(HEADERDATA, OBJECTPOINT, 29), - - /* point to a file to read the initial cookies from, also enables - "cookie awareness" */ - CINIT(COOKIEFILE, OBJECTPOINT, 31), - - /* What version to specifically try to use. - See CURL_SSLVERSION defines below. */ - CINIT(SSLVERSION, LONG, 32), - - /* What kind of HTTP time condition to use, see defines */ - CINIT(TIMECONDITION, LONG, 33), - - /* Time to use with the above condition. Specified in number of seconds - since 1 Jan 1970 */ - CINIT(TIMEVALUE, LONG, 34), - - /* 35 = OBSOLETE */ - - /* Custom request, for customizing the get command like - HTTP: DELETE, TRACE and others - FTP: to use a different list command - */ - CINIT(CUSTOMREQUEST, OBJECTPOINT, 36), - - /* HTTP request, for odd commands like DELETE, TRACE and others */ - CINIT(STDERR, OBJECTPOINT, 37), - - /* 38 is not used */ - - /* send linked-list of post-transfer QUOTE commands */ - CINIT(POSTQUOTE, OBJECTPOINT, 39), - - CINIT(OBSOLETE40, OBJECTPOINT, 40), /* OBSOLETE, do not use! */ - - CINIT(VERBOSE, LONG, 41), /* talk a lot */ - CINIT(HEADER, LONG, 42), /* throw the header out too */ - CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */ - CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */ - CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */ - CINIT(UPLOAD, LONG, 46), /* this is an upload */ - CINIT(POST, LONG, 47), /* HTTP POST method */ - CINIT(DIRLISTONLY, LONG, 48), /* bare names when listing directories */ - - CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */ - - /* Specify whether to read the user+password from the .netrc or the URL. - * This must be one of the CURL_NETRC_* enums below. */ - CINIT(NETRC, LONG, 51), - - CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */ - - CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */ - CINIT(PUT, LONG, 54), /* HTTP PUT */ - - /* 55 = OBSOLETE */ - - /* DEPRECATED - * Function that will be called instead of the internal progress display - * function. This function should be defined as the curl_progress_callback - * prototype defines. */ - CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56), - - /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION - callbacks */ - CINIT(PROGRESSDATA, OBJECTPOINT, 57), -#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA - - /* We want the referrer field set automatically when following locations */ - CINIT(AUTOREFERER, LONG, 58), - - /* Port of the proxy, can be set in the proxy string as well with: - "[host]:[port]" */ - CINIT(PROXYPORT, LONG, 59), - - /* size of the POST input data, if strlen() is not good to use */ - CINIT(POSTFIELDSIZE, LONG, 60), - - /* tunnel non-http operations through a HTTP proxy */ - CINIT(HTTPPROXYTUNNEL, LONG, 61), - - /* Set the interface string to use as outgoing network interface */ - CINIT(INTERFACE, OBJECTPOINT, 62), - - /* Set the krb4/5 security level, this also enables krb4/5 awareness. This - * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string - * is set but doesn't match one of these, 'private' will be used. */ - CINIT(KRBLEVEL, OBJECTPOINT, 63), - - /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ - CINIT(SSL_VERIFYPEER, LONG, 64), - - /* The CApath or CAfile used to validate the peer certificate - this option is used only if SSL_VERIFYPEER is true */ - CINIT(CAINFO, OBJECTPOINT, 65), - - /* 66 = OBSOLETE */ - /* 67 = OBSOLETE */ - - /* Maximum number of http redirects to follow */ - CINIT(MAXREDIRS, LONG, 68), - - /* Pass a long set to 1 to get the date of the requested document (if - possible)! Pass a zero to shut it off. */ - CINIT(FILETIME, LONG, 69), - - /* This points to a linked list of telnet options */ - CINIT(TELNETOPTIONS, OBJECTPOINT, 70), - - /* Max amount of cached alive connections */ - CINIT(MAXCONNECTS, LONG, 71), - - CINIT(OBSOLETE72, LONG, 72), /* OBSOLETE, do not use! */ - - /* 73 = OBSOLETE */ - - /* Set to explicitly use a new connection for the upcoming transfer. - Do not use this unless you're absolutely sure of this, as it makes the - operation slower and is less friendly for the network. */ - CINIT(FRESH_CONNECT, LONG, 74), - - /* Set to explicitly forbid the upcoming transfer's connection to be re-used - when done. Do not use this unless you're absolutely sure of this, as it - makes the operation slower and is less friendly for the network. */ - CINIT(FORBID_REUSE, LONG, 75), - - /* Set to a file name that contains random data for libcurl to use to - seed the random engine when doing SSL connects. */ - CINIT(RANDOM_FILE, OBJECTPOINT, 76), - - /* Set to the Entropy Gathering Daemon socket pathname */ - CINIT(EGDSOCKET, OBJECTPOINT, 77), - - /* Time-out connect operations after this amount of seconds, if connects are - OK within this time, then fine... This only aborts the connect phase. */ - CINIT(CONNECTTIMEOUT, LONG, 78), - - /* Function that will be called to store headers (instead of fwrite). The - * parameters will use fwrite() syntax, make sure to follow them. */ - CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), - - /* Set this to force the HTTP request to get back to GET. Only really usable - if POST, PUT or a custom request have been used first. - */ - CINIT(HTTPGET, LONG, 80), - - /* Set if we should verify the Common name from the peer certificate in ssl - * handshake, set 1 to check existence, 2 to ensure that it matches the - * provided hostname. */ - CINIT(SSL_VERIFYHOST, LONG, 81), - - /* Specify which file name to write all known cookies in after completed - operation. Set file name to "-" (dash) to make it go to stdout. */ - CINIT(COOKIEJAR, OBJECTPOINT, 82), - - /* Specify which SSL ciphers to use */ - CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83), - - /* Specify which HTTP version to use! This must be set to one of the - CURL_HTTP_VERSION* enums set below. */ - CINIT(HTTP_VERSION, LONG, 84), - - /* Specifically switch on or off the FTP engine's use of the EPSV command. By - default, that one will always be attempted before the more traditional - PASV command. */ - CINIT(FTP_USE_EPSV, LONG, 85), - - /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ - CINIT(SSLCERTTYPE, OBJECTPOINT, 86), - - /* name of the file keeping your private SSL-key */ - CINIT(SSLKEY, OBJECTPOINT, 87), - - /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ - CINIT(SSLKEYTYPE, OBJECTPOINT, 88), - - /* crypto engine for the SSL-sub system */ - CINIT(SSLENGINE, OBJECTPOINT, 89), - - /* set the crypto engine for the SSL-sub system as default - the param has no meaning... - */ - CINIT(SSLENGINE_DEFAULT, LONG, 90), - - /* Non-zero value means to use the global dns cache */ - CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* DEPRECATED, do not use! */ - - /* DNS cache timeout */ - CINIT(DNS_CACHE_TIMEOUT, LONG, 92), - - /* send linked-list of pre-transfer QUOTE commands */ - CINIT(PREQUOTE, OBJECTPOINT, 93), - - /* set the debug function */ - CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94), - - /* set the data for the debug function */ - CINIT(DEBUGDATA, OBJECTPOINT, 95), - - /* mark this as start of a cookie session */ - CINIT(COOKIESESSION, LONG, 96), - - /* The CApath directory used to validate the peer certificate - this option is used only if SSL_VERIFYPEER is true */ - CINIT(CAPATH, OBJECTPOINT, 97), - - /* Instruct libcurl to use a smaller receive buffer */ - CINIT(BUFFERSIZE, LONG, 98), - - /* Instruct libcurl to not use any signal/alarm handlers, even when using - timeouts. This option is useful for multi-threaded applications. - See libcurl-the-guide for more background information. */ - CINIT(NOSIGNAL, LONG, 99), - - /* Provide a CURLShare for mutexing non-ts data */ - CINIT(SHARE, OBJECTPOINT, 100), - - /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), - CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */ - CINIT(PROXYTYPE, LONG, 101), - - /* Set the Accept-Encoding string. Use this to tell a server you would like - the response to be compressed. Before 7.21.6, this was known as - CURLOPT_ENCODING */ - CINIT(ACCEPT_ENCODING, OBJECTPOINT, 102), - - /* Set pointer to private data */ - CINIT(PRIVATE, OBJECTPOINT, 103), - - /* Set aliases for HTTP 200 in the HTTP Response header */ - CINIT(HTTP200ALIASES, OBJECTPOINT, 104), - - /* Continue to send authentication (user+password) when following locations, - even when hostname changed. This can potentially send off the name - and password to whatever host the server decides. */ - CINIT(UNRESTRICTED_AUTH, LONG, 105), - - /* Specifically switch on or off the FTP engine's use of the EPRT command ( - it also disables the LPRT attempt). By default, those ones will always be - attempted before the good old traditional PORT command. */ - CINIT(FTP_USE_EPRT, LONG, 106), - - /* Set this to a bitmask value to enable the particular authentications - methods you like. Use this in combination with CURLOPT_USERPWD. - Note that setting multiple bits may cause extra network round-trips. */ - CINIT(HTTPAUTH, LONG, 107), - - /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx - in second argument. The function must be matching the - curl_ssl_ctx_callback proto. */ - CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108), - - /* Set the userdata for the ssl context callback function's third - argument */ - CINIT(SSL_CTX_DATA, OBJECTPOINT, 109), - - /* FTP Option that causes missing dirs to be created on the remote server. - In 7.19.4 we introduced the convenience enums for this option using the - CURLFTP_CREATE_DIR prefix. - */ - CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110), - - /* Set this to a bitmask value to enable the particular authentications - methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. - Note that setting multiple bits may cause extra network round-trips. */ - CINIT(PROXYAUTH, LONG, 111), - - /* FTP option that changes the timeout, in seconds, associated with - getting a response. This is different from transfer timeout time and - essentially places a demand on the FTP server to acknowledge commands - in a timely manner. */ - CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112), -#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT - - /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to - tell libcurl to resolve names to those IP versions only. This only has - affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ - CINIT(IPRESOLVE, LONG, 113), - - /* Set this option to limit the size of a file that will be downloaded from - an HTTP or FTP server. - - Note there is also _LARGE version which adds large file support for - platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ - CINIT(MAXFILESIZE, LONG, 114), - - /* See the comment for INFILESIZE above, but in short, specifies - * the size of the file being uploaded. -1 means unknown. - */ - CINIT(INFILESIZE_LARGE, OFF_T, 115), - - /* Sets the continuation offset. There is also a LONG version of this; - * look above for RESUME_FROM. - */ - CINIT(RESUME_FROM_LARGE, OFF_T, 116), - - /* Sets the maximum size of data that will be downloaded from - * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. - */ - CINIT(MAXFILESIZE_LARGE, OFF_T, 117), - - /* Set this option to the file name of your .netrc file you want libcurl - to parse (using the CURLOPT_NETRC option). If not set, libcurl will do - a poor attempt to find the user's home directory and check for a .netrc - file in there. */ - CINIT(NETRC_FILE, OBJECTPOINT, 118), - - /* Enable SSL/TLS for FTP, pick one of: - CURLUSESSL_TRY - try using SSL, proceed anyway otherwise - CURLUSESSL_CONTROL - SSL for the control connection or fail - CURLUSESSL_ALL - SSL for all communication or fail - */ - CINIT(USE_SSL, LONG, 119), - - /* The _LARGE version of the standard POSTFIELDSIZE option */ - CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), - - /* Enable/disable the TCP Nagle algorithm */ - CINIT(TCP_NODELAY, LONG, 121), - - /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 123 OBSOLETE. Gone in 7.16.0 */ - /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 127 OBSOLETE. Gone in 7.16.0 */ - /* 128 OBSOLETE. Gone in 7.16.0 */ - - /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option - can be used to change libcurl's default action which is to first try - "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK - response has been received. - - Available parameters are: - CURLFTPAUTH_DEFAULT - let libcurl decide - CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS - CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL - */ - CINIT(FTPSSLAUTH, LONG, 129), - - CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130), - CINIT(IOCTLDATA, OBJECTPOINT, 131), - - /* 132 OBSOLETE. Gone in 7.16.0 */ - /* 133 OBSOLETE. Gone in 7.16.0 */ - - /* zero terminated string for pass on to the FTP server when asked for - "account" info */ - CINIT(FTP_ACCOUNT, OBJECTPOINT, 134), - - /* feed cookies into cookie engine */ - CINIT(COOKIELIST, OBJECTPOINT, 135), - - /* ignore Content-Length */ - CINIT(IGNORE_CONTENT_LENGTH, LONG, 136), - - /* Set to non-zero to skip the IP address received in a 227 PASV FTP server - response. Typically used for FTP-SSL purposes but is not restricted to - that. libcurl will then instead use the same IP address it used for the - control connection. */ - CINIT(FTP_SKIP_PASV_IP, LONG, 137), - - /* Select "file method" to use when doing FTP, see the curl_ftpmethod - above. */ - CINIT(FTP_FILEMETHOD, LONG, 138), - - /* Local port number to bind the socket to */ - CINIT(LOCALPORT, LONG, 139), - - /* Number of ports to try, including the first one set with LOCALPORT. - Thus, setting it to 1 will make no additional attempts but the first. - */ - CINIT(LOCALPORTRANGE, LONG, 140), - - /* no transfer, set up connection and let application use the socket by - extracting it with CURLINFO_LASTSOCKET */ - CINIT(CONNECT_ONLY, LONG, 141), - - /* Function that will be called to convert from the - network encoding (instead of using the iconv calls in libcurl) */ - CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142), - - /* Function that will be called to convert to the - network encoding (instead of using the iconv calls in libcurl) */ - CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143), - - /* Function that will be called to convert from UTF8 - (instead of using the iconv calls in libcurl) - Note that this is used only for SSL certificate processing */ - CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144), - - /* if the connection proceeds too quickly then need to slow it down */ - /* limit-rate: maximum number of bytes per second to send or receive */ - CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), - CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), - - /* Pointer to command string to send if USER/PASS fails. */ - CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147), - - /* callback function for setting socket options */ - CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148), - CINIT(SOCKOPTDATA, OBJECTPOINT, 149), - - /* set to 0 to disable session ID re-use for this transfer, default is - enabled (== 1) */ - CINIT(SSL_SESSIONID_CACHE, LONG, 150), - - /* allowed SSH authentication methods */ - CINIT(SSH_AUTH_TYPES, LONG, 151), - - /* Used by scp/sftp to do public/private key authentication */ - CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152), - CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153), - - /* Send CCC (Clear Command Channel) after authentication */ - CINIT(FTP_SSL_CCC, LONG, 154), - - /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ - CINIT(TIMEOUT_MS, LONG, 155), - CINIT(CONNECTTIMEOUT_MS, LONG, 156), - - /* set to zero to disable the libcurl's decoding and thus pass the raw body - data to the application even when it is encoded/compressed */ - CINIT(HTTP_TRANSFER_DECODING, LONG, 157), - CINIT(HTTP_CONTENT_DECODING, LONG, 158), - - /* Permission used when creating new files and directories on the remote - server for protocols that support it, SFTP/SCP/FILE */ - CINIT(NEW_FILE_PERMS, LONG, 159), - CINIT(NEW_DIRECTORY_PERMS, LONG, 160), - - /* Set the behaviour of POST when redirecting. Values must be set to one - of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ - CINIT(POSTREDIR, LONG, 161), - - /* used by scp/sftp to verify the host's public key */ - CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162), - - /* Callback function for opening socket (instead of socket(2)). Optionally, - callback is able change the address or refuse to connect returning - CURL_SOCKET_BAD. The callback should have type - curl_opensocket_callback */ - CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163), - CINIT(OPENSOCKETDATA, OBJECTPOINT, 164), - - /* POST volatile input fields. */ - CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165), - - /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ - CINIT(PROXY_TRANSFER_MODE, LONG, 166), - - /* Callback function for seeking in the input stream */ - CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167), - CINIT(SEEKDATA, OBJECTPOINT, 168), - - /* CRL file */ - CINIT(CRLFILE, OBJECTPOINT, 169), - - /* Issuer certificate */ - CINIT(ISSUERCERT, OBJECTPOINT, 170), - - /* (IPv6) Address scope */ - CINIT(ADDRESS_SCOPE, LONG, 171), - - /* Collect certificate chain info and allow it to get retrievable with - CURLINFO_CERTINFO after the transfer is complete. */ - CINIT(CERTINFO, LONG, 172), - - /* "name" and "pwd" to use when fetching. */ - CINIT(USERNAME, OBJECTPOINT, 173), - CINIT(PASSWORD, OBJECTPOINT, 174), - - /* "name" and "pwd" to use with Proxy when fetching. */ - CINIT(PROXYUSERNAME, OBJECTPOINT, 175), - CINIT(PROXYPASSWORD, OBJECTPOINT, 176), - - /* Comma separated list of hostnames defining no-proxy zones. These should - match both hostnames directly, and hostnames within a domain. For - example, local.com will match local.com and www.local.com, but NOT - notlocal.com or www.notlocal.com. For compatibility with other - implementations of this, .local.com will be considered to be the same as - local.com. A single * is the only valid wildcard, and effectively - disables the use of proxy. */ - CINIT(NOPROXY, OBJECTPOINT, 177), - - /* block size for TFTP transfers */ - CINIT(TFTP_BLKSIZE, LONG, 178), - - /* Socks Service */ - CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179), - - /* Socks Service */ - CINIT(SOCKS5_GSSAPI_NEC, LONG, 180), - - /* set the bitmask for the protocols that are allowed to be used for the - transfer, which thus helps the app which takes URLs from users or other - external inputs and want to restrict what protocol(s) to deal - with. Defaults to CURLPROTO_ALL. */ - CINIT(PROTOCOLS, LONG, 181), - - /* set the bitmask for the protocols that libcurl is allowed to follow to, - as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs - to be set in both bitmasks to be allowed to get redirected to. Defaults - to all protocols except FILE and SCP. */ - CINIT(REDIR_PROTOCOLS, LONG, 182), - - /* set the SSH knownhost file name to use */ - CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183), - - /* set the SSH host key callback, must point to a curl_sshkeycallback - function */ - CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184), - - /* set the SSH host key callback custom pointer */ - CINIT(SSH_KEYDATA, OBJECTPOINT, 185), - - /* set the SMTP mail originator */ - CINIT(MAIL_FROM, OBJECTPOINT, 186), - - /* set the SMTP mail receiver(s) */ - CINIT(MAIL_RCPT, OBJECTPOINT, 187), - - /* FTP: send PRET before PASV */ - CINIT(FTP_USE_PRET, LONG, 188), - - /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ - CINIT(RTSP_REQUEST, LONG, 189), - - /* The RTSP session identifier */ - CINIT(RTSP_SESSION_ID, OBJECTPOINT, 190), - - /* The RTSP stream URI */ - CINIT(RTSP_STREAM_URI, OBJECTPOINT, 191), - - /* The Transport: header to use in RTSP requests */ - CINIT(RTSP_TRANSPORT, OBJECTPOINT, 192), - - /* Manually initialize the client RTSP CSeq for this handle */ - CINIT(RTSP_CLIENT_CSEQ, LONG, 193), - - /* Manually initialize the server RTSP CSeq for this handle */ - CINIT(RTSP_SERVER_CSEQ, LONG, 194), - - /* The stream to pass to INTERLEAVEFUNCTION. */ - CINIT(INTERLEAVEDATA, OBJECTPOINT, 195), - - /* Let the application define a custom write method for RTP data */ - CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196), - - /* Turn on wildcard matching */ - CINIT(WILDCARDMATCH, LONG, 197), - - /* Directory matching callback called before downloading of an - individual file (chunk) started */ - CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198), - - /* Directory matching callback called after the file (chunk) - was downloaded, or skipped */ - CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199), - - /* Change match (fnmatch-like) callback for wildcard matching */ - CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200), - - /* Let the application define custom chunk data pointer */ - CINIT(CHUNK_DATA, OBJECTPOINT, 201), - - /* FNMATCH_FUNCTION user pointer */ - CINIT(FNMATCH_DATA, OBJECTPOINT, 202), - - /* send linked-list of name:port:address sets */ - CINIT(RESOLVE, OBJECTPOINT, 203), - - /* Set a username for authenticated TLS */ - CINIT(TLSAUTH_USERNAME, OBJECTPOINT, 204), - - /* Set a password for authenticated TLS */ - CINIT(TLSAUTH_PASSWORD, OBJECTPOINT, 205), - - /* Set authentication type for authenticated TLS */ - CINIT(TLSAUTH_TYPE, OBJECTPOINT, 206), - - /* Set to 1 to enable the "TE:" header in HTTP requests to ask for - compressed transfer-encoded responses. Set to 0 to disable the use of TE: - in outgoing requests. The current default is 0, but it might change in a - future libcurl release. - - libcurl will ask for the compressed methods it knows of, and if that - isn't any, it will not ask for transfer-encoding at all even if this - option is set to 1. - - */ - CINIT(TRANSFER_ENCODING, LONG, 207), - - /* Callback function for closing socket (instead of close(2)). The callback - should have type curl_closesocket_callback */ - CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208), - CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209), - - /* allow GSSAPI credential delegation */ - CINIT(GSSAPI_DELEGATION, LONG, 210), - - /* Set the name servers to use for DNS resolution */ - CINIT(DNS_SERVERS, OBJECTPOINT, 211), - - /* Time-out accept operations (currently for FTP only) after this amount - of miliseconds. */ - CINIT(ACCEPTTIMEOUT_MS, LONG, 212), - - /* Set TCP keepalive */ - CINIT(TCP_KEEPALIVE, LONG, 213), - - /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ - CINIT(TCP_KEEPIDLE, LONG, 214), - CINIT(TCP_KEEPINTVL, LONG, 215), - - /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ - CINIT(SSL_OPTIONS, LONG, 216), - - /* Set the SMTP auth originator */ - CINIT(MAIL_AUTH, OBJECTPOINT, 217), - - /* Enable/disable SASL initial response */ - CINIT(SASL_IR, LONG, 218), - - /* Function that will be called instead of the internal progress display - * function. This function should be defined as the curl_xferinfo_callback - * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ - CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219), - - /* The XOAUTH2 bearer token */ - CINIT(XOAUTH2_BEARER, OBJECTPOINT, 220), - - /* Set the interface string to use as outgoing network - * interface for DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_INTERFACE, OBJECTPOINT, 221), - - /* Set the local IPv4 address to use for outgoing DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_LOCAL_IP4, OBJECTPOINT, 222), - - /* Set the local IPv4 address to use for outgoing DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_LOCAL_IP6, OBJECTPOINT, 223), - - /* Set authentication options directly */ - CINIT(LOGIN_OPTIONS, OBJECTPOINT, 224), - - /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ - CINIT(SSL_ENABLE_NPN, LONG, 225), - - /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ - CINIT(SSL_ENABLE_ALPN, LONG, 226), - - /* Time to wait for a response to a HTTP request containing an - * Expect: 100-continue header before sending the data anyway. */ - CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227), - - /* This points to a linked list of headers used for proxy requests only, - struct curl_slist kind */ - CINIT(PROXYHEADER, OBJECTPOINT, 228), - - /* Pass in a bitmask of "header options" */ - CINIT(HEADEROPT, LONG, 229), - - CURLOPT_LASTENTRY /* the last unused */ -} - -#undef LONG -#undef OBJECTPOINT -#undef FUNCTIONPOINT -#undef OFF_T +#if defined _curlconst_included + #endinput +#endif +#define _curlconst_included + +#define CURL_ERROR_SIZE 256 + +/*#if defined(WIN32) +#define CURL_SOCKET_BAD (~0) +#else +#define CURL_SOCKET_BAD -1 +#endif*/ + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_GSSNEGOTIATE - HTTP GSS-Negotiate authentication + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE 0 +#define CURLAUTH_BASIC (1<<0) +#define CURLAUTH_DIGEST (1<<1) +#define CURLAUTH_GSSNEGOTIATE (1<<2) +#define CURLAUTH_NTLM (1<<3) +#define CURLAUTH_DIGEST_IE (1<<4) +#define CURLAUTH_NTLM_WB (1<<5) +#define CURLAUTH_ONLY (1<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* resolve to ipv4 addresses */ +#define CURL_IPRESOLVE_V6 2 /* resolve to ipv6 addresses */ + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +enum curlioerr { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} + +enum curliocmd { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} + +enum curlsocktype { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +} + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + + CURL_SSLVERSION_LAST /* never use, keep last */ +} + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2.0 in the request */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +} + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +} + +enum curl_proxytype { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} /* this enum was added in 7.10 */ + +enum curl_infotype { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +enum CURLFORMcode { + CURL_FORMADD_OK, /* first, no error */ + + CURL_FORMADD_MEMORY, + CURL_FORMADD_OPTION_TWICE, + CURL_FORMADD_NULL, + CURL_FORMADD_UNKNOWN_OPTION, + CURL_FORMADD_INCOMPLETE, + CURL_FORMADD_ILLEGAL_ARRAY, + CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ + + CURL_FORMADD_LAST /* last */ +} + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +enum curl_ftpmethod { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +enum curl_ftpccc { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +enum curl_ftpauth { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +enum curl_ftpcreatedir { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} + +/* parameter for the CURLOPT_USE_SSL option */ +enum curl_usessl { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} + +#define CFINIT(%0) CURLFORM_%0 +enum CURLformoption { + CFINIT(NOTHING), /********* the first one is unused ************/ + + /* */ + CFINIT(COPYNAME), + CFINIT(PTRNAME), + CFINIT(NAMELENGTH), + CFINIT(COPYCONTENTS), + CFINIT(PTRCONTENTS), + CFINIT(CONTENTSLENGTH), + CFINIT(FILECONTENT), + CFINIT(ARRAY), + CFINIT(OBSOLETE), + CFINIT(FILE), + + CFINIT(BUFFER), + CFINIT(BUFFERPTR), + CFINIT(BUFFERLENGTH), + + CFINIT(CONTENTTYPE), + CFINIT(CONTENTHEADER), + CFINIT(FILENAME), + CFINIT(END), + CFINIT(OBSOLETE2), + + CFINIT(STREAM), + + CURLFORM_LASTENTRY /* the last unused */ +} + +#undef CFINIT /* done */ + +enum CURLcode { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_OBSOLETE16, /* 16 - NOT USED */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error + instead of a memory allocation error if CURL_DOES_CONVERSIONS + is defined + */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_CONV_FAILED, /* 75 - conversion failed */ + CURLE_CONV_REQD, /* 76 - caller must register conversion + callbacks using curl_easy_setopt options + CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPT_CONV_TO_NETWORK_FUNCTION, and + CURLOPT_CONV_FROM_UTF8_FUNCTION */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURL_LAST /* never use! */ +} + + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +enum CURLINFO { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, + CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_SLIST + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION = CURLINFO_SLIST + 43, + /* Fill in new entries below here! */ + + CURLINFO_LASTONE = 43 +} + +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 + +#define LONG CURLOPTTYPE_LONG +#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT +#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT +#define OFF_T CURLOPTTYPE_OFF_T + +#define CINIT(%0,%1,%2) CURLOPT_%0 = %1 + %2 + +enum CURLoption { + /* This is the FILE * or void * the regular output should be written to. */ + CINIT(WRITEDATA, OBJECTPOINT, 1), + + /* The full URL to get/put */ + CINIT(URL, OBJECTPOINT, 2), + + /* Port number to connect to, if other than default. */ + CINIT(PORT, LONG, 3), + + /* Name of proxy to use. */ + CINIT(PROXY, OBJECTPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CINIT(USERPWD, OBJECTPOINT, 5), + + /* "user:password" to use with proxy. */ + CINIT(PROXYUSERPWD, OBJECTPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CINIT(RANGE, OBJECTPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CINIT(READDATA, OBJECTPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. If this is not used, error messages go to stderr instead: */ + CINIT(ERRORBUFFER, OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CINIT(READFUNCTION, FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CINIT(TIMEOUT, LONG, 13), + + /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CINIT(INFILESIZE, LONG, 14), + + /* POST static input fields. */ + CINIT(POSTFIELDS, OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CINIT(REFERER, OBJECTPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CINIT(FTPPORT, OBJECTPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CINIT(USERAGENT, OBJECTPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CINIT(LOW_SPEED_LIMIT, LONG, 19), + + /* Set the "low speed time" */ + CINIT(LOW_SPEED_TIME, LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CINIT(RESUME_FROM, LONG, 21), + + /* Set cookie in request: */ + CINIT(COOKIE, OBJECTPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CINIT(HTTPHEADER, OBJECTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CINIT(HTTPPOST, OBJECTPOINT, 24), + + /* name of the file keeping your private SSL-certificate */ + CINIT(SSLCERT, OBJECTPOINT, 25), + + /* password for the SSL or SSH private key */ + CINIT(KEYPASSWD, OBJECTPOINT, 26), + + /* send TYPE parameter? */ + CINIT(CRLF, LONG, 27), + + /* send linked-list of QUOTE commands */ + CINIT(QUOTE, OBJECTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CINIT(HEADERDATA, OBJECTPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CINIT(COOKIEFILE, OBJECTPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CINIT(SSLVERSION, LONG, 32), + + /* What kind of HTTP time condition to use, see defines */ + CINIT(TIMECONDITION, LONG, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CINIT(TIMEVALUE, LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CINIT(CUSTOMREQUEST, OBJECTPOINT, 36), + + /* HTTP request, for odd commands like DELETE, TRACE and others */ + CINIT(STDERR, OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CINIT(POSTQUOTE, OBJECTPOINT, 39), + + CINIT(OBSOLETE40, OBJECTPOINT, 40), /* OBSOLETE, do not use! */ + + CINIT(VERBOSE, LONG, 41), /* talk a lot */ + CINIT(HEADER, LONG, 42), /* throw the header out too */ + CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */ + CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */ + CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */ + CINIT(UPLOAD, LONG, 46), /* this is an upload */ + CINIT(POST, LONG, 47), /* HTTP POST method */ + CINIT(DIRLISTONLY, LONG, 48), /* bare names when listing directories */ + + CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */ + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CINIT(NETRC, LONG, 51), + + CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */ + + CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */ + CINIT(PUT, LONG, 54), /* HTTP PUT */ + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CINIT(PROGRESSDATA, OBJECTPOINT, 57), +#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA + + /* We want the referrer field set automatically when following locations */ + CINIT(AUTOREFERER, LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CINIT(PROXYPORT, LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CINIT(POSTFIELDSIZE, LONG, 60), + + /* tunnel non-http operations through a HTTP proxy */ + CINIT(HTTPPROXYTUNNEL, LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CINIT(INTERFACE, OBJECTPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CINIT(KRBLEVEL, OBJECTPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CINIT(SSL_VERIFYPEER, LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAINFO, OBJECTPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CINIT(MAXREDIRS, LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CINIT(FILETIME, LONG, 69), + + /* This points to a linked list of telnet options */ + CINIT(TELNETOPTIONS, OBJECTPOINT, 70), + + /* Max amount of cached alive connections */ + CINIT(MAXCONNECTS, LONG, 71), + + CINIT(OBSOLETE72, LONG, 72), /* OBSOLETE, do not use! */ + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CINIT(FRESH_CONNECT, LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be re-used + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CINIT(FORBID_REUSE, LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CINIT(RANDOM_FILE, OBJECTPOINT, 76), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CINIT(EGDSOCKET, OBJECTPOINT, 77), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CINIT(CONNECTTIMEOUT, LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CINIT(HTTPGET, LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CINIT(SSL_VERIFYHOST, LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CINIT(COOKIEJAR, OBJECTPOINT, 82), + + /* Specify which SSL ciphers to use */ + CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CINIT(HTTP_VERSION, LONG, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CINIT(FTP_USE_EPSV, LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CINIT(SSLCERTTYPE, OBJECTPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CINIT(SSLKEY, OBJECTPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CINIT(SSLKEYTYPE, OBJECTPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CINIT(SSLENGINE, OBJECTPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CINIT(SSLENGINE_DEFAULT, LONG, 90), + + /* Non-zero value means to use the global dns cache */ + CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* DEPRECATED, do not use! */ + + /* DNS cache timeout */ + CINIT(DNS_CACHE_TIMEOUT, LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CINIT(PREQUOTE, OBJECTPOINT, 93), + + /* set the debug function */ + CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CINIT(DEBUGDATA, OBJECTPOINT, 95), + + /* mark this as start of a cookie session */ + CINIT(COOKIESESSION, LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAPATH, OBJECTPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CINIT(BUFFERSIZE, LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CINIT(NOSIGNAL, LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CINIT(SHARE, OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */ + CINIT(PROXYTYPE, LONG, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CINIT(ACCEPT_ENCODING, OBJECTPOINT, 102), + + /* Set pointer to private data */ + CINIT(PRIVATE, OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CINIT(HTTP200ALIASES, OBJECTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CINIT(UNRESTRICTED_AUTH, LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CINIT(FTP_USE_EPRT, LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(HTTPAUTH, LONG, 107), + + /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx + in second argument. The function must be matching the + curl_ssl_ctx_callback proto. */ + CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CINIT(SSL_CTX_DATA, OBJECTPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(PROXYAUTH, LONG, 111), + + /* FTP option that changes the timeout, in seconds, associated with + getting a response. This is different from transfer timeout time and + essentially places a demand on the FTP server to acknowledge commands + in a timely manner. */ + CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112), +#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to resolve names to those IP versions only. This only has + affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CINIT(IPRESOLVE, LONG, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CINIT(MAXFILESIZE, LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CINIT(INFILESIZE_LARGE, OFF_T, 115), + + /* Sets the continuation offset. There is also a LONG version of this; + * look above for RESUME_FROM. + */ + CINIT(RESUME_FROM_LARGE, OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CINIT(MAXFILESIZE_LARGE, OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CINIT(NETRC_FILE, OBJECTPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CINIT(USE_SSL, LONG, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CINIT(TCP_NODELAY, LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CINIT(FTPSSLAUTH, LONG, 129), + + CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130), + CINIT(IOCTLDATA, OBJECTPOINT, 131), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* zero terminated string for pass on to the FTP server when asked for + "account" info */ + CINIT(FTP_ACCOUNT, OBJECTPOINT, 134), + + /* feed cookies into cookie engine */ + CINIT(COOKIELIST, OBJECTPOINT, 135), + + /* ignore Content-Length */ + CINIT(IGNORE_CONTENT_LENGTH, LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CINIT(FTP_SKIP_PASV_IP, LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CINIT(FTP_FILEMETHOD, LONG, 138), + + /* Local port number to bind the socket to */ + CINIT(LOCALPORT, LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CINIT(LOCALPORTRANGE, LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CINIT(CONNECT_ONLY, LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), + CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147), + + /* callback function for setting socket options */ + CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148), + CINIT(SOCKOPTDATA, OBJECTPOINT, 149), + + /* set to 0 to disable session ID re-use for this transfer, default is + enabled (== 1) */ + CINIT(SSL_SESSIONID_CACHE, LONG, 150), + + /* allowed SSH authentication methods */ + CINIT(SSH_AUTH_TYPES, LONG, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152), + CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CINIT(FTP_SSL_CCC, LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CINIT(TIMEOUT_MS, LONG, 155), + CINIT(CONNECTTIMEOUT_MS, LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CINIT(HTTP_TRANSFER_DECODING, LONG, 157), + CINIT(HTTP_CONTENT_DECODING, LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CINIT(NEW_FILE_PERMS, LONG, 159), + CINIT(NEW_DIRECTORY_PERMS, LONG, 160), + + /* Set the behaviour of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CINIT(POSTREDIR, LONG, 161), + + /* used by scp/sftp to verify the host's public key */ + CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163), + CINIT(OPENSOCKETDATA, OBJECTPOINT, 164), + + /* POST volatile input fields. */ + CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CINIT(PROXY_TRANSFER_MODE, LONG, 166), + + /* Callback function for seeking in the input stream */ + CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167), + CINIT(SEEKDATA, OBJECTPOINT, 168), + + /* CRL file */ + CINIT(CRLFILE, OBJECTPOINT, 169), + + /* Issuer certificate */ + CINIT(ISSUERCERT, OBJECTPOINT, 170), + + /* (IPv6) Address scope */ + CINIT(ADDRESS_SCOPE, LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CINIT(CERTINFO, LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CINIT(USERNAME, OBJECTPOINT, 173), + CINIT(PASSWORD, OBJECTPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CINIT(PROXYUSERNAME, OBJECTPOINT, 175), + CINIT(PROXYPASSWORD, OBJECTPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CINIT(NOPROXY, OBJECTPOINT, 177), + + /* block size for TFTP transfers */ + CINIT(TFTP_BLKSIZE, LONG, 178), + + /* Socks Service */ + CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179), + + /* Socks Service */ + CINIT(SOCKS5_GSSAPI_NEC, LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CINIT(PROTOCOLS, LONG, 181), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. Defaults + to all protocols except FILE and SCP. */ + CINIT(REDIR_PROTOCOLS, LONG, 182), + + /* set the SSH knownhost file name to use */ + CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CINIT(SSH_KEYDATA, OBJECTPOINT, 185), + + /* set the SMTP mail originator */ + CINIT(MAIL_FROM, OBJECTPOINT, 186), + + /* set the SMTP mail receiver(s) */ + CINIT(MAIL_RCPT, OBJECTPOINT, 187), + + /* FTP: send PRET before PASV */ + CINIT(FTP_USE_PRET, LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CINIT(RTSP_REQUEST, LONG, 189), + + /* The RTSP session identifier */ + CINIT(RTSP_SESSION_ID, OBJECTPOINT, 190), + + /* The RTSP stream URI */ + CINIT(RTSP_STREAM_URI, OBJECTPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CINIT(RTSP_TRANSPORT, OBJECTPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CINIT(RTSP_CLIENT_CSEQ, LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CINIT(RTSP_SERVER_CSEQ, LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CINIT(INTERLEAVEDATA, OBJECTPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CINIT(WILDCARDMATCH, LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CINIT(CHUNK_DATA, OBJECTPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CINIT(FNMATCH_DATA, OBJECTPOINT, 202), + + /* send linked-list of name:port:address sets */ + CINIT(RESOLVE, OBJECTPOINT, 203), + + /* Set a username for authenticated TLS */ + CINIT(TLSAUTH_USERNAME, OBJECTPOINT, 204), + + /* Set a password for authenticated TLS */ + CINIT(TLSAUTH_PASSWORD, OBJECTPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CINIT(TLSAUTH_TYPE, OBJECTPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CINIT(TRANSFER_ENCODING, LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208), + CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209), + + /* allow GSSAPI credential delegation */ + CINIT(GSSAPI_DELEGATION, LONG, 210), + + /* Set the name servers to use for DNS resolution */ + CINIT(DNS_SERVERS, OBJECTPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of miliseconds. */ + CINIT(ACCEPTTIMEOUT_MS, LONG, 212), + + /* Set TCP keepalive */ + CINIT(TCP_KEEPALIVE, LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CINIT(TCP_KEEPIDLE, LONG, 214), + CINIT(TCP_KEEPINTVL, LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CINIT(SSL_OPTIONS, LONG, 216), + + /* Set the SMTP auth originator */ + CINIT(MAIL_AUTH, OBJECTPOINT, 217), + + /* Enable/disable SASL initial response */ + CINIT(SASL_IR, LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CINIT(XOAUTH2_BEARER, OBJECTPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CINIT(DNS_INTERFACE, OBJECTPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CINIT(DNS_LOCAL_IP4, OBJECTPOINT, 222), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CINIT(DNS_LOCAL_IP6, OBJECTPOINT, 223), + + /* Set authentication options directly */ + CINIT(LOGIN_OPTIONS, OBJECTPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CINIT(SSL_ENABLE_NPN, LONG, 225), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CINIT(SSL_ENABLE_ALPN, LONG, 226), + + /* Time to wait for a response to a HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CINIT(PROXYHEADER, OBJECTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CINIT(HEADEROPT, LONG, 229), + + CURLOPT_LASTENTRY /* the last unused */ +} + +#undef LONG +#undef OBJECTPOINT +#undef FUNCTIONPOINT +#undef OFF_T #undef CINIT \ No newline at end of file diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc index 352f24f..4124711 100755 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc @@ -1,100 +1,100 @@ -#if defined _shop_sms_included - #endinput -#endif -#define _shop_sms_included - -#pragma library "shop_sms" - -#include - -native ss_register_service(const service_id[]); -/*------------------------------ - * Rejestruje usluge, ktora bedzie pozniej dostepna w sklepie - * --------------------------- - * service_id[] - id uslugi -------------------------------*/ - -native ss_open_payment_method_menu(id); -/*------------------------------ - * Kontynuuje proces zakupu po zwroceniu wartosci SS_STOP w forwardzie ss_service_chosen - * --------------------------- - * id - index gracza dokonujacego zakupu -------------------------------*/ - -native ss_show_service_purchase(id, const service_id[]); -/*------------------------------ - * Wyswietla menu z zakupem danej uslugi - * --------------------------- - * id - index gracza dokonujacego zakupu - * service_id[] - id uslugi do zakupienia -------------------------------*/ - -native ss_log(const message[], any:...); -/*------------------------------ - * Dodaje informacje do log�w. -------------------------------*/ - -native bool:ss_is_steam(id); -/*------------------------------ - * Sprawdza, czy gracz ma steama - * --------------------------- - * id - index gracza -------------------------------*/ - -forward ss_service_data(name[], flags[]); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) - * w momencie pobrania danych o usludze. - * --------------------------- - * name[] - nazwa uslugi - * flags[] - flagi danej uslugi - * --------------------------- - */ - -forward ss_service_addingtolist(id); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) - * w momencie dodawania uslugi do menu z uslugami. - * Funkcja powinna zwracać jedną z dwóch wartosci: - * ITEM_ENABLED - usluga ma byc dostepna - * ITEM_DISABLED - usluga ma byc niedostepna - * --------------------------- - * id - index gracza dokonujacego zakupu -------------------------------*/ - -forward ss_service_chosen(id, quantity); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) - * w momencie wybrania uslugi. - * Funkcja powinna zwracac jedna z dwoch wartosci: - * SS_OK - * SS_STOP - gdy chcemy na pewien czas zatrzymać proces wykupowania usługi. - * Potem musimy go wznowić za pomoca natywu ss_open_payment_method_menu. - * --------------------------- - * id - index gracza dokonujacego zakupu - * quantity - wybrana ilosc ( opcja ) -------------------------------*/ - -forward ss_service_bought(id, quantity); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) w momencie zakupu uslugi. - * Mozna zwrocic wartosc SS_ERROR w przypadku wystapienia bledu przy dodawaniu uslugi. - * --------------------------- - * id - index gracza dokonujacego zakupu - * quantity - ilosc wykupionej uslugi -------------------------------*/ - -forward ss_client_access(id, flags); -/*------------------------------ - * Forward wysylany do wszystkich pluginow w momencie przypisania uzytkownikowi flag. - * Zwracana wartosc jest ignorowana. - * --------------------------- - * id - index gracza - * flags - flagi, ktore zostaly ustawione uzytkownikowi -------------------------------*/ - -stock pause_plugin() { - static szFile[32]; - get_plugin(-1, szFile, sizeof szFile); - pause("ad", szFile); -} +#if defined _shop_sms_included + #endinput +#endif +#define _shop_sms_included + +#pragma library "shop_sms" + +#include + +native ss_register_service(const service_id[]); +/*------------------------------ + * Rejestruje usluge, ktora bedzie pozniej dostepna w sklepie + * --------------------------- + * service_id[] - id uslugi +------------------------------*/ + +native ss_open_payment_method_menu(id); +/*------------------------------ + * Kontynuuje proces zakupu po zwroceniu wartosci SS_STOP w forwardzie ss_service_chosen + * --------------------------- + * id - index gracza dokonujacego zakupu +------------------------------*/ + +native ss_show_service_purchase(id, const service_id[]); +/*------------------------------ + * Wyswietla menu z zakupem danej uslugi + * --------------------------- + * id - index gracza dokonujacego zakupu + * service_id[] - id uslugi do zakupienia +------------------------------*/ + +native ss_log(const message[], any:...); +/*------------------------------ + * Dodaje informacje do log�w. +------------------------------*/ + +native bool:ss_is_steam(id); +/*------------------------------ + * Sprawdza, czy gracz ma steama + * --------------------------- + * id - index gracza +------------------------------*/ + +forward ss_service_data(name[], flags[]); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) + * w momencie pobrania danych o usludze. + * --------------------------- + * name[] - nazwa uslugi + * flags[] - flagi danej uslugi + * --------------------------- + */ + +forward ss_service_addingtolist(id); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) + * w momencie dodawania uslugi do menu z uslugami. + * Funkcja powinna zwracać jedną z dwóch wartosci: + * ITEM_ENABLED - usluga ma byc dostepna + * ITEM_DISABLED - usluga ma byc niedostepna + * --------------------------- + * id - index gracza dokonujacego zakupu +------------------------------*/ + +forward ss_service_chosen(id, quantity); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) + * w momencie wybrania uslugi. + * Funkcja powinna zwracac jedna z dwoch wartosci: + * SS_OK + * SS_STOP - gdy chcemy na pewien czas zatrzymać proces wykupowania usługi. + * Potem musimy go wznowić za pomoca natywu ss_open_payment_method_menu. + * --------------------------- + * id - index gracza dokonujacego zakupu + * quantity - wybrana ilosc ( opcja ) +------------------------------*/ + +forward ss_service_bought(id, quantity); +/*------------------------------ + * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) w momencie zakupu uslugi. + * Mozna zwrocic wartosc SS_ERROR w przypadku wystapienia bledu przy dodawaniu uslugi. + * --------------------------- + * id - index gracza dokonujacego zakupu + * quantity - ilosc wykupionej uslugi +------------------------------*/ + +forward ss_client_access(id, flags); +/*------------------------------ + * Forward wysylany do wszystkich pluginow w momencie przypisania uzytkownikowi flag. + * Zwracana wartosc jest ignorowana. + * --------------------------- + * id - index gracza + * flags - flagi, ktore zostaly ustawione uzytkownikowi +------------------------------*/ + +stock pause_plugin() { + static szFile[32]; + get_plugin(-1, szFile, sizeof szFile); + pause("ad", szFile); +} From a8959c795db87524ab9e3603804471cc0b86ed27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 4 Apr 2020 17:18:31 +0200 Subject: [PATCH 091/124] Display info when user is given an access --- .../addons/amxmodx/scripting/sklep_sms.sma | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 61aa43a..9b8dc47 100755 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -290,16 +290,20 @@ public client_authorized(id) } #endif - _assignPlayerFlags(id); -} - -public client_putinserver(id) -{ - _assignPlayerFlags(id); + new access = _assignPlayerFlags(id); + + if (access) { + new name[MAX_NAME + 1], steam_id[MAX_SID + 1], ip[MAX_IP + 1], flags[MAX_FLAGS + 1]; + get_user_name(id, name, charsmax(name)); + get_user_authid(id, steam_id, charsmax(steam_id)); + get_user_ip(id, ip, charsmax(ip), true); + get_flags(access, flags, charsmax(flags)); + log_amx("User: ^"%s<%d><%s><%s>^" was given an access ^"%s^"", name, get_user_userid(id), steam_id, ip, flags); + } } public amxbans_sql_initialized() -{ +{ _reassignPlayersFlags(); } @@ -785,9 +789,11 @@ _addUsersToGlobalArray() _assignPlayerFlags(id) { - if (! g_playersLoaded) { - return; + if (!g_playersLoaded) { + return 0; } + + new access = 0; for (new i = 0; i < ArraySize(g_playersFlags); ++i) { new player_flags[e_PlayerFlags]; @@ -832,18 +838,24 @@ _assignPlayerFlags(id) if (player_flags[pfTYPE]&FLAG_KICK) { server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INVALID_PASSWORD"); - return; + return 0; } // Do not kick the player, instead do not assign him any flags continue; } - set_user_flags(id, player_flags[pfFLAGS]); + access |= player_flags[pfFLAGS]; + } + if (access) { + set_user_flags(id, access); + new ret; - ExecuteForward(forwrdClientAccess, ret, id, player_flags[pfFLAGS]); + ExecuteForward(forwrdClientAccess, ret, id, access); } + + return access; } _checkPassword(id, const tag[], const valid_password[]) From 423ec22701f103b4a16925d6616a5520dd2a5780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 5 Apr 2020 14:59:51 +0200 Subject: [PATCH 092/124] Version 3.10.2-rc.1 --- cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index c8bfe1e..6aad9e2 100755 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,7 +5,7 @@ #pragma library "shop_sms_const" -#define VERSION "3.10.1" +#define VERSION "3.10.2-rc.1" #define PREFIX "SKLEP-SMS" From cbbe9e571850563c0720e1ff544f174911d0e9a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 19 Apr 2020 14:02:10 +0200 Subject: [PATCH 093/124] Remove polish comments --- .../addons/amxmodx/scripting/sklep_sms.sma | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 9b8dc47..8ebe8b8 100755 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -596,6 +596,9 @@ _stopPlugins() } } +/** + * Load players flags from API + */ public loadPlayersFlags() { new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1], url[MAX_URL + 1]; @@ -955,8 +958,7 @@ _openShopMenu(id) new data[4]; data[0] = i + 1; ArrayGetArray(g_services, i, service); - - // Sforamtuj punkt w menu + if (service[DESCRIPTION]) { formatex(szText, charsmax(szText), "Kup %s \d(%s)", service[sNAME], service[DESCRIPTION]); } @@ -1021,8 +1023,7 @@ _openPricingMenu(id, service_id) new price[e_Price]; for (new i = 0; i < ArraySize(g_prices); ++i) { ArrayGetArray(g_prices, i, price); - - // ID usługi jest inne + if (!equali(price[pSERVICE_ID], service[sID])) { continue; } @@ -1047,7 +1048,8 @@ _openPricingMenu(id, service_id) ); data[0] = service_id+1; - data[1] = min(127, i); // TODO: Problem przy ilosci uslug powyzej 256! + // Prices count limit is 256 + data[1] = min(127, i); data[2] = min(127, i-data[1]); menu_additem(menu, szText, data); @@ -1056,13 +1058,12 @@ _openPricingMenu(id, service_id) if (menu_items(menu) > 1) { menu_display(id, menu); } - // Jezeli jest tylko jeden item, przejdz od razu do informacji o smsie + // If there is only one element in the menu, let's choose it right away else if (menu_items(menu) == 1) { which_service[id] = service_id; which_price[id] = data[1]+data[2]; _openServiceTypeMenu(id); } - // Zero else { client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); } @@ -1090,8 +1091,7 @@ _openServiceTypeMenu(id) new service[e_Service]; ArrayGetArray(g_services, which_service[id], service); - if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { - // Wyswietlamy menu z wyborem na co chcemy kupic usluge + if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { new menu = menu_create("Wybierz typ uslugi", "serviceTypeMenu_handler"); new menu_callback = menu_makecallback("serviceTypeMenu_callback"); @@ -1463,16 +1463,14 @@ _handleServicePurchase(id) new quantity[32 + 1]; _getPriceQuantity(which_price[id], which_service[id], quantity, charsmax(quantity)); - // Wystapil jakis blad if (ret == SS_ERROR) { client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, g_contact); _logActor(id, "Wystapil blad podczas kupowania %s - %s; Kwota: %d", service[sNAME], quantity, price[SMS_PRICE]); return; } - // Info w przypadku usługi na haslo if (b_types[id] & (TYPE_NICK | TYPE_IP)) { - // Ustawienie hasla + // Set user a password client_cmd(id, "setinfo _ss ^"%s^"", b_passwords[id]); formatex(g_szTemp, charsmax(g_szTemp), @@ -1499,9 +1497,9 @@ _handleServicePurchase(id) client_print_color(id, Blue, "^4[%s] ^1Prawidlowo zakupiono ^4%s^1: %s", PREFIX, service[sNAME], quantity); - // Jezeli usluga ma flagi do ustawienia to wczytujemy ponownie dane z bazy + // If the service has flags assigned then let's reload players flags + // Reload has to be delayed a little bit so that user password would be loaded already if (service[FLAGS]) { - // Musimy przeladowac z opoznieniem, aby dane uzytkownika zalapaly nowe haslo set_task(2.0, "loadPlayersFlags"); } } From 2862021acd159c980f49828bec3115d166ff1e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 19 Apr 2020 15:15:20 +0200 Subject: [PATCH 094/124] English translations --- cstrike/addons/amxmodx/configs/shopsms.cfg | 34 +++ cstrike/addons/amxmodx/configs/sklep_sms.cfg | 34 --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 18 +- .../scripting/include/shop_sms_const.inc | 4 +- .../addons/amxmodx/scripting/sklep_sms.sma | 196 ++++++++++-------- 5 files changed, 159 insertions(+), 127 deletions(-) create mode 100644 cstrike/addons/amxmodx/configs/shopsms.cfg delete mode 100644 cstrike/addons/amxmodx/configs/sklep_sms.cfg diff --git a/cstrike/addons/amxmodx/configs/shopsms.cfg b/cstrike/addons/amxmodx/configs/shopsms.cfg new file mode 100644 index 0000000..b72676c --- /dev/null +++ b/cstrike/addons/amxmodx/configs/shopsms.cfg @@ -0,0 +1,34 @@ +// ---------------------------------- +// SHOP SMS: - Configuration file +// ---------------------------------- + +// Turn the shop On / Off +// 1 - ON +// 0 - OFF +shopsms_on "1" + +// Comma-separated commands list, which can be used via chat, to display the shop menu +shopsms_shop_commands "/sklepsms,/shopsms" + +// Comma-separated commands list, which can be used via chat, to reload players flags +shopsms_reload_commands "/przeladuj" + +// Comma-separated commands list, which can be used via chat, to display your active services +shopsms_services_commands "/uslugi" + +// Should the above commands be visible on the chat after usage +shopsms_silent_commands "0" + +// How often (seconds) should the shop commercial be displayed on the chat? 0 - never +shopsms_commercial "137" + + +// ##################### +// ### Shop WEB ### +// ##################### + +// Shop URL +shopsms_url "" + +// Server token +shopsms_token "" diff --git a/cstrike/addons/amxmodx/configs/sklep_sms.cfg b/cstrike/addons/amxmodx/configs/sklep_sms.cfg deleted file mode 100644 index bdf5af4..0000000 --- a/cstrike/addons/amxmodx/configs/sklep_sms.cfg +++ /dev/null @@ -1,34 +0,0 @@ -// ---------------------------------- -// SKLEP SMS: - Plik Konfiguracyjny -// ---------------------------------- - -// Wlacza / Wylacza sklep -// 1 - wlaczony -// 0 - wylaczony -sklepsms_on "1" - -// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu wyswietlenia menu sklepie -sklepsms_sklep_komenda "/sklepsms,/shopsms" - -// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu przeladowania flag wykupionych w sklepie -sklepsms_przeladuj_komenda "/przeladuj" - -// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, aby zobaczyc swoje aktywne uslugi -sklepsms_uslugi_komenda "/uslugi" - -// Czy po uzyciu powyzszych komend wyswietla sie one w chacie -sklepsms_ciche_komendy "0" - -// Wyswietlac informacje o sklepie na chacie? -sklepsms_info "1" - - -// ##################### -// ### Dane Sklepu ### -// ##################### - -// Adres URL -sklepsms_url "" - -// Token -sklepsms_token "" diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 652943b..cc686b0 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -1,5 +1,21 @@ [en] +CHOOSE_SERVICE = Choose service: +COMMERCIAL = We invite everyone to use ^3the store! ^1Just type: ^4%s +CONTACT_US = In case of an issue contact us INVALID_PASSWORD = Invalid password +LICENSE_VALIDATION_FAILED = License validation failed. +SHOP_IS_BLOCKED = There are shop related errors. Check logs. +SHOP_IS_DISABLED = Shop is ^3disabled^1. +SHOP_SMS = Shop SMS +NO_AVAILABLE_SERVICE = No services available for purchase. [pl] -INVALID_PASSWORD = Nieprawidlowe haslo +CHOOSE_SERVICE = Wybierz usługę: +CONTACT_US = W razie problemów skontaktuj się z nami +COMMERCIAL = Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisać: ^4%s +INVALID_PASSWORD = Nieprawidlowe hasło +LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. +SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. +SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. +SHOP_SMS = Sklep SMS +NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. \ No newline at end of file diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc index 6aad9e2..65d65f1 100755 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc @@ -5,9 +5,9 @@ #pragma library "shop_sms_const" -#define VERSION "3.10.2-rc.1" +#define VERSION "3.11.0-rc.1" -#define PREFIX "SKLEP-SMS" +#define PREFIX "SHOP-SMS" #define SS_OK -1 #define SS_ERROR -2 diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/sklep_sms.sma index 8ebe8b8..b635f12 100755 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/sklep_sms.sma @@ -25,8 +25,8 @@ forward amxx_admin_access(id, flags, timestamp); #define KEYS (1<<0)|(1<<9) // Keys: 10 // LOGS -new const CFG_FILE[] = "sklep_sms.cfg"; -new const LOG_FILE[] = "sklep_sms.log"; +new const CFG_FILE[] = "shopsms.cfg"; +new const LOG_FILE[] = "shopsms.log"; const MAX_COMMAND = 32; const MAX_CONTACT = 64; @@ -69,8 +69,15 @@ new const VAULT_PLAYER_FLAGS_KEY[] = "player_flags"; new forwrdClientAccess; // CVARs -new cvar_on, cvar_show_info, cvar_sklep, cvar_przeladuj, cvar_uslugi, cvar_shop_url, cvar_token, cvar_silent_command; -new show_info; +new g_cvarOn, + g_cvarCommercial, + g_cvarShopCommands, + g_cvarReloadCommands, + g_cvarServicesCommands, + g_cvarSilentCommands, + g_cvarShopUrl, + g_cvarShopToken; + new Trie:g_shopCommands, Trie:g_serviceListCommands, Trie:g_reloadCommands; @@ -170,14 +177,14 @@ public plugin_precache() _createShopSmsConfigFile(); - cvar_on = register_cvar("sklepsms_on", "1"); - cvar_sklep = register_cvar("sklepsms_sklep_komenda", "/sklepsms,/shopsms"); - cvar_przeladuj = register_cvar("sklepsms_przeladuj_komenda", "/przeladuj"); - cvar_uslugi = register_cvar("sklepsms_uslugi_komenda", "/uslugi"); - cvar_show_info = register_cvar("sklepsms_info", "1"); - cvar_shop_url = register_cvar("sklepsms_url", ""); - cvar_token = register_cvar("sklepsms_token", ""); - cvar_silent_command = register_cvar("sklepsms_ciche_komendy", "0"); + g_cvarOn = register_cvar("shopsms_on", "1"); + g_cvarShopCommands = register_cvar("shopsms_shop_commands", "/shopsms,/sklepsms"); + g_cvarReloadCommands = register_cvar("shopsms_reload_commands", "/przeladuj"); + g_cvarServicesCommands = register_cvar("shopsms_services_commands", "/uslugi"); + g_cvarCommercial = register_cvar("shopsms_commercial", "137"); + g_cvarShopUrl = register_cvar("shopsms_url", ""); + g_cvarShopToken = register_cvar("shopsms_token", ""); + g_cvarSilentCommands = register_cvar("shopsms_silent_commands", "0"); // Read config if (file_exists(g_configPath)) { @@ -214,8 +221,9 @@ public plugin_init() register_clcmd("say", "sayHook"); register_clcmd("say_team", "sayHook"); - if (show_info) { - set_task(137.0, "displayCommercial", _, _, _, "b"); + new Float:time = get_pcvar_float(g_cvarCommercial); + if (time) { + set_task(get_pcvar_float(g_cvarCommercial), "displayCommercial"); } g_signature = random_num(1, 99999999); @@ -270,16 +278,14 @@ public plugin_end() _loadCvars() { - get_pcvar_string(cvar_sklep, g_szTemp, charsmax(g_szTemp)); + get_pcvar_string(g_cvarShopCommands, g_szTemp, charsmax(g_szTemp)); _explodeCommands(g_szTemp, g_shopCommands); - get_pcvar_string(cvar_przeladuj, g_szTemp, charsmax(g_szTemp)); + get_pcvar_string(g_cvarReloadCommands, g_szTemp, charsmax(g_szTemp)); _explodeCommands(g_szTemp, g_reloadCommands); - get_pcvar_string(cvar_uslugi, g_szTemp, charsmax(g_szTemp)); + get_pcvar_string(g_cvarServicesCommands, g_szTemp, charsmax(g_szTemp)); _explodeCommands(g_szTemp, g_serviceListCommands); - - show_info = get_pcvar_num(cvar_show_info); } public client_authorized(id) @@ -333,7 +339,7 @@ public sayHook(id) _showPlayerServices(id); } - return get_pcvar_num(cvar_silent_command) ? PLUGIN_HANDLED : PLUGIN_CONTINUE; + return get_pcvar_num(g_cvarSilentCommands) ? PLUGIN_HANDLED : PLUGIN_CONTINUE; } // @@ -924,71 +930,72 @@ _openShopMenu(id) if (!is_user_connected(id)) { return; } - - if (!get_pcvar_num(cvar_on)) { - client_print_color(id, Red, "^4[%s] ^1Sklep jest obecnie ^3wylaczony^1.", PREFIX); + + if (!get_pcvar_num(g_cvarOn)) { + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "SHOP_IS_DISABLED"); return; } - + if (g_blocked) { - client_print_color(id, Red, "^4[%s] ^1Wystapily bledy ze sklepem, zobacz logi.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "SHOP_IS_BLOCKED"); } - + if (!ArraySize(g_services)) { - client_print_color(id, Red, "^4[%s] ^1Brak dostepnych uslug do kupienia.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "NO_AVAILABLE_SERVICE"); return; } - + if (!g_licenseValidated) { - client_print_color(id, Red, "^4[%s] ^1Nie udalo sie przeprowadzic walidacji licencji.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "LICENSE_VALIDATION_FAILED"); return; } - - new menu; + + new menu_title[64]; if (g_footer) { - menu = menu_create("\rSklep SMS\d napedzany przez\w sklep-sms.pl^n\yWybierz usluge:", "shopMenu_handler"); + formatex(menu_title, charsmax(menu_title), "\r%L\d powered by\w sklep-sms.pl^n\y%L", id, "SHOP_SMS", id, "CHOOSE_SERVICE"); } else { - menu = menu_create("\rSklep SMS^n\yWybierz usluge:", "shopMenu_handler"); + formatex(menu_title, charsmax(menu_title), "\r%L^n\y%L", id, "SHOP_SMS", id, "CHOOSE_SERVICE"); } - + + new menu = menu_create(menu_title, "shopMenu_handler"); new menu_callback = menu_makecallback("shopMenu_callback"); - - new szText[64], service[e_Service]; + + new menu_text[64], service[e_Service]; for (new i = 0; i < ArraySize(g_services); ++i) { new data[4]; data[0] = i + 1; ArrayGetArray(g_services, i, service); if (service[DESCRIPTION]) { - formatex(szText, charsmax(szText), "Kup %s \d(%s)", service[sNAME], service[DESCRIPTION]); + formatex(menu_text, charsmax(menu_text), "%s \d(%s)", service[sNAME], service[DESCRIPTION]); } else { - formatex(szText, charsmax(szText), "Kup %s", service[sNAME]); + formatex(menu_text, charsmax(menu_text), "%s", service[sNAME]); } - + new ret; new forward_handle = CreateOneForward(service[PLUGIN], "ss_service_addingtolist", FP_CELL); ExecuteForward(forward_handle, ret, id); DestroyForward(forward_handle); - + data[1] = ret; - + if (data[1] != ITEM_OFF) { - menu_additem(menu, szText, data, 0, menu_callback); + menu_additem(menu, menu_text, data, 0, menu_callback); } } menu_display(id, menu); - - client_print_color(id, Red, "^4[%s] ^1W razie problemow mozesz sie z nami skontaktowac", PREFIX); - client_print_color(id, Red, "^4[%s] ^1poprzez: ^3%s", PREFIX, g_contact); + + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "CONTACT_US"); + client_print_color(id, Red, "^4[%s] ^3%s", PREFIX, g_contact); } public shopMenu_callback(id, menu, item) { new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - + return data[1] == ITEM_DISABLED ? ITEM_DISABLED : ITEM_ENABLED; } @@ -998,10 +1005,10 @@ public shopMenu_handler(id, menu, item) menu_destroy(menu); return; } - + new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - + _openPricingMenu(id, data[0]-1); menu_destroy(menu); } @@ -1011,15 +1018,15 @@ _openPricingMenu(id, service_id) if (!is_user_connected(id)) { return; } - + new service[e_Service]; new szText[64], data[3]; - + ArrayGetArray(g_services, service_id, service); formatex(szText, charsmax(szText), "\rSklep SMS^n\yWybierz ilosc %s:", service[sNAME]); - + new menu = menu_create(szText, "pricingMenu_handler"); - + new price[e_Price]; for (new i = 0; i < ArraySize(g_prices); ++i) { ArrayGetArray(g_prices, i, price); @@ -1035,7 +1042,7 @@ _openPricingMenu(id, service_id) new quantity[32 + 1]; _getPriceQuantity(i, service_id, quantity, charsmax(quantity)); - + formatex(szText, charsmax(szText), "\y%s \wza %d.%s %s + VAT\d ( %d.%s %s )", quantity, @@ -1046,7 +1053,7 @@ _openPricingMenu(id, service_id) two_number_value(floatround(price[SMS_PRICE] * g_vat) %100), g_currency ); - + data[0] = service_id+1; // Prices count limit is 256 data[1] = min(127, i); @@ -1054,7 +1061,7 @@ _openPricingMenu(id, service_id) menu_additem(menu, szText, data); } - + if (menu_items(menu) > 1) { menu_display(id, menu); } @@ -1075,13 +1082,13 @@ public pricingMenu_handler(id, menu, item) menu_destroy(menu); return; } - + new data[4], zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, sizeof data, _, _, callback); - + which_service[id] = data[0] - 1; which_price[id] = data[1] + data[2]; - + _openServiceTypeMenu(id); menu_destroy(menu); } @@ -1090,19 +1097,19 @@ _openServiceTypeMenu(id) { new service[e_Service]; ArrayGetArray(g_services, which_service[id], service); - + if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { new menu = menu_create("Wybierz typ uslugi", "serviceTypeMenu_handler"); new menu_callback = menu_makecallback("serviceTypeMenu_callback"); - + menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); menu_additem(menu, "Na SteamID", "", 0, menu_callback); - + new data[4]; data[0] = id; data[1] = menu; - + keepDisplayingMenu(data); } else { _serviceChosen(id); @@ -1630,10 +1637,19 @@ _log(const format[], any:...) public displayCommercial() { - if (get_playersnum() > 1) { - new command[MAX_COMMAND + 1]; - _getShopCommand(command, charsmax(command)); - client_print_color(0, Red, "^4[%s] ^1Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisac: ^4%s", PREFIX, command); + new command[MAX_COMMAND + 1]; + _getShopCommand(command, charsmax(command)); + + for (new id = 0; id < get_maxplayers(); ++id) { + if (is_user_connected(id)) { + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "COMMERCIAL", command); + } + } + + new Float:time = get_pcvar_float(g_cvarCommercial); + + if (time) { + set_task(time, "displayCommercial"); } } @@ -1644,38 +1660,38 @@ _createShopSmsConfigFile() if (!file_exists(g_configPath)) { new szText[1024], iLen=0, iMax=charsmax(szText); iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// SKLEP SMS: - Plik Konfiguracyjny^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// SHOP SMS: - Configuration file^n"); iLen += formatex(szText[iLen], iMax-iLen, "// ----------------------------------^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Wlacza / Wylacza sklep^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// 1 - wlaczony^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// 0 - wylaczony^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_on ^"1^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Turn the shop On / Off^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// 1 - ON^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// 0 - OFF^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_on ^"1^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu wyswietlenia menu sklepie^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_sklep_komenda ^"/sklepsms,/shopsms^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Comma-separated commands list, which can be used via chat, to display the shop menu^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_shop_commands ^"/sklepsms,/shopsms^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, w celu przeladowania flag wykupionych w sklepie^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_przeladuj_komenda ^"/przeladuj^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Comma-separated commands list, which can be used via chat, to reload players flags^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_reload_commands ^"/przeladuj^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Lista komend oddzielonych przecinkiem, ktore mozna wpisac na chacie, aby zobaczyc swoje aktywne uslugi^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_uslugi_komenda ^"/uslugi^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Comma-separated commands list, which can be used via chat, to display your active services^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_services_commands ^"/uslugi^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Czy po uzyciu powyzszych komend wyswietla sie one w chacie^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_ciche_komendy ^"0^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Should the above commands be visible on the chat after usage^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_silent_commands ^"0^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Wyswietlac informacje o sklepie na chacie?^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_info ^"1^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// How often (seconds) should the shop commercial be displayed on the chat? 0 - never^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_commercial ^"137^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// #####################^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// ### Dane Sklepu ###^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// ### Shop WEB ###^n"); iLen += formatex(szText[iLen], iMax-iLen, "// #####################^n^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Adres URL sklepu^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_url ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Shop URL^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_url ^"^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); - iLen += formatex(szText[iLen], iMax-iLen, "// Token serwera^n"); - iLen += formatex(szText[iLen], iMax-iLen, "sklepsms_token ^"^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "// Server token^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_token ^"^"^n"); write_file(g_configPath, szText); } } @@ -1900,7 +1916,7 @@ _getPriceQuantity(price_index, service_index, output[], len) _canUseShop() { - return !g_blocked && g_licenseValidated && get_pcvar_num(cvar_on); + return !g_blocked && g_licenseValidated && get_pcvar_num(g_cvarOn); } _canPayWithWallet(id) @@ -1936,20 +1952,20 @@ _getShopCommand(output[], len) } TrieIterDestroy(iter); #else - get_pcvar_string(cvar_sklep, g_szTemp, charsmax(g_szTemp)); + get_pcvar_string(g_cvarShopCommands, g_szTemp, charsmax(g_szTemp)); copyc(output, len, g_szTemp, ','); #endif } _getShopToken(output[], len) { - get_pcvar_string(cvar_token, output, len); + get_pcvar_string(g_cvarShopToken, output, len); trim(output); } _getShopUrl(output[], len) { - get_pcvar_string(cvar_shop_url, output, len); + get_pcvar_string(g_cvarShopUrl, output, len); trim(output); // Remove trailing slash From b114b164fb47fae86a4c36d14a0a4f55cf646d12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 19 Apr 2020 15:58:00 +0200 Subject: [PATCH 095/124] More english --- .../amxmodx/configs/plugins-sklep_sms.ini | 22 ++-- cstrike/addons/amxmodx/data/lang/shopsms.txt | 6 +- .../amxmodx/scripting/include/shop_sms.inc | 100 ------------------ .../amxmodx/scripting/include/shopsms.inc | 97 +++++++++++++++++ .../{shop_sms_const.inc => shopsms_const.inc} | 6 +- .../scripting/{sklep_sms.sma => shopsms.sma} | 8 +- ...naki.sma => shopsms_service_bf2_badge.sma} | 4 +- ...od_exp.sma => shopsms_service_cod_exp.sma} | 4 +- ..._cod_te.sma => shopsms_service_cod_te.sma} | 4 +- ...gi.sma => shopsms_service_extra_flags.sma} | 4 +- ..._gxm_bm.sma => shopsms_service_gxm_bm.sma} | 4 +- ...xm_exp.sma => shopsms_service_gxm_exp.sma} | 4 +- ..._nicku.sma => shopsms_service_nickres.sma} | 4 +- ..._slota.sma => shopsms_service_slotres.sma} | 4 +- ...usluga_vip.sma => shopsms_service_vip.sma} | 4 +- ..._vippro.sma => shopsms_service_vippro.sma} | 4 +- ...ga_zp_ap.sma => shopsms_service_zp_ap.sma} | 4 +- server/Dockerfile | 2 +- 18 files changed, 141 insertions(+), 144 deletions(-) delete mode 100755 cstrike/addons/amxmodx/scripting/include/shop_sms.inc create mode 100755 cstrike/addons/amxmodx/scripting/include/shopsms.inc rename cstrike/addons/amxmodx/scripting/include/{shop_sms_const.inc => shopsms_const.inc} (66%) rename cstrike/addons/amxmodx/scripting/{sklep_sms.sma => shopsms.sma} (99%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_bf2_odznaki.sma => shopsms_service_bf2_badge.sma} (98%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_cod_exp.sma => shopsms_service_cod_exp.sma} (94%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_cod_te.sma => shopsms_service_cod_te.sma} (99%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_dodatkowe_flagi.sma => shopsms_service_extra_flags.sma} (83%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_gxm_bm.sma => shopsms_service_gxm_bm.sma} (92%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_gxm_exp.sma => shopsms_service_gxm_exp.sma} (92%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_rezerwacja_nicku.sma => shopsms_service_nickres.sma} (67%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_rezerwacja_slota.sma => shopsms_service_slotres.sma} (85%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_vip.sma => shopsms_service_vip.sma} (87%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_vippro.sma => shopsms_service_vippro.sma} (86%) rename cstrike/addons/amxmodx/scripting/{sklepsms_usluga_zp_ap.sma => shopsms_service_zp_ap.sma} (92%) diff --git a/cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini b/cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini index 1961750..93d35b3 100644 --- a/cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini +++ b/cstrike/addons/amxmodx/configs/plugins-sklep_sms.ini @@ -1,11 +1,11 @@ -; Uslugi -sklepsms_usluga_bf2_odznaki.amxx -sklepsms_usluga_cod_exp.amxx -sklepsms_usluga_cod_te.amxx -sklepsms_usluga_gxm_bm.amxx -sklepsms_usluga_gxm_exp.amxx -sklepsms_usluga_rezerwacja_nicku.amxx -sklepsms_usluga_rezerwacja_slota.amxx -sklepsms_usluga_vippro.amxx -sklepsms_usluga_vip.amxx -sklepsms_usluga_zp_ap.amxx +; Services +shopsms_service_bf2_badge.amxx +shopsms_service_cod_exp.amxx +shopsms_service_cod_te.amxx +shopsms_service_gxm_bm.amxx +shopsms_service_gxm_exp.amxx +shopsms_service_nickres.amxx +shopsms_service_slotres.amxx +shopsms_service_vippro.amxx +shopsms_service_vip.amxx +shopsms_service_zp_ap.amxx diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index cc686b0..6fd93a1 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -1,13 +1,13 @@ [en] -CHOOSE_SERVICE = Choose service: -COMMERCIAL = We invite everyone to use ^3the store! ^1Just type: ^4%s +CHOOSE_SERVICE = Choose a service: +COMMERCIAL = We invite everyone to use ^3the shop! ^1Just type: ^4%s CONTACT_US = In case of an issue contact us INVALID_PASSWORD = Invalid password LICENSE_VALIDATION_FAILED = License validation failed. SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. SHOP_SMS = Shop SMS -NO_AVAILABLE_SERVICE = No services available for purchase. +NO_AVAILABLE_SERVICE = No services are available for purchase. [pl] CHOOSE_SERVICE = Wybierz usługę: diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc b/cstrike/addons/amxmodx/scripting/include/shop_sms.inc deleted file mode 100755 index 4124711..0000000 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms.inc +++ /dev/null @@ -1,100 +0,0 @@ -#if defined _shop_sms_included - #endinput -#endif -#define _shop_sms_included - -#pragma library "shop_sms" - -#include - -native ss_register_service(const service_id[]); -/*------------------------------ - * Rejestruje usluge, ktora bedzie pozniej dostepna w sklepie - * --------------------------- - * service_id[] - id uslugi -------------------------------*/ - -native ss_open_payment_method_menu(id); -/*------------------------------ - * Kontynuuje proces zakupu po zwroceniu wartosci SS_STOP w forwardzie ss_service_chosen - * --------------------------- - * id - index gracza dokonujacego zakupu -------------------------------*/ - -native ss_show_service_purchase(id, const service_id[]); -/*------------------------------ - * Wyswietla menu z zakupem danej uslugi - * --------------------------- - * id - index gracza dokonujacego zakupu - * service_id[] - id uslugi do zakupienia -------------------------------*/ - -native ss_log(const message[], any:...); -/*------------------------------ - * Dodaje informacje do log�w. -------------------------------*/ - -native bool:ss_is_steam(id); -/*------------------------------ - * Sprawdza, czy gracz ma steama - * --------------------------- - * id - index gracza -------------------------------*/ - -forward ss_service_data(name[], flags[]); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) - * w momencie pobrania danych o usludze. - * --------------------------- - * name[] - nazwa uslugi - * flags[] - flagi danej uslugi - * --------------------------- - */ - -forward ss_service_addingtolist(id); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) - * w momencie dodawania uslugi do menu z uslugami. - * Funkcja powinna zwracać jedną z dwóch wartosci: - * ITEM_ENABLED - usluga ma byc dostepna - * ITEM_DISABLED - usluga ma byc niedostepna - * --------------------------- - * id - index gracza dokonujacego zakupu -------------------------------*/ - -forward ss_service_chosen(id, quantity); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) - * w momencie wybrania uslugi. - * Funkcja powinna zwracac jedna z dwoch wartosci: - * SS_OK - * SS_STOP - gdy chcemy na pewien czas zatrzymać proces wykupowania usługi. - * Potem musimy go wznowić za pomoca natywu ss_open_payment_method_menu. - * --------------------------- - * id - index gracza dokonujacego zakupu - * quantity - wybrana ilosc ( opcja ) -------------------------------*/ - -forward ss_service_bought(id, quantity); -/*------------------------------ - * Forward wysylany ( do pluginu z ktorego zostala zarejstrowana usluga ) w momencie zakupu uslugi. - * Mozna zwrocic wartosc SS_ERROR w przypadku wystapienia bledu przy dodawaniu uslugi. - * --------------------------- - * id - index gracza dokonujacego zakupu - * quantity - ilosc wykupionej uslugi -------------------------------*/ - -forward ss_client_access(id, flags); -/*------------------------------ - * Forward wysylany do wszystkich pluginow w momencie przypisania uzytkownikowi flag. - * Zwracana wartosc jest ignorowana. - * --------------------------- - * id - index gracza - * flags - flagi, ktore zostaly ustawione uzytkownikowi -------------------------------*/ - -stock pause_plugin() { - static szFile[32]; - get_plugin(-1, szFile, sizeof szFile); - pause("ad", szFile); -} diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms.inc b/cstrike/addons/amxmodx/scripting/include/shopsms.inc new file mode 100755 index 0000000..49915d5 --- /dev/null +++ b/cstrike/addons/amxmodx/scripting/include/shopsms.inc @@ -0,0 +1,97 @@ +#if defined _shopsms_included + #endinput +#endif +#define _shopsms_included + +#pragma library "shopsms" + +#include + +native ss_register_service(const service_id[]); +/*------------------------------ + * Register service so that players can purchase it. + * --------------------------- + * service_id[] - Unique service ID +------------------------------*/ + +native ss_open_payment_method_menu(id); +/*------------------------------ + * Continues shopping process. Function can be called if SS_STOP was returned in ss_service_chosen function. + * --------------------------- + * id - ID of a player making a purchase +------------------------------*/ + +native ss_show_service_purchase(id, const service_id[]); +/*------------------------------ + * Show service purchase menu + * --------------------------- + * id - ID of a player who makes a purchase + * service_id[] - ID of a service to be shown +------------------------------*/ + +native ss_log(const message[], any:...); +/*------------------------------ + * Log info to the shop server logs +------------------------------*/ + +native bool:ss_is_steam(id); +/*------------------------------ + * Check whether player is a steam player + * --------------------------- + * id - ID of a player +------------------------------*/ + +forward ss_service_data(name[], flags[]); +/*------------------------------ + * Forward sent ( to a service plugin ) when service data was fetched. + * --------------------------- + * name[] - service name + * flags[] - service flags + * --------------------------- + */ + +forward ss_service_addingtolist(id); +/*------------------------------ + * Forward sent ( to a service plugin ) when service is being added to the services menu. + * Function should return one of the following values: + * ITEM_ENABLED - service is AVAILABLE + * ITEM_DISABLED - service is UNAVAILABLE + * --------------------------- + * id - ID of a player making a purchase +------------------------------*/ + +forward ss_service_chosen(id, quantity); +/*------------------------------ + * Forward sent ( to a service plugin ) when service is chosen. + * Function should return one of the following values: + * SS_OK + * SS_STOP - when we want to stop purchase process for some time. + * Then we have to resume it using the ss_open_payment_method_menu native. + * --------------------------- + * id - ID of a player making a purchase + * quantity - select quantity ( option ) +------------------------------*/ + +forward ss_service_bought(id, quantity); +/*------------------------------ + * Forward sent ( to a service plugin ) when service is purchased. + * Vaue SS_ERROR can be returned in case of an error while adding the service. + * --------------------------- + * id - ID of a player making a purchase + * quantity - service quantity +------------------------------*/ + +forward ss_client_access(id, flags); +/*------------------------------ + * Forward sent to all plugins when a player is being granted access. + * Returned value is ignored. + * --------------------------- + * id - ID of a player + * flags - players flags +------------------------------*/ + +stock pause_plugin() { + static szFile[32]; + get_plugin(-1, szFile, sizeof szFile); + pause("ad", szFile); +} diff --git a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc similarity index 66% rename from cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc rename to cstrike/addons/amxmodx/scripting/include/shopsms_const.inc index 65d65f1..8443cb3 100755 --- a/cstrike/addons/amxmodx/scripting/include/shop_sms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc @@ -1,9 +1,9 @@ -#if defined _shop_sms_const_included +#if defined _shopsms_const_included #endinput #endif -#define _shop_sms_const_included +#define _shopsms_const_included -#pragma library "shop_sms_const" +#pragma library "shopsms_const" #define VERSION "3.11.0-rc.1" diff --git a/cstrike/addons/amxmodx/scripting/sklep_sms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma similarity index 99% rename from cstrike/addons/amxmodx/scripting/sklep_sms.sma rename to cstrike/addons/amxmodx/scripting/shopsms.sma index b635f12..24c3553 100755 --- a/cstrike/addons/amxmodx/scripting/sklep_sms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #pragma semicolon 1 @@ -163,7 +163,7 @@ enum requestStruct { public plugin_natives() { - register_library("shop_sms"); + register_library("shopsms"); register_native("ss_register_service", "native_registerService"); register_native("ss_show_service_purchase", "native_showServicePurchase"); register_native("ss_open_payment_method_menu", "native_openPaymentMethodMenu"); @@ -206,7 +206,7 @@ public plugin_precache() public plugin_init() { - register_plugin("Sklep SMS", VERSION, "SeeK"); + register_plugin("Shop SMS", VERSION, "SeeK"); register_dictionary("shopsms.txt"); @@ -1669,7 +1669,7 @@ _createShopSmsConfigFile() iLen += formatex(szText[iLen], iMax-iLen, "shopsms_on ^"1^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Comma-separated commands list, which can be used via chat, to display the shop menu^n"); - iLen += formatex(szText[iLen], iMax-iLen, "shopsms_shop_commands ^"/sklepsms,/shopsms^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_shop_commands ^"/shopsms,/sklepsms^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Comma-separated commands list, which can be used via chat, to reload players flags^n"); iLen += formatex(szText[iLen], iMax-iLen, "shopsms_reload_commands ^"/przeladuj^"^n"); diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma similarity index 98% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma index cd2ac7e..64f2a56 100644 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_bf2_odznaki.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma @@ -1,5 +1,5 @@ #include -#include +#include native bf2_get_maxbadges(); native bf2_get_badge_name(badge_id, badge_level, name[], len); @@ -8,7 +8,7 @@ native bf2_set_user_badge(index, badge_id, level); #pragma semicolon 1 -#define PLUGIN "Sklep-SMS: BF2 Odznaki" +#define PLUGIN "Shop SMS: BF2 badge" #define AUTHOR "SeeK" #define TASK_MENU1 1000 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma similarity index 94% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma index dc2cb92..215f8d6 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_exp.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma @@ -1,5 +1,5 @@ #include -#include +#include #include native cod_get_user_class(id); @@ -8,7 +8,7 @@ native cod_set_user_xp(id, wartosc); #pragma semicolon 1 -#define PLUGIN "Sklep-SMS: COD EXP" +#define PLUGIN "Shop SMS: COD EXP" #define AUTHOR "SeeK" new const service_id[MAX_SERVICE_ID + 1] = "cod_exp"; diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma similarity index 99% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma index e881598..d8f55b5 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_cod_te.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma @@ -1,5 +1,5 @@ #include -#include +#include #include native cod_get_classes_num(); @@ -11,7 +11,7 @@ native cod_set_user_class(id, klasa, zmien=0); #pragma semicolon 1 -#define PLUGIN "Sklep-SMS: COD TE" +#define PLUGIN "Shop SMS: COD TE" #define AUTHOR "SeeK" #define TASK_CHECK_FIRST 1000 diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma similarity index 83% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma index 47586ee..c9a46e2 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_dodatkowe_flagi.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma @@ -1,5 +1,5 @@ #include -#include +#include #pragma semicolon 1 @@ -9,7 +9,7 @@ new szFlags[32 + 1]; public plugin_init() { - register_plugin("Sklep-SMS: Dodatkowe Flagi", VERSION, "SeeK"); + register_plugin("Shop SMS: Extra flags", VERSION, "SeeK"); } public plugin_cfg() diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma similarity index 92% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma index b72a142..158534c 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_bm.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma @@ -1,12 +1,12 @@ #include -#include +#include native get_user_bm(id); native set_user_bm(id, ilosc); #pragma semicolon 1 -#define PLUGIN "Sklep-SMS: GXM BM" +#define PLUGIN "Shop SMS: GXM BM" #define AUTHOR "SeeK" new const service_id[MAX_SERVICE_ID + 1] = "gxm_bm"; diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma similarity index 92% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma index 4d7d69e..90a30f5 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_gxm_exp.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma @@ -1,12 +1,12 @@ #include -#include +#include native get_user_xp(id); native set_user_xp(id, ilosc); #pragma semicolon 1 -#define PLUGIN "Sklep-SMS: GXM EXP" +#define PLUGIN "Shop SMS: GXM EXP" #define AUTHOR "SeeK" new const service_id[MAX_SERVICE_ID + 1] = "gxm_exp"; diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma similarity index 67% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma index fabda15..49a0c0e 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_nicku.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma @@ -1,5 +1,5 @@ #include -#include +#include #pragma semicolon 1 @@ -7,7 +7,7 @@ new const service_id[MAX_SERVICE_ID + 1] = "resnick"; public plugin_init() { - register_plugin("Sklep-SMS: Rezerwacja Nicku", VERSION, "SeeK"); + register_plugin("Shop SMS: Nick reservation", VERSION, "SeeK"); } public plugin_cfg() diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma similarity index 85% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma index 8335399..8158a96 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_rezerwacja_slota.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma @@ -1,5 +1,5 @@ #include -#include +#include #pragma semicolon 1 @@ -9,7 +9,7 @@ new szFlags[32 + 1]; public plugin_init() { - register_plugin("Sklep-SMS: Rezerwacja Slota", VERSION, "SeeK"); + register_plugin("Shop SMS: Slot reservation", VERSION, "SeeK"); } public plugin_cfg() diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma similarity index 87% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma index 02c41c6..c4b2faf 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vip.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma @@ -1,5 +1,5 @@ #include -#include +#include #pragma semicolon 1 @@ -9,7 +9,7 @@ new szFlags[32 + 1]; public plugin_init() { - register_plugin("Sklep-SMS: VIP", VERSION, "SeeK"); + register_plugin("Shop SMS: VIP", VERSION, "SeeK"); } public plugin_cfg() diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma similarity index 86% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma index 1d72f73..96f08ec 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_vippro.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma @@ -1,5 +1,5 @@ #include -#include +#include #pragma semicolon 1 @@ -9,7 +9,7 @@ new szFlags[32 + 1]; public plugin_init() { - register_plugin("Sklep-SMS: VIP PRO", VERSION, "SeeK"); + register_plugin("Shop SMS: VIP PRO", VERSION, "SeeK"); } public plugin_cfg() diff --git a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma similarity index 92% rename from cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma index b0d9497..d4a97fd 100755 --- a/cstrike/addons/amxmodx/scripting/sklepsms_usluga_zp_ap.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma @@ -1,11 +1,11 @@ #include -#include +#include native zp_get_user_ammo_packs(id); native zp_set_user_ammo_packs(id, amount); #pragma semicolon 1 -#define PLUGIN "Sklep-SMS: ZP AP" +#define PLUGIN "Shop SMS: ZP AP" #define AUTHOR "SeeK" new const service_id[MAX_SERVICE_ID + 1] = "zp_ap"; diff --git a/server/Dockerfile b/server/Dockerfile index 3fb9c35..d51b182 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -41,7 +41,7 @@ RUN curl -sqL "${CSTRIKE_URL}" | tar -C /home/steam/dedicated/cstrike/ -zxvf - RUN sed -i 's/admin.amxx.*/;admin.amxx/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini # Add shopsms -RUN sed -i '1s/^/sklep_sms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini +RUN sed -i '1s/^/shopsms.amxx debug\n/' /home/steam/dedicated/cstrike/addons/amxmodx/configs/plugins.ini ADD cstrike/addons/amxmodx/data/lang/* /home/steam/dedicated/cstrike/addons/amxmodx/data/lang/ ADD cstrike/addons/amxmodx/modules/* /home/steam/dedicated/cstrike/addons/amxmodx/modules/ ADD cstrike/addons/amxmodx/configs/* /home/steam/dedicated/cstrike/addons/amxmodx/configs/ From 2d078d01f15da818bfc165cbf8c52fb50fb9765f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 19 Apr 2020 16:18:18 +0200 Subject: [PATCH 096/124] More translations --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 26 +++++++++++--- cstrike/addons/amxmodx/scripting/shopsms.sma | 36 +++++++++++++------- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 6fd93a1..742d167 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -1,21 +1,39 @@ [en] -CHOOSE_SERVICE = Choose a service: +CHOOSE_PAYMENT_METHOD = Choose a payment method +CHOOSE_SERVICE = Choose a service +CHOOSE_SERVICE_TYPE = Choose service type +CHOOSE_QUANTITY = Choose quantity %s COMMERCIAL = We invite everyone to use ^3the shop! ^1Just type: ^4%s CONTACT_US = In case of an issue contact us INVALID_PASSWORD = Invalid password LICENSE_VALIDATION_FAILED = License validation failed. +NO_AVAILABLE_SERVICE = No services are available for purchase. +NO_PRICE_LIST = No price list for this service. +PAYMENT_METHOD_SMS = SMS +PAYMENT_METHOD_WALLET = Wallet SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. SHOP_SMS = Shop SMS -NO_AVAILABLE_SERVICE = No services are available for purchase. +TYPE_IP_PASS = IP + Password +TYPE_NICK_PASS = Nick + Password +TYPE_STEAM_ID = SteamID [pl] -CHOOSE_SERVICE = Wybierz usługę: +CHOOSE_PAYMENT_METHOD = Wybierz metodę płatności +CHOOSE_SERVICE = Wybierz usługę +CHOOSE_SERVICE_TYPE = Wybierz typ usługi +CHOOSE_QUANTITY = Wybierz ilość %s CONTACT_US = W razie problemów skontaktuj się z nami COMMERCIAL = Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisać: ^4%s INVALID_PASSWORD = Nieprawidlowe hasło LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. +NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. +NO_PRICE_LIST = Brak cennika dla tej uslugi. +PAYMENT_METHOD_SMS = SMS +PAYMENT_METHOD_WALLET = Portfel SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. SHOP_SMS = Sklep SMS -NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. \ No newline at end of file +TYPE_IP_PASS = IP + Hasło +TYPE_NICK_PASS = Nick + Hasło +TYPE_STEAM_ID = SteamID diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 24c3553..7a5cea1 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -1023,7 +1023,7 @@ _openPricingMenu(id, service_id) new szText[64], data[3]; ArrayGetArray(g_services, service_id, service); - formatex(szText, charsmax(szText), "\rSklep SMS^n\yWybierz ilosc %s:", service[sNAME]); + formatex(szText, charsmax(szText), "\r%L^n\y%L", id, "SHOP_SMS", id, "CHOOSE_QUANTITY", service[sNAME]); new menu = menu_create(szText, "pricingMenu_handler"); @@ -1044,7 +1044,7 @@ _openPricingMenu(id, service_id) _getPriceQuantity(i, service_id, quantity, charsmax(quantity)); formatex(szText, charsmax(szText), - "\y%s \wza %d.%s %s + VAT\d ( %d.%s %s )", + "\y%s \w%d.%s %s + VAT\d ( %d.%s %s )", quantity, price[SMS_PRICE] / 100, two_number_value(price[SMS_PRICE] % 100), @@ -1072,7 +1072,7 @@ _openPricingMenu(id, service_id) _openServiceTypeMenu(id); } else { - client_print_color(id, Red, "^4[%s] ^1Brak cennika dla tej uslugi.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "NO_PRICE_LIST"); } } @@ -1099,12 +1099,18 @@ _openServiceTypeMenu(id) ArrayGetArray(g_services, which_service[id], service); if (service[TYPES] & (TYPE_NICK|TYPE_IP|TYPE_SID)) { - new menu = menu_create("Wybierz typ uslugi", "serviceTypeMenu_handler"); + new menu_title[64], item_text[64]; + + formatex(menu_title, charsmax(menu_title), "%L", id, "CHOOSE_SERVICE_TYPE"); + new menu = menu_create(menu_title, "serviceTypeMenu_handler"); new menu_callback = menu_makecallback("serviceTypeMenu_callback"); - menu_additem(menu, "Na Nick + haslo", "", 0, menu_callback); - menu_additem(menu, "Na IP + haslo", "", 0, menu_callback); - menu_additem(menu, "Na SteamID", "", 0, menu_callback); + formatex(item_text, charsmax(item_text), "%L", id, "TYPE_NICK_PASS"); + menu_additem(menu, item_text, "", 0, menu_callback); + formatex(item_text, charsmax(item_text), "%L", id, "TYPE_IP_PASS"); + menu_additem(menu, item_text, "", 0, menu_callback); + formatex(item_text, charsmax(item_text), "%L", id, "TYPE_STEAM_ID"); + menu_additem(menu, item_text, "", 0, menu_callback); new data[4]; data[0] = id; @@ -1202,12 +1208,18 @@ _serviceChosen(id, type = 0, const szPassword[MAX_PASSWORD + 1] = "") } _openPaymentMethodMenu(id) -{ - new menu = menu_create("Wybierz metode platnosci", "paymentMethodMenu_handler"); +{ + new menu_title[64], item_text[64]; + formatex(menu_title, charsmax(menu_title), "%L", id, "CHOOSE_PAYMENT_METHOD"); + + new menu = menu_create(menu_title, "paymentMethodMenu_handler"); new menu_callback = menu_makecallback("paymentMethodMenu_callback"); - menu_additem(menu, "SMS", "", 0, menu_callback); - menu_additem(menu, "Portfel", "", 0, menu_callback); + formatex(item_text, charsmax(item_text), "%L", id, "PAYMENT_METHOD_SMS"); + menu_additem(menu, item_text, "", 0, menu_callback); + + formatex(item_text, charsmax(item_text), "%L", id, "PAYMENT_METHOD_WALLET"); + menu_additem(menu, item_text, "", 0, menu_callback); new data[4]; data[0] = id; @@ -1260,7 +1272,7 @@ _displaySmsDetails(id) _getPriceQuantity(which_price[id], which_service[id], quantity, charsmax(quantity)); - formatex(g_szTemp, charsmax(g_szTemp), "\rSklep SMS^n^n"); + formatex(g_szTemp, charsmax(g_szTemp), "\r%L^n^n", id, "SHOP_SMS"); format(g_szTemp, charsmax(g_szTemp), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", g_szTemp, service[sNAME], quantity); format(g_szTemp, charsmax(g_szTemp), "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", From e3283eaa69e2ce982d89b9f86e4a79e4e1cf2db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 19 Apr 2020 16:20:12 +0200 Subject: [PATCH 097/124] Fix translation --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 742d167..a7837cb 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -1,7 +1,7 @@ [en] CHOOSE_PAYMENT_METHOD = Choose a payment method CHOOSE_SERVICE = Choose a service -CHOOSE_SERVICE_TYPE = Choose service type +CHOOSE_SERVICE_TYPE = Choose a service type CHOOSE_QUANTITY = Choose quantity %s COMMERCIAL = We invite everyone to use ^3the shop! ^1Just type: ^4%s CONTACT_US = In case of an issue contact us From bbca200616c06f3d331455ebc824a352c772f486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 20 Apr 2020 13:33:48 +0200 Subject: [PATCH 098/124] More translations --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 12 +++ cstrike/addons/amxmodx/scripting/shopsms.sma | 92 +++++++++++--------- 2 files changed, 62 insertions(+), 42 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index a7837cb..fb21b7f 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -5,15 +5,21 @@ CHOOSE_SERVICE_TYPE = Choose a service type CHOOSE_QUANTITY = Choose quantity %s COMMERCIAL = We invite everyone to use ^3the shop! ^1Just type: ^4%s CONTACT_US = In case of an issue contact us +FLAGS_RELOADED = The list of flags bought in the shop has been reloaded correctly. +FLAGS_WERE_RELOADED_RECENTLY = Someone has just reloaded the list. Wait a moment. INVALID_PASSWORD = Invalid password LICENSE_VALIDATION_FAILED = License validation failed. NO_AVAILABLE_SERVICE = No services are available for purchase. NO_PRICE_LIST = No price list for this service. +PASSWORD_TOO_LONG = The password is too long. The maximum length is %d. +PASSWORD_TOO_SHORT = The password is too short. The minimum length is %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Wallet +PAYMENT_SMS_INFO = Choosen service %s ^n\wInfo: \y%s^n^n\rIn ordet to make a purchase send SMS^n\wMessage: \y%s^n\wNumber: \y%s^n\wPrice: \y%s + VAT\d ( %s )^n^n\wWait for the return code after sending and SMS.^nIn order to enter it press: \y1^n^n\wTo exit press: \y0 SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. SHOP_SMS = Shop SMS +TRANSACTION_ABORTED = Transaction has been ^3aborted^1. TYPE_IP_PASS = IP + Password TYPE_NICK_PASS = Nick + Password TYPE_STEAM_ID = SteamID @@ -25,15 +31,21 @@ CHOOSE_SERVICE_TYPE = Wybierz typ usługi CHOOSE_QUANTITY = Wybierz ilość %s CONTACT_US = W razie problemów skontaktuj się z nami COMMERCIAL = Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisać: ^4%s +FLAGS_RELOADED = Prawidlowo przeladowano liste flag wykupionych w sklepie. +FLAGS_WERE_RELOADED_RECENTLY = Ktoś przed chwilą przeładował listę. Odczekaj chwilę. INVALID_PASSWORD = Nieprawidlowe hasło LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. NO_PRICE_LIST = Brak cennika dla tej uslugi. +PASSWORD_TOO_LONG = Podane hasło jest za długie. Maksymalna ilość znaków wynosi %d. +PASSWORD_TOO_SHORT = Hasło jest za krótkie. Minimalna ilość znaków wynosi %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Portfel +PAYMENT_SMS_INFO = Wybrano opcję zakupu %s ^n\wInfo: \y%s^n^n\rW celu dokonania zakupu, wyślij SMSa^n\wO treści: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%s + VAT\d ( %s )^n^n\wPo wysłaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wciśnij: \y1^n^n\wAby wyjść, wciśnij: \y0 SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. SHOP_SMS = Sklep SMS +TRANSACTION_ABORTED = Transakcja zostala ^3przerwana^1. TYPE_IP_PASS = IP + Hasło TYPE_NICK_PASS = Nick + Hasło TYPE_STEAM_ID = SteamID diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 7a5cea1..94622a0 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -212,8 +212,8 @@ public plugin_init() register_menucmd(register_menuid("smsDetails"), KEYS, "smsDetails_handler"); register_concmd("Podaj_Kod_Zwrotny", "onSmsCodeEntered"); - register_concmd("ssnick_Podaj_Haslo", "onNickPasswordEntered"); - register_concmd("ssip_Podaj_Haslo", "onIpPasswordEntered"); + register_concmd("ssnick_Password", "onNickPasswordEntered"); + register_concmd("ssip_Password", "onIpPasswordEntered"); register_concmd("ss_reload", "command_reloadServerConfig"); register_concmd("ss_reload_players_flags", "command_reloadPlayersFlags"); register_concmd("ss_reassign_players_flags", "command_reassignPlayersFlags"); @@ -687,14 +687,14 @@ public command_reassignPlayersFlags() _sayCommand_reassignPlayersFlags(id) { if (g_lastReassign + 10 > get_systime()) { - client_print_color(id, Red, "^4[%s] ^1Ktos przed chwila przeladowal liste. Odczekaj chwile.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "FLAGS_WERE_RELOADED_RECENTLY"); return; } g_lastReassign = get_systime(); _reassignPlayersFlags(); - client_print_color(id, Red, "^4[%s] ^1Prawidlowo przeladowano liste flag wykupionych w sklepie.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "FLAGS_RELOADED"); } /** @@ -712,7 +712,7 @@ _reassignPlayersFlags() } /** - * Funkcja sluzaca do dodania graczy do tablicy globalnej przechowujacej dane uprawnien graczy + * Add players flags to global array storing players' access. */ _addUsersToGlobalArray() { @@ -749,6 +749,9 @@ _addUsersToGlobalArray() global_player[pfTYPE] = admins_lookup(i, AdminProp_Flags); global_player[pfFLAGS] = admins_lookup(i, AdminProp_Access); + + // It is important to have sorted list of users, since we use binary search here + // to achieve O(nlogn) instead of O(n) new l = 0, p = ArraySize(local_users)-1, s; while (l <= p) { @@ -1044,14 +1047,10 @@ _openPricingMenu(id, service_id) _getPriceQuantity(i, service_id, quantity, charsmax(quantity)); formatex(szText, charsmax(szText), - "\y%s \w%d.%s %s + VAT\d ( %d.%s %s )", + "\y%s \w%s + VAT\d ( %s )", quantity, - price[SMS_PRICE] / 100, - two_number_value(price[SMS_PRICE] % 100), - g_currency, - floatround(price[SMS_PRICE] * g_vat) / 100, - two_number_value(floatround(price[SMS_PRICE] * g_vat) %100), - g_currency + format_price(price[SMS_PRICE]), + format_price(floatround(price[SMS_PRICE] * g_vat)) ); data[0] = service_id+1; @@ -1143,10 +1142,10 @@ public serviceTypeMenu_handler(id, menu, item) switch (item) { case 0: { - client_cmd(id, "messagemode ssnick_Podaj_Haslo"); + client_cmd(id, "messagemode ssnick_Password"); } case 1: { - client_cmd(id, "messagemode ssip_Podaj_Haslo"); + client_cmd(id, "messagemode ssip_Password"); } case 2: { _serviceChosen(id, TYPE_SID, ""); @@ -1160,7 +1159,7 @@ public onNickPasswordEntered(id) read_argv(1, szPassword, charsmax(szPassword)); if (!_serviceTypeMenu_checkPass(id, TYPE_NICK, szPassword)) { - client_cmd(id, "messagemode ssnick_Podaj_Haslo"); + client_cmd(id, "messagemode ssnick_Password"); } } @@ -1170,18 +1169,21 @@ public onIpPasswordEntered(id) read_argv(1, szPassword, charsmax(szPassword)); if (! _serviceTypeMenu_checkPass(id, TYPE_IP, szPassword)) { - client_cmd(id, "messagemode ssip_Podaj_Haslo"); + client_cmd(id, "messagemode ssip_Password"); } } bool:_serviceTypeMenu_checkPass(id, type, const szPassword[MAX_PASSWORD + 1]) { - if (strlen(szPassword) > 30) { - client_print(id, print_center, "Podane haslo jest za dlugie. Maksymalna ilosc znakow wynosi 30."); + new max_length = 30; + new min_length = 2; + + if (strlen(szPassword) > max_length) { + client_print(id, print_center, "%L", id, "PASSWORD_TOO_LONG", max_length); return false; } - else if (!strlen(szPassword)) { - client_print(id, print_center, "Haslo nie zostalo wprowadzone. Wprowadz je."); + else if (strlen(szPassword) < min_length) { + client_print(id, print_center, "%L", id, "PASSWORD_TOO_SHORT", min_length); return false; } @@ -1271,22 +1273,18 @@ _displaySmsDetails(id) ArrayGetArray(g_smses, sms_index, sms); _getPriceQuantity(which_price[id], which_service[id], quantity, charsmax(quantity)); - - formatex(g_szTemp, charsmax(g_szTemp), "\r%L^n^n", id, "SHOP_SMS"); - format(g_szTemp, charsmax(g_szTemp), "%sWybrales/as opcje zakupu %s ^n\wInfo: \y%s", g_szTemp, service[sNAME], quantity); - format(g_szTemp, charsmax(g_szTemp), - "%s^n^n\rW celu dokonania zakupu, wyslij SMSa^n\wO tresci: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%d.%s %s + VAT\d ( %d.%s %s )", - g_szTemp, + + formatex(g_szTemp, charsmax(g_szTemp), + "\r%L^n^n%L", + id, "SHOP_SMS", + id, "PAYMENT_SMS_INFO", + service[sNAME], + quantity, g_smsText, sms[NUMBER], - price[SMS_PRICE] / 100, - two_number_value(price[SMS_PRICE] % 100), - g_currency, - floatround(price[SMS_PRICE] * g_vat)/100, - two_number_value(floatround(price[SMS_PRICE] * g_vat) % 100), - g_currency + format_price(price[SMS_PRICE]), + format_price(floatround(price[SMS_PRICE] * g_vat)) ); - format(g_szTemp, charsmax(g_szTemp), "%s^n^n\wPo wyslaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wcisnij: \y1^n^n\wAby wyjsc, wcisnij: \y0", g_szTemp); keepDisplayingSmsDetails(g_szTemp, TASK_KEEP_INFO_SMS + id); } @@ -1315,7 +1313,7 @@ public smsDetails_handler(id, key) if (key == 0) { client_cmd(id, "messagemode Podaj_Kod_Zwrotny"); } else if (key == 9) { - client_print_color(id, Red, "^4[%s] ^1Transakcja zostala ^3przerwana^1.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "TRANSACTION_ABORTED"); } } @@ -1328,7 +1326,7 @@ public onSmsCodeEntered(id) new sms_code[MAX_CODE + 1]; read_argv(1, sms_code, charsmax(sms_code)); - _logActor(id, "Wprowadzono kod: %s", sms_code); + _logActor(id, "Entered sms code: %s", sms_code); if (!strlen(sms_code)) { client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); @@ -1737,7 +1735,7 @@ _validateLicense() } if (!makeRequest("POST", "https://license.sklep-sms.pl/v1/authorization/server", headers, body, "onValidateLicenseResponse")) { - _errorForbidden("Brak miejsca w puli requestow"); + _errorForbidden("There is no space in the request pool"); } } @@ -1753,7 +1751,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl g_validationAttempt = true; if (code != CURLE_OK) { - _log("Licencja nie zostala zwalidowana z nieznanych powodow. Error: %d", code); + _log("License hasn't been validated. Reason is unknown. Error: %d", code); return; } @@ -1808,7 +1806,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl } g_licenseValidated = true; - log_amx("Walidacja licencji zostala zakonczona pomyslnie."); + log_amx("License was validated."); } // @@ -2295,16 +2293,26 @@ stock get_sms_cost(const number[]) return 0; } +stock format_price(value) +{ + new price[32]; + + formatex(price, charsmax(price), "%d.%s %s", two_number_value(value % 100), value / 100, two_number_value(value % 100), g_currency); + + return price; +} + stock two_number_value(value) { - new temp[17]; + new text[17]; + if (value < 10) { - formatex(temp, charsmax(temp), "0%d", value); + formatex(text, charsmax(text), "0%d", value); } else { - formatex(temp, charsmax(temp), "%d", value); + formatex(text, charsmax(text), "%d", value); } - return temp; + return text; } stock groupDigits(a, output[], len) From 90fc5410d1fa74917830d499f715c3dc6d5f7a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 20 Apr 2020 15:18:51 +0200 Subject: [PATCH 099/124] Discount --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 10 ++-- cstrike/addons/amxmodx/scripting/shopsms.sma | 51 ++++++++++++-------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index fb21b7f..42326d1 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -2,12 +2,13 @@ CHOOSE_PAYMENT_METHOD = Choose a payment method CHOOSE_SERVICE = Choose a service CHOOSE_SERVICE_TYPE = Choose a service type -CHOOSE_QUANTITY = Choose quantity %s -COMMERCIAL = We invite everyone to use ^3the shop! ^1Just type: ^4%s +CHOOSE_QUANTITY = Choose quantity for: %s +COMMERCIAL = We encourage everyone to use ^3the shop! ^1Just type: ^4%s CONTACT_US = In case of an issue contact us FLAGS_RELOADED = The list of flags bought in the shop has been reloaded correctly. FLAGS_WERE_RELOADED_RECENTLY = Someone has just reloaded the list. Wait a moment. INVALID_PASSWORD = Invalid password +LANG=english LICENSE_VALIDATION_FAILED = License validation failed. NO_AVAILABLE_SERVICE = No services are available for purchase. NO_PRICE_LIST = No price list for this service. @@ -15,7 +16,7 @@ PASSWORD_TOO_LONG = The password is too long. The maximum length is %d. PASSWORD_TOO_SHORT = The password is too short. The minimum length is %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Wallet -PAYMENT_SMS_INFO = Choosen service %s ^n\wInfo: \y%s^n^n\rIn ordet to make a purchase send SMS^n\wMessage: \y%s^n\wNumber: \y%s^n\wPrice: \y%s + VAT\d ( %s )^n^n\wWait for the return code after sending and SMS.^nIn order to enter it press: \y1^n^n\wTo exit press: \y0 +PAYMENT_SMS_INFO = Chosen service: %s ^n\wInfo: \y%s^n^n\rIn order to make a purchase send SMS^n\wMessage: \y%s^n\wNumber: \y%s^n\wPrice: \y%s + VAT\d ( %s )^n^n\wWait for the return code after sending and SMS.^nIn order to enter it press: \y1^n^n\wTo exit press: \y0 SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. SHOP_SMS = Shop SMS @@ -34,6 +35,7 @@ COMMERCIAL = Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisa FLAGS_RELOADED = Prawidlowo przeladowano liste flag wykupionych w sklepie. FLAGS_WERE_RELOADED_RECENTLY = Ktoś przed chwilą przeładował listę. Odczekaj chwilę. INVALID_PASSWORD = Nieprawidlowe hasło +LANG=polish LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. NO_PRICE_LIST = Brak cennika dla tej uslugi. @@ -41,7 +43,7 @@ PASSWORD_TOO_LONG = Podane hasło jest za długie. Maksymalna ilość znaków wy PASSWORD_TOO_SHORT = Hasło jest za krótkie. Minimalna ilość znaków wynosi %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Portfel -PAYMENT_SMS_INFO = Wybrano opcję zakupu %s ^n\wInfo: \y%s^n^n\rW celu dokonania zakupu, wyślij SMSa^n\wO treści: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%s + VAT\d ( %s )^n^n\wPo wysłaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wciśnij: \y1^n^n\wAby wyjść, wciśnij: \y0 +PAYMENT_SMS_INFO = Wybrano usługę: %s ^n\wInfo: \y%s^n^n\rW celu dokonania zakupu, wyślij SMSa^n\wO treści: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%s + VAT\d ( %s )^n^n\wPo wysłaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wciśnij: \y1^n^n\wAby wyjść, wciśnij: \y0 SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. SHOP_SMS = Sklep SMS diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 94622a0..2e5cac5 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -128,6 +128,7 @@ enum e_Price { pSERVICE_ID[MAX_SERVICE_ID + 1], SMS_PRICE, QUANTITY, + DISCOUNT, }; new Array:g_prices; @@ -355,7 +356,7 @@ _loadServerConfig() _getShopToken(shop_token, charsmax(shop_token)); headers = curl_slist_append(headers, "Accept: application/assoc"); - formatex(url, charsmax(url), "%s/api/server/config?token=%s&version=%s&player_flags=1&language=polish", shop_url, shop_token, VERSION); + formatex(url, charsmax(url), "%s/api/server/config?token=%s&version=%s&player_flags=1&language=english", shop_url, shop_token, VERSION); if (!makeRequest("GET", url, headers, "", "onLoadServerConfigResponse")) { _errorConfigFailed(999); @@ -482,6 +483,9 @@ _extractPrices(Trie:dict) formatex(key, charsmax(key), "pr.%d.q", i); TrieGetTextInt(dict, key, price[QUANTITY]); + formatex(key, charsmax(key), "pr.%d.d", i); + TrieGetTextInt(dict, key, price[DISCOUNT]); + ArrayPushArray(g_prices, price); } } @@ -614,7 +618,7 @@ public loadPlayersFlags() _getShopToken(shop_token, charsmax(shop_token)); headers = curl_slist_append(headers, "Accept: application/assoc"); - formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=polish", shop_url, shop_token); + formatex(url, charsmax(url), "%s/api/server/players_flags?token=%s&language=english", shop_url, shop_token); makeRequest("GET", url, headers, "", "onLoadPlayersFlagsResponse"); } @@ -1023,11 +1027,11 @@ _openPricingMenu(id, service_id) } new service[e_Service]; - new szText[64], data[3]; + new szText[128], data[3]; ArrayGetArray(g_services, service_id, service); + formatex(szText, charsmax(szText), "\r%L^n\y%L", id, "SHOP_SMS", id, "CHOOSE_QUANTITY", service[sNAME]); - new menu = menu_create(szText, "pricingMenu_handler"); new price[e_Price]; @@ -1047,12 +1051,15 @@ _openPricingMenu(id, service_id) _getPriceQuantity(i, service_id, quantity, charsmax(quantity)); formatex(szText, charsmax(szText), - "\y%s \w%s + VAT\d ( %s )", + "\y%s \w%s", quantity, - format_price(price[SMS_PRICE]), format_price(floatround(price[SMS_PRICE] * g_vat)) ); + if (price[DISCOUNT]) { + formatex(szText[strlen(szText)], charsmax(szText) - strlen(szText), " \r[-%d%%]", price[DISCOUNT]); + } + data[0] = service_id+1; // Prices count limit is 256 data[1] = min(127, i); @@ -1393,6 +1400,10 @@ _purchaseService(id, const method[], const sms_code[] = "") { StringURLEncode(b_passwords[id], u_password, charsmax(u_password)); StringURLEncode(sms_code, u_sms_code, charsmax(u_sms_code)); + // Get players's language + new language[16]; + formatex(language, charsmax(language), "%L", id, "LANG"); + // Calculate body sign formatex(sign_body, charsmax(sign_body), "%d#%s#%s#%s", @@ -1409,7 +1420,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { sign, u_service_id, b_types[id], u_auth_data, u_password, method, u_sms_code, price[pID], ip ); - formatex(url, charsmax(url), "%s/api/server/purchase?token=%s&language=polish", shop_url, shop_token); + formatex(url, charsmax(url), "%s/api/server/purchase?token=%s&language=%s", shop_url, shop_token, language); } if (!makeRequest("POST", url, headers, body, "onPurchaseServiceResponse", id)) { @@ -1538,6 +1549,12 @@ _showPlayerServices(id) StringURLEncode(ip, escaped_ip, charsmax(escaped_ip)); StringURLEncode(steam_id, escaped_steam_id, charsmax(escaped_steam_id)); + // Get players's language + new language[16]; + formatex(language, charsmax(language), "%L", id, "LANG"); + + log_amx("Lang: %s", language); + new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1], url[MAX_URL + 1]; new curl_slist: headers; @@ -1547,8 +1564,8 @@ _showPlayerServices(id) headers = curl_slist_append(headers, "Accept: application/assoc"); formatex( url, charsmax(url), - "%s/api/server/user_services?token=%s&nick=%s&ip=%s&steam_id=%s&language=polish", - shop_url, shop_token, escaped_name, escaped_ip, escaped_steam_id + "%s/api/server/user_services?token=%s&nick=%s&ip=%s&steam_id=%s&language=%s", + shop_url, shop_token, escaped_name, escaped_ip, escaped_steam_id, language ); if (makeRequest("GET", url, headers, "", "onShowPlayerServicesResponse", id)) { @@ -1832,20 +1849,12 @@ public keepDisplayingMenu(data[]) _checkLoadedPlayersFlags() { - if (!ArraySize(g_playersFlags)) { - log_amx("Nie zaladowano zadnych uslug graczy."); - } else { - log_amx("Zaladowano %d uslug graczy.", ArraySize(g_playersFlags)); - } + log_amx("%d players services have been loaded.", ArraySize(g_playersFlags)); } _checkLoadedServices() -{ - if (!ArraySize(g_services)) { - log_amx("Nie zaladowano zadnych uslug do zakupienia."); - } else { - log_amx("Zaladowano %d uslug do zakupienia.", ArraySize(g_services)); - } +{ + log_amx("%d services are ready to be purchased.", ArraySize(g_services)); } _invalidPath(id, const path[]) @@ -2297,7 +2306,7 @@ stock format_price(value) { new price[32]; - formatex(price, charsmax(price), "%d.%s %s", two_number_value(value % 100), value / 100, two_number_value(value % 100), g_currency); + formatex(price, charsmax(price), "%d.%s %s", value / 100, two_number_value(value % 100), g_currency); return price; } From 98b8ea6843ce3697817a658bb695dc37d3801f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 20 Apr 2020 17:54:05 +0200 Subject: [PATCH 100/124] Translation --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 2 ++ cstrike/addons/amxmodx/scripting/shopsms.sma | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 42326d1..9b8632c 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -12,6 +12,7 @@ LANG=english LICENSE_VALIDATION_FAILED = License validation failed. NO_AVAILABLE_SERVICE = No services are available for purchase. NO_PRICE_LIST = No price list for this service. +NO_SMS_CODE = SMS code hasn't been provided. PASSWORD_TOO_LONG = The password is too long. The maximum length is %d. PASSWORD_TOO_SHORT = The password is too short. The minimum length is %d. PAYMENT_METHOD_SMS = SMS @@ -39,6 +40,7 @@ LANG=polish LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. NO_PRICE_LIST = Brak cennika dla tej uslugi. +NO_SMS_CODE = Nie wprowadzono kodu zwrotnego. PASSWORD_TOO_LONG = Podane hasło jest za długie. Maksymalna ilość znaków wynosi %d. PASSWORD_TOO_SHORT = Hasło jest za krótkie. Minimalna ilość znaków wynosi %d. PAYMENT_METHOD_SMS = SMS diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 2e5cac5..839e938 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -1336,7 +1336,7 @@ public onSmsCodeEntered(id) _logActor(id, "Entered sms code: %s", sms_code); if (!strlen(sms_code)) { - client_print_color(id, Red, "^4[%s] ^1Nie wprowadzono kodu zwrotnego.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id "NO_SMS_CODE"); return; } From 04d5a3a78f8aae4a023e35aa85e59f3ebaf423a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 20 Apr 2020 19:44:26 +0200 Subject: [PATCH 101/124] More translations --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 14 +++++++++++-- cstrike/addons/amxmodx/scripting/shopsms.sma | 21 +++++++------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 9b8632c..5597e24 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -10,17 +10,22 @@ FLAGS_WERE_RELOADED_RECENTLY = Someone has just reloaded the list. Wait a moment INVALID_PASSWORD = Invalid password LANG=english LICENSE_VALIDATION_FAILED = License validation failed. +LOADING = Loading... NO_AVAILABLE_SERVICE = No services are available for purchase. NO_PRICE_LIST = No price list for this service. -NO_SMS_CODE = SMS code hasn't been provided. PASSWORD_TOO_LONG = The password is too long. The maximum length is %d. PASSWORD_TOO_SHORT = The password is too short. The minimum length is %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Wallet PAYMENT_SMS_INFO = Chosen service: %s ^n\wInfo: \y%s^n^n\rIn order to make a purchase send SMS^n\wMessage: \y%s^n\wNumber: \y%s^n\wPrice: \y%s + VAT\d ( %s )^n^n\wWait for the return code after sending and SMS.^nIn order to enter it press: \y1^n^n\wTo exit press: \y0 +PURCHASE_IN_PROGRESS = Purchae in progress... +PURCHASE_REQUEST_FAILED = Purchase failed. There was an HTTP error. SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. +SHOP_IS_UNAVAILABLE = Shop isn't available. SHOP_SMS = Shop SMS +SMS_CODE_NO_SPACE = SMS code ^3must not ^contain ^3space^1 character. +SMS_CODE_TOO_SHORT = SMS code is too short. TRANSACTION_ABORTED = Transaction has been ^3aborted^1. TYPE_IP_PASS = IP + Password TYPE_NICK_PASS = Nick + Password @@ -38,17 +43,22 @@ FLAGS_WERE_RELOADED_RECENTLY = Ktoś przed chwilą przeładował listę. Odczeka INVALID_PASSWORD = Nieprawidlowe hasło LANG=polish LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. +LOADING = Ładowanie... NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. NO_PRICE_LIST = Brak cennika dla tej uslugi. -NO_SMS_CODE = Nie wprowadzono kodu zwrotnego. PASSWORD_TOO_LONG = Podane hasło jest za długie. Maksymalna ilość znaków wynosi %d. PASSWORD_TOO_SHORT = Hasło jest za krótkie. Minimalna ilość znaków wynosi %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Portfel PAYMENT_SMS_INFO = Wybrano usługę: %s ^n\wInfo: \y%s^n^n\rW celu dokonania zakupu, wyślij SMSa^n\wO treści: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%s + VAT\d ( %s )^n^n\wPo wysłaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wciśnij: \y1^n^n\wAby wyjść, wciśnij: \y0 +PURCHASE_IN_PROGRESS = Trwa przeprowadzanie zakupu... +PURCHASE_REQUEST_FAILED = Nie udało się dokonać zakupu. Wystąpił błąd z zapytaniem HTTP. SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. +SHOP_IS_UNAVAILABLE = Sklep jest tymczasowo nieaktywny. SHOP_SMS = Sklep SMS +SMS_CODE_NO_SPACE = Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1. +SMS_CODE_TOO_SHORT = Kodu zwrotny jest zbyt krótki. TRANSACTION_ABORTED = Transakcja zostala ^3przerwana^1. TYPE_IP_PASS = IP + Hasło TYPE_NICK_PASS = Nick + Hasło diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 839e938..fda7a14 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -1335,18 +1335,13 @@ public onSmsCodeEntered(id) _logActor(id, "Entered sms code: %s", sms_code); - if (!strlen(sms_code)) { - client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id "NO_SMS_CODE"); + if (strlen(sms_code) < 2) { + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id "SMS_CODE_TOO_SHORT"); return; } if (containi(sms_code, " ") != -1) { - client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1.", PREFIX); - return; - } - - if (strlen(sms_code) == 1 && containi(sms_code, "0") == 0) { - client_print_color(id, Red, "^4[%s] ^1Kod zwrotny ^3nie moze ^1byc rowny^3 0^1.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "SMS_CODE_NO_SPACE"); return; } @@ -1354,10 +1349,10 @@ public onSmsCodeEntered(id) } _purchaseService(id, const method[], const sms_code[] = "") { - client_print_color(id, Red, "^4[%s] ^1Trwa przeprowadzanie zakupu...", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "PURCHASE_IN_PROGRESS"); if (!_canUseShop()) { - client_print_color(id, Red, "^4[%s] ^1Sklep jest tymczaosowo nieaktywny.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "SHOP_IS_UNAVAILABLE"); return; } @@ -1424,7 +1419,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { } if (!makeRequest("POST", url, headers, body, "onPurchaseServiceResponse", id)) { - client_print_color(id, Red, "^4[%s] ^1Nie udalo sie wykonac zapytania HTTP.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "PURCHASE_REQUEST_FAILED"); } } @@ -1553,8 +1548,6 @@ _showPlayerServices(id) new language[16]; formatex(language, charsmax(language), "%L", id, "LANG"); - log_amx("Lang: %s", language); - new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1], url[MAX_URL + 1]; new curl_slist: headers; @@ -2086,7 +2079,7 @@ public task_displayLoading(task_id) new id = task_id - TASK_DISPLAY_LOADING; if (is_user_connected(id)) { - client_print_color(id, Red, "^4[%s] ^1Ladowanie...", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "LOADING"); } } From cb793955520eb7c37ff7334521de338943b5e3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 21 Apr 2020 13:16:37 +0200 Subject: [PATCH 102/124] Translations --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 8 +++++- cstrike/addons/amxmodx/scripting/shopsms.sma | 26 ++++++++++++-------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 5597e24..85a6675 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -11,6 +11,7 @@ INVALID_PASSWORD = Invalid password LANG=english LICENSE_VALIDATION_FAILED = License validation failed. LOADING = Loading... +LOAD_PLAYER_SERVICES_FAILED = Couldn't load information about your services. NO_AVAILABLE_SERVICE = No services are available for purchase. NO_PRICE_LIST = No price list for this service. PASSWORD_TOO_LONG = The password is too long. The maximum length is %d. @@ -18,8 +19,10 @@ PASSWORD_TOO_SHORT = The password is too short. The minimum length is %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Wallet PAYMENT_SMS_INFO = Chosen service: %s ^n\wInfo: \y%s^n^n\rIn order to make a purchase send SMS^n\wMessage: \y%s^n\wNumber: \y%s^n\wPrice: \y%s + VAT\d ( %s )^n^n\wWait for the return code after sending and SMS.^nIn order to enter it press: \y1^n^n\wTo exit press: \y0 +PURCHASE_ERRORS = Purchase errors PURCHASE_IN_PROGRESS = Purchae in progress... -PURCHASE_REQUEST_FAILED = Purchase failed. There was an HTTP error. +PURCHASE_REQUEST_FAILED = Purchase ^3failed^1. There was an HTTP error. +REUSE_SMS_CODE = Reuse the same SMS code once again. SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. SHOP_IS_UNAVAILABLE = Shop isn't available. @@ -44,6 +47,7 @@ INVALID_PASSWORD = Nieprawidlowe hasło LANG=polish LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. LOADING = Ładowanie... +LOAD_PLAYER_SERVICES_FAILED = Niestety nie udało się uzyskać informacji o Twoich usługach. NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. NO_PRICE_LIST = Brak cennika dla tej uslugi. PASSWORD_TOO_LONG = Podane hasło jest za długie. Maksymalna ilość znaków wynosi %d. @@ -51,8 +55,10 @@ PASSWORD_TOO_SHORT = Hasło jest za krótkie. Minimalna ilość znaków wynosi % PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Portfel PAYMENT_SMS_INFO = Wybrano usługę: %s ^n\wInfo: \y%s^n^n\rW celu dokonania zakupu, wyślij SMSa^n\wO treści: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%s + VAT\d ( %s )^n^n\wPo wysłaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wciśnij: \y1^n^n\wAby wyjść, wciśnij: \y0 +PURCHASE_ERRORS = Błędy przy zakupie usługi PURCHASE_IN_PROGRESS = Trwa przeprowadzanie zakupu... PURCHASE_REQUEST_FAILED = Nie udało się dokonać zakupu. Wystąpił błąd z zapytaniem HTTP. +REUSE_SMS_CODE = Uzyj ponownie tego samego kodu zwrotnego SMS. SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. SHOP_IS_UNAVAILABLE = Sklep jest tymczasowo nieaktywny. diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index fda7a14..4809b63 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -1430,13 +1430,14 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl } if (code != CURLE_OK) { + // TODO Check how to get server language _log("Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); - client_print_color(playerId, Red, "^4[%s] ^1Zakup ^3nie zostal sfinalizowany ^1z nieznanych powodow. Error: %d", PREFIX, code); + client_print_color(playerId, Red, "^4[%s] ^1%L Error: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", code); return; } if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny HTTP code: %d", PREFIX, statusCode); + client_print_color(playerId, Red, "^4[%s] ^1%L HTTP code: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", statusCode); return; } @@ -1452,21 +1453,26 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl client_print_color(playerId, Red, "^4[%s] ^1%s", PREFIX, text); } else { _log("Invalid purchase response: %s", content); - client_print_color(playerId, Red, "^4[%s] ^1Wystapil blad. Brak odpowiedzi z serwera.", PREFIX); + client_print_color(playerId, Red, "^4[%s] ^1%L Invalid response.", PREFIX, id, "PURCHASE_REQUEST_FAILED"); } if (equal(status, "warnings")) { + new title[64]; + formated(title, charsmax(title), "%L", id, "PURCHASE_ERRORS"); formatex(g_szTemp, charsmax(g_szTemp), "\ \ \ -
    Bledy ktore wystapily przy zakupie uslugi
    \ +
    %s
    \ %s^n\ - Uzyj jeszcze raz tego samego kodu zwrotnego sms.\ - ", - warnings + %L.\ + ", + title, + warnings, + id, + "REUSE_SMS_CODE" ); - show_motd(playerId, g_szTemp, "Bledy przy zakupie uslugi"); + show_motd(playerId, g_szTemp, title); } else if (equal(status, "purchased")) { _handleServicePurchase(playerId); @@ -1564,7 +1570,7 @@ _showPlayerServices(id) if (makeRequest("GET", url, headers, "", "onShowPlayerServicesResponse", id)) { set_task(0.0, "task_displayLoading", TASK_DISPLAY_LOADING + id); } else { - client_print_color(id, Red, "^4[%s] ^1Niestety, nie udalo sie uzyskac informacji o Twoich uslugach.", PREFIX); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "LOAD_PLAYER_SERVICES_FAILED"); } } @@ -1579,7 +1585,7 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, } if (code != CURLE_OK) { - client_print_color(playerId, Red, "^4[%s] ^1Niestety, nie udalo sie uzyskac informacji o Twoich uslugach. Error: %d", PREFIX, code); + client_print_color(playerId, Red, "^4[%s] ^1%L Error: %d", PREFIX, id, "LOAD_PLAYER_SERVICES_FAILED", code); return; } From 055f5e5613633fb7a0c36758a221f136e81a002c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 21 Apr 2020 15:34:36 +0200 Subject: [PATCH 103/124] More translations --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 30 +++++-- cstrike/addons/amxmodx/scripting/shopsms.sma | 95 ++++++++++---------- 2 files changed, 72 insertions(+), 53 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 85a6675..d0023eb 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -1,28 +1,37 @@ [en] +ACTIVE_PLAYER_SERVICES = Active services CHOOSE_PAYMENT_METHOD = Choose a payment method CHOOSE_SERVICE = Choose a service CHOOSE_SERVICE_TYPE = Choose a service type CHOOSE_QUANTITY = Choose quantity for: %s COMMERCIAL = We encourage everyone to use ^3the shop! ^1Just type: ^4%s -CONTACT_US = In case of an issue contact us +CONTACT_US = In case of an issue contact us. FLAGS_RELOADED = The list of flags bought in the shop has been reloaded correctly. -FLAGS_WERE_RELOADED_RECENTLY = Someone has just reloaded the list. Wait a moment. +FLAGS_RELOADED_RECENTLY = Someone has just reloaded the list. Wait a moment. +FOREVER = Forever INVALID_PASSWORD = Invalid password LANG=english LICENSE_VALIDATION_FAILED = License validation failed. LOADING = Loading... LOAD_PLAYER_SERVICES_FAILED = Couldn't load information about your services. NO_AVAILABLE_SERVICE = No services are available for purchase. +NO_PLAYER_SERVICES = You don't have ^3any services ^1yet. Change it! Type: ^3%s NO_PRICE_LIST = No price list for this service. PASSWORD_TOO_LONG = The password is too long. The maximum length is %d. PASSWORD_TOO_SHORT = The password is too short. The minimum length is %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Wallet PAYMENT_SMS_INFO = Chosen service: %s ^n\wInfo: \y%s^n^n\rIn order to make a purchase send SMS^n\wMessage: \y%s^n\wNumber: \y%s^n\wPrice: \y%s + VAT\d ( %s )^n^n\wWait for the return code after sending and SMS.^nIn order to enter it press: \y1^n^n\wTo exit press: \y0 +PLAYER_SERVICE_INFO = %s - expires: %s +PLAYER_SERVICES_REQUEST_FAILED = Active services request failed. An HTTP error has occured. +PURCHASE_DETAILS = Purchase details PURCHASE_ERRORS = Purchase errors +PURCHASE_FAILED = An purchase ^3error ^1occurred. Contact us: ^4%s PURCHASE_IN_PROGRESS = Purchae in progress... -PURCHASE_REQUEST_FAILED = Purchase ^3failed^1. There was an HTTP error. +PURCHASE_REQUEST_FAILED = Purchase ^3failed^1. An HTTP error has occured. +PURCHASE_SUCCEED = Purchase succeed! REUSE_SMS_CODE = Reuse the same SMS code once again. +SETINFO_INSTRUCTION = For the service to work, add the following entry to the file: %s SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. SHOP_IS_UNAVAILABLE = Shop isn't available. @@ -35,6 +44,7 @@ TYPE_NICK_PASS = Nick + Password TYPE_STEAM_ID = SteamID [pl] +ACTIVE_PLAYER_SERVICES = Aktywne usługi CHOOSE_PAYMENT_METHOD = Wybierz metodę płatności CHOOSE_SERVICE = Wybierz usługę CHOOSE_SERVICE_TYPE = Wybierz typ usługi @@ -42,23 +52,31 @@ CHOOSE_QUANTITY = Wybierz ilość %s CONTACT_US = W razie problemów skontaktuj się z nami COMMERCIAL = Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisać: ^4%s FLAGS_RELOADED = Prawidlowo przeladowano liste flag wykupionych w sklepie. -FLAGS_WERE_RELOADED_RECENTLY = Ktoś przed chwilą przeładował listę. Odczekaj chwilę. +FLAGS_RELOADED_RECENTLY = Ktoś przed chwilą przeładował listę. Odczekaj chwilę. +FOREVER = Na zawsze INVALID_PASSWORD = Nieprawidlowe hasło LANG=polish LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. LOADING = Ładowanie... LOAD_PLAYER_SERVICES_FAILED = Niestety nie udało się uzyskać informacji o Twoich usługach. NO_AVAILABLE_SERVICE = Brak dostepnych uslug do kupienia. +NO_PLAYER_SERVICES = Nie masz jeszcze ^3żadnej usługi^1. Może czas to zmienić? Wpisz: ^3%s NO_PRICE_LIST = Brak cennika dla tej uslugi. PASSWORD_TOO_LONG = Podane hasło jest za długie. Maksymalna ilość znaków wynosi %d. PASSWORD_TOO_SHORT = Hasło jest za krótkie. Minimalna ilość znaków wynosi %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Portfel PAYMENT_SMS_INFO = Wybrano usługę: %s ^n\wInfo: \y%s^n^n\rW celu dokonania zakupu, wyślij SMSa^n\wO treści: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%s + VAT\d ( %s )^n^n\wPo wysłaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wciśnij: \y1^n^n\wAby wyjść, wciśnij: \y0 +PLAYER_SERVICE_INFO = %s - wygasa: %s +PLAYER_SERVICES_REQUEST_FAILED = Nie udało się pozyskać danych nt. aktywnych usług. Wystapił błąd HTTP. +PURCHASE_DETAILS = Szczegóły zakupu PURCHASE_ERRORS = Błędy przy zakupie usługi +PURCHASE_FAILED = Wystąpił ^3bląd ^1podczas kupowania usługi. Skontaktuj się z nami: ^4%s PURCHASE_IN_PROGRESS = Trwa przeprowadzanie zakupu... -PURCHASE_REQUEST_FAILED = Nie udało się dokonać zakupu. Wystąpił błąd z zapytaniem HTTP. -REUSE_SMS_CODE = Uzyj ponownie tego samego kodu zwrotnego SMS. +PURCHASE_REQUEST_FAILED = Nie udało się dokonać zakupu. Wystąpił błąd HTTP. +PURCHASE_SUCCEED = Prawidłowo zakupiono usługę! +REUSE_SMS_CODE = Użyj ponownie tego samego kodu zwrotnego SMS. +SETINFO_INSTRUCTION = Aby usługa działała dodaj poniższy wpis do pliku: %s SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. SHOP_IS_UNAVAILABLE = Sklep jest tymczasowo nieaktywny. diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 4809b63..d5ba99b 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -244,7 +244,7 @@ public plugin_cfg() server_exec(); } else { // File was not created (probably due to invalid permissions) - _invalidPath(0, g_configPath); + _log("Couldn't create the file: %s. Probably due to lack of permissions. Create the file manually.", path); } new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1]; @@ -691,7 +691,7 @@ public command_reassignPlayersFlags() _sayCommand_reassignPlayersFlags(id) { if (g_lastReassign + 10 > get_systime()) { - client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "FLAGS_WERE_RELOADED_RECENTLY"); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "FLAGS_RELOADED_RECENTLY"); return; } @@ -1048,7 +1048,7 @@ _openPricingMenu(id, service_id) } new quantity[32 + 1]; - _getPriceQuantity(i, service_id, quantity, charsmax(quantity)); + _getPriceQuantity(i, service_id, id, quantity, charsmax(quantity)); formatex(szText, charsmax(szText), "\y%s \w%s", @@ -1279,7 +1279,7 @@ _displaySmsDetails(id) new sms_index = _getSmsIndexByPrice(price[SMS_PRICE]); ArrayGetArray(g_smses, sms_index, sms); - _getPriceQuantity(which_price[id], which_service[id], quantity, charsmax(quantity)); + _getPriceQuantity(which_price[id], which_service[id], id, quantity, charsmax(quantity)); formatex(g_szTemp, charsmax(g_szTemp), "\r%L^n^n%L", @@ -1432,12 +1432,12 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl if (code != CURLE_OK) { // TODO Check how to get server language _log("Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); - client_print_color(playerId, Red, "^4[%s] ^1%L Error: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", code); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Error: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", code); return; } if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1%L HTTP code: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", statusCode); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1HTTP code: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", statusCode); return; } @@ -1453,7 +1453,7 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl client_print_color(playerId, Red, "^4[%s] ^1%s", PREFIX, text); } else { _log("Invalid purchase response: %s", content); - client_print_color(playerId, Red, "^4[%s] ^1%L Invalid response.", PREFIX, id, "PURCHASE_REQUEST_FAILED"); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Invalid response.", PREFIX, id, "PURCHASE_REQUEST_FAILED"); } if (equal(status, "warnings")) { @@ -1469,8 +1469,7 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl ", title, warnings, - id, - "REUSE_SMS_CODE" + id, "REUSE_SMS_CODE" ); show_motd(playerId, g_szTemp, title); } @@ -1490,13 +1489,16 @@ _handleServicePurchase(id) DestroyForward(forward_handle); new quantity[32 + 1]; - _getPriceQuantity(which_price[id], which_service[id], quantity, charsmax(quantity)); + _getPriceQuantity(which_price[id], which_service[id], id, quantity, charsmax(quantity)); if (ret == SS_ERROR) { - client_print_color(id, Red, "^4[%s] ^1Wystapil ^3blad ^1podczas kupowania uslugi. Zglos nam to: ^4%s", PREFIX, g_contact); - _logActor(id, "Wystapil blad podczas kupowania %s - %s; Kwota: %d", service[sNAME], quantity, price[SMS_PRICE]); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "PURCHASE_FAILED", g_contact); + _logActor(id, "Purchase error. Service: [%s] Quantity: [%s] Price: [%d]", service[sNAME], quantity, price[SMS_PRICE]); return; } + + new title[64]; + formatex(title, charsmax(title), "%L", id, "PURCHASE_DETAILS"); if (b_types[id] & (TYPE_NICK | TYPE_IP)) { // Set user a password @@ -1504,27 +1506,33 @@ _handleServicePurchase(id) formatex(g_szTemp, charsmax(g_szTemp), "


    \ -

    Wykupiles/as usluge: %s

    \ - Aby usluga dziala, dodaj wpis do pliku config.cfg:
    \ +

    %L %s

    \ + %L
    \ setinfo _ss ^"%s^"

    \ - W razie problemow skontaktuj sie z nami.\ -

    ", - service[sNAME], b_passwords[id] + %L\ +

    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Ή!wyeofNFoe*nRO&lo=VjDX#Av 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

    Ws~VFRtLf~mFKxt+bv4!u&&}~_S9o>u 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%0DvY?S^`nw7K3_ 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

  • ", + id, "PURCHASE_SUCCEED", + service[sNAME], + id, "SETINFO_INSTRUCTION", "config.cfg", + b_passwords[id], + id, "CONTACT_US" ); - show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); + show_motd(id, g_szTemp, title); } else if (b_types[id] & TYPE_SID) { formatex(g_szTemp, charsmax(g_szTemp), "


    \ -

    Wykupiles/as usluge: %s

    \ - W razie problemow skontaktuj sie z nami.\ -

    ", - service[sNAME] +

    %L %s

    \ + %L\ + ", + id, "PURCHASE_SUCCEED", + service[sNAME], + id, "CONTACT_US" ); - show_motd(id, g_szTemp, "Informacje dotyczace uslugi"); + show_motd(id, g_szTemp, title); } - client_print_color(id, Blue, "^4[%s] ^1Prawidlowo zakupiono ^4%s^1: %s", PREFIX, service[sNAME], quantity); + client_print_color(id, Blue, "^4[%s] ^1%L ^4%s^1: %s", PREFIX, id, "PURCHASE_SUCCEED", service[sNAME], quantity); // If the service has flags assigned then let's reload players flags // Reload has to be delayed a little bit so that user password would be loaded already @@ -1585,23 +1593,24 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, } if (code != CURLE_OK) { - client_print_color(playerId, Red, "^4[%s] ^1%L Error: %d", PREFIX, id, "LOAD_PLAYER_SERVICES_FAILED", code); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Error: %d", PREFIX, id, "LOAD_PLAYER_SERVICES_FAILED", code); return; } if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1Zapytanie zwrocilo bledny HTTP code: %d.", PREFIX, statusCode); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1HTTP code %d.", PREFIX, id, "PLAYER_SERVICES_REQUEST_FAILED", statusCode); return; } - new count, key[MAX_CONFIG_KEY + 1]; - new menu = menu_create("Twoje obecne uslugi", "showPlayerServices_handler"); + new count, key[MAX_CONFIG_KEY + 1], menu_title[64]; + formatex(menu_title, charsmax(menu_title), "%L", id, "ACTIVE_PLAYER_SERVICES"); + new menu = menu_create(menu_title, "showPlayerServices_handler"); new Trie:dict = _createResponseDict(content); if (!TrieGetTextInt(dict, "c", count)) { - _log("Invalid user services response. | %s", content); - client_print_color(playerId, Red, "^4[%s] ^1Nieprawidlowa odpowiedz serwera. Zglos problem opiekunowi serwera.", PREFIX); + _log("Invalid player services response. | %s", content); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Invalid response", PREFIX, id, "PLAYER_SERVICES_REQUEST_FAILED"); TrieDestroy(dict); return; } @@ -1615,7 +1624,7 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, formatex(key, charsmax(key), "%d.e", i); TrieGetString(dict, key, expire, charsmax(expire)); - formatex(item_text, charsmax(item_text), "%s - wygasa: %s", service_name, expire); + formatex(item_text, charsmax(item_text), "%L", id, "PLAYER_SERVICE_INFO", service_name, expire); menu_additem(menu, item_text); } @@ -1627,7 +1636,7 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, else { new command[MAX_COMMAND + 1]; _getShopCommand(command, charsmax(command)); - client_print_color(playerId, Red, "^4[%s] ^1Nie masz jeszcze ^3zadnej uslugi^1. Moze czas to zmienic? ;-) Wpisz: ^3%s", PREFIX, command); + client_print_color(playerId, Red, "^4[%s] ^1%L", PREFIX, id, "NO_PLAYER_SERVICES", command); } } @@ -1856,15 +1865,6 @@ _checkLoadedServices() log_amx("%d services are ready to be purchased.", ArraySize(g_services)); } -_invalidPath(id, const path[]) -{ - _log("Nie mozna utworzyc pliku/folderu: %s. Prawdopodonbnie brak uprawnien do zapisu. Utworz plik recznie.", path); - - if (id) { - client_print_color(id, Blue, "^4[%s] ^1Wystapil ^3blad ^1przy zapisywaniu ustawien. Prawdopodobnie ^4brak uprawnien^1.", PREFIX); - } -} - _getServicePluginByID(const id[]) { new tmp[MAX_SERVICE_ID + 1]; @@ -1914,7 +1914,7 @@ _getOrderOfType(type) return 0; } -_getPriceQuantity(price_index, service_index, output[], len) +_getPriceQuantity(price_index, service_index, player_id, output[], len) { new price[e_Price]; new service[e_Service]; @@ -1923,12 +1923,11 @@ _getPriceQuantity(price_index, service_index, output[], len) ArrayGetArray(g_services, service_index, service); if (price[QUANTITY] == -1) { - formatex(output, len, "Na zawsze"); + formatex(output, len, "%L", player_id, "FOREVER"); } else { - new temp[32 + 1]; - groupDigits(price[QUANTITY], temp, charsmax(temp)); - formatex(output, len, "%s %s", temp, service[TAG]); + groupDigits(price[QUANTITY], output, len); + formatex(output[strlen(output)], len - strlen(output), "%s", service[TAG]); } } @@ -2018,6 +2017,8 @@ _explodeCommands(const text[], Trie:dict) // ------------------------------------------------- ERRORS ---------------------------------------------------- // +// TODO Translate errors + // License _errorUnknown() { _log("Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); @@ -2205,7 +2206,7 @@ runRequestCallback(const function[], const httpResponseContent[], playerId, CURL public native_registerService(plugin, params) { if (params != 1) { - _log("Wystapil blad podczas dodawania uslugi. Bledna ilosc argumentow funkcji ss_register_service"); + _log("An error occurred while registering the service. Invalid number of arguments passed to the ss_register_service function."); return SS_BAD_ARGS; } From ba3c2cf686a20c312ad984446334ef20b636c858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 21 Apr 2020 15:50:45 +0200 Subject: [PATCH 104/124] More translations --- .../scripting/include/shopsms_const.inc | 2 +- cstrike/addons/amxmodx/scripting/shopsms.sma | 36 +++++++++---------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc index 8443cb3..71dfa98 100755 --- a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc @@ -7,7 +7,7 @@ #define VERSION "3.11.0-rc.1" -#define PREFIX "SHOP-SMS" +#define PREFIX "SKLEP-SMS" #define SS_OK -1 #define SS_ERROR -2 diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index d5ba99b..1e95c2b 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -244,7 +244,7 @@ public plugin_cfg() server_exec(); } else { // File was not created (probably due to invalid permissions) - _log("Couldn't create the file: %s. Probably due to lack of permissions. Create the file manually.", path); + _log("Couldn't create the file: %s. Probably due to lack of permissions. Create the file manually.", g_configPath); } new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1]; @@ -1333,10 +1333,10 @@ public onSmsCodeEntered(id) new sms_code[MAX_CODE + 1]; read_argv(1, sms_code, charsmax(sms_code)); - _logActor(id, "Entered sms code: %s", sms_code); + _logActor(id, "Entered sms code: [%s]", sms_code); if (strlen(sms_code) < 2) { - client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id "SMS_CODE_TOO_SHORT"); + client_print_color(id, Red, "^4[%s] ^1%L", PREFIX, id, "SMS_CODE_TOO_SHORT"); return; } @@ -1430,14 +1430,12 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl } if (code != CURLE_OK) { - // TODO Check how to get server language - _log("Zakup nie zostal sfinalizowany z nieznanych powodow. Error: %d", code); - client_print_color(playerId, Red, "^4[%s] ^1%L ^1Error: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", code); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Error: %d", PREFIX, playerId, "PURCHASE_REQUEST_FAILED", code); return; } if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1%L ^1HTTP code: %d", PREFIX, id, "PURCHASE_REQUEST_FAILED", statusCode); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1HTTP code: %d", PREFIX, playerId, "PURCHASE_REQUEST_FAILED", statusCode); return; } @@ -1453,23 +1451,23 @@ public onPurchaseServiceResponse(const content[], CURLcode: code, statusCode, pl client_print_color(playerId, Red, "^4[%s] ^1%s", PREFIX, text); } else { _log("Invalid purchase response: %s", content); - client_print_color(playerId, Red, "^4[%s] ^1%L ^1Invalid response.", PREFIX, id, "PURCHASE_REQUEST_FAILED"); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Invalid response.", PREFIX, playerId, "PURCHASE_REQUEST_FAILED"); } if (equal(status, "warnings")) { new title[64]; - formated(title, charsmax(title), "%L", id, "PURCHASE_ERRORS"); + formatex(title, charsmax(title), "%L", playerId, "PURCHASE_ERRORS"); formatex(g_szTemp, charsmax(g_szTemp), "\ \ \
    %s
    \ - %s^n\ - %L.\ + %s
    \ + %L\ ", title, warnings, - id, "REUSE_SMS_CODE" + playerId, "REUSE_SMS_CODE" ); show_motd(playerId, g_szTemp, title); } @@ -1593,24 +1591,24 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, } if (code != CURLE_OK) { - client_print_color(playerId, Red, "^4[%s] ^1%L ^1Error: %d", PREFIX, id, "LOAD_PLAYER_SERVICES_FAILED", code); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Error: %d", PREFIX, playerId, "LOAD_PLAYER_SERVICES_FAILED", code); return; } if (statusCode >= 300) { - client_print_color(playerId, Red, "^4[%s] ^1%L ^1HTTP code %d.", PREFIX, id, "PLAYER_SERVICES_REQUEST_FAILED", statusCode); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1HTTP code %d.", PREFIX, playerId, "PLAYER_SERVICES_REQUEST_FAILED", statusCode); return; } new count, key[MAX_CONFIG_KEY + 1], menu_title[64]; - formatex(menu_title, charsmax(menu_title), "%L", id, "ACTIVE_PLAYER_SERVICES"); + formatex(menu_title, charsmax(menu_title), "%L", playerId, "ACTIVE_PLAYER_SERVICES"); new menu = menu_create(menu_title, "showPlayerServices_handler"); new Trie:dict = _createResponseDict(content); if (!TrieGetTextInt(dict, "c", count)) { _log("Invalid player services response. | %s", content); - client_print_color(playerId, Red, "^4[%s] ^1%L ^1Invalid response", PREFIX, id, "PLAYER_SERVICES_REQUEST_FAILED"); + client_print_color(playerId, Red, "^4[%s] ^1%L ^1Invalid response", PREFIX, playerId, "PLAYER_SERVICES_REQUEST_FAILED"); TrieDestroy(dict); return; } @@ -1624,7 +1622,7 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, formatex(key, charsmax(key), "%d.e", i); TrieGetString(dict, key, expire, charsmax(expire)); - formatex(item_text, charsmax(item_text), "%L", id, "PLAYER_SERVICE_INFO", service_name, expire); + formatex(item_text, charsmax(item_text), "%L", playerId, "PLAYER_SERVICE_INFO", service_name, expire); menu_additem(menu, item_text); } @@ -1636,7 +1634,7 @@ public onShowPlayerServicesResponse(const content[], CURLcode: code, statusCode, else { new command[MAX_COMMAND + 1]; _getShopCommand(command, charsmax(command)); - client_print_color(playerId, Red, "^4[%s] ^1%L", PREFIX, id, "NO_PLAYER_SERVICES", command); + client_print_color(playerId, Red, "^4[%s] ^1%L", PREFIX, playerId, "NO_PLAYER_SERVICES", command); } } @@ -1927,7 +1925,7 @@ _getPriceQuantity(price_index, service_index, player_id, output[], len) } else { groupDigits(price[QUANTITY], output, len); - formatex(output[strlen(output)], len - strlen(output), "%s", service[TAG]); + formatex(output[strlen(output)], len - strlen(output), " %s", service[TAG]); } } From 12973424f932ae2ecd028f2de9e7109008dc74fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 21 Apr 2020 15:57:53 +0200 Subject: [PATCH 105/124] Version 3.11.0 --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 6 +++--- cstrike/addons/amxmodx/scripting/include/shopsms_const.inc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index d0023eb..bf7a853 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -31,7 +31,7 @@ PURCHASE_IN_PROGRESS = Purchae in progress... PURCHASE_REQUEST_FAILED = Purchase ^3failed^1. An HTTP error has occured. PURCHASE_SUCCEED = Purchase succeed! REUSE_SMS_CODE = Reuse the same SMS code once again. -SETINFO_INSTRUCTION = For the service to work, add the following entry to the file: %s +SETINFO_INSTRUCTION = Save password by adding the following entry to the file: %s SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. SHOP_IS_UNAVAILABLE = Shop isn't available. @@ -54,7 +54,7 @@ COMMERCIAL = Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisa FLAGS_RELOADED = Prawidlowo przeladowano liste flag wykupionych w sklepie. FLAGS_RELOADED_RECENTLY = Ktoś przed chwilą przeładował listę. Odczekaj chwilę. FOREVER = Na zawsze -INVALID_PASSWORD = Nieprawidlowe hasło +INVALID_PASSWORD = Nieprawidłowe hasło LANG=polish LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. LOADING = Ładowanie... @@ -76,7 +76,7 @@ PURCHASE_IN_PROGRESS = Trwa przeprowadzanie zakupu... PURCHASE_REQUEST_FAILED = Nie udało się dokonać zakupu. Wystąpił błąd HTTP. PURCHASE_SUCCEED = Prawidłowo zakupiono usługę! REUSE_SMS_CODE = Użyj ponownie tego samego kodu zwrotnego SMS. -SETINFO_INSTRUCTION = Aby usługa działała dodaj poniższy wpis do pliku: %s +SETINFO_INSTRUCTION = Zapisz hasło dodając poniższy wpis do pliku: %s SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. SHOP_IS_UNAVAILABLE = Sklep jest tymczasowo nieaktywny. diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc index 71dfa98..bbb3ec3 100755 --- a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc @@ -5,7 +5,7 @@ #pragma library "shopsms_const" -#define VERSION "3.11.0-rc.1" +#define VERSION "3.11.0" #define PREFIX "SKLEP-SMS" From ab4bc3202dcf6bbc1d6c196aa774e3539522bb9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Tue, 21 Apr 2020 15:59:07 +0200 Subject: [PATCH 106/124] Change commands order --- cstrike/addons/amxmodx/scripting/shopsms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 1e95c2b..ccf07c4 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -179,7 +179,7 @@ public plugin_precache() _createShopSmsConfigFile(); g_cvarOn = register_cvar("shopsms_on", "1"); - g_cvarShopCommands = register_cvar("shopsms_shop_commands", "/shopsms,/sklepsms"); + g_cvarShopCommands = register_cvar("shopsms_shop_commands", "/sklepsms,/shopsms"); g_cvarReloadCommands = register_cvar("shopsms_reload_commands", "/przeladuj"); g_cvarServicesCommands = register_cvar("shopsms_services_commands", "/uslugi"); g_cvarCommercial = register_cvar("shopsms_commercial", "137"); @@ -1702,7 +1702,7 @@ _createShopSmsConfigFile() iLen += formatex(szText[iLen], iMax-iLen, "shopsms_on ^"1^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Comma-separated commands list, which can be used via chat, to display the shop menu^n"); - iLen += formatex(szText[iLen], iMax-iLen, "shopsms_shop_commands ^"/shopsms,/sklepsms^"^n"); + iLen += formatex(szText[iLen], iMax-iLen, "shopsms_shop_commands ^"/sklepsms,/shopsms^"^n"); iLen += formatex(szText[iLen], iMax-iLen, "^n"); iLen += formatex(szText[iLen], iMax-iLen, "// Comma-separated commands list, which can be used via chat, to reload players flags^n"); iLen += formatex(szText[iLen], iMax-iLen, "shopsms_reload_commands ^"/przeladuj^"^n"); From 0b3af5812bc52fc47122d52fe44e7399a0647cdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 27 Apr 2020 11:03:29 +0200 Subject: [PATCH 107/124] Add translations --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 28 +++++++++++++ .../addons/amxmodx/scripting/amxbans_core.sma | 15 +++++-- cstrike/addons/amxmodx/scripting/shopsms.sma | 40 ++++++++----------- 3 files changed, 56 insertions(+), 27 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index bf7a853..0e0c37b 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -6,11 +6,23 @@ CHOOSE_SERVICE_TYPE = Choose a service type CHOOSE_QUANTITY = Choose quantity for: %s COMMERCIAL = We encourage everyone to use ^3the shop! ^1Just type: ^4%s CONTACT_US = In case of an issue contact us. +ERROR_10 = Error 10 - The response from the license validation server cannot be read. See logs. +ERROR_11 = Error 11 - The license validation server returned invalid an HTTP CODE [%d]. +ERROR_12 = Error 12 - License data validation failed. +ERROR_13 = Error 13 - Invalid license token. +ERROR_14 = Error 14 - Licencja nie wspiera serwerów AMXX lub przekroczono limit stron WWW. +ERROR_15 = Error 15 - License error. %s +ERROR_20 = Error 20 - Couldn't load server configuration. Error [%d] +ERROR_21 = Error 21 - Invalid server token. +ERROR_22 = Error 22 - The current version of the plugin is no longer supported. Please update the plugin. +ERROR_23 = Error 23 - The server configuration response cannot be read. +ERROR_24 = Error 24 - The following data were not provided: URL or server token. FLAGS_RELOADED = The list of flags bought in the shop has been reloaded correctly. FLAGS_RELOADED_RECENTLY = Someone has just reloaded the list. Wait a moment. FOREVER = Forever INVALID_PASSWORD = Invalid password LANG=english +LICENSE_VALIDATED = License was validated. LICENSE_VALIDATION_FAILED = License validation failed. LOADING = Loading... LOAD_PLAYER_SERVICES_FAILED = Couldn't load information about your services. @@ -22,6 +34,7 @@ PASSWORD_TOO_SHORT = The password is too short. The minimum length is %d. PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Wallet PAYMENT_SMS_INFO = Chosen service: %s ^n\wInfo: \y%s^n^n\rIn order to make a purchase send SMS^n\wMessage: \y%s^n\wNumber: \y%s^n\wPrice: \y%s + VAT\d ( %s )^n^n\wWait for the return code after sending and SMS.^nIn order to enter it press: \y1^n^n\wTo exit press: \y0 +PLAYER_SERVICES_LOADED = %d players services have been loaded. PLAYER_SERVICE_INFO = %s - expires: %s PLAYER_SERVICES_REQUEST_FAILED = Active services request failed. An HTTP error has occured. PURCHASE_DETAILS = Purchase details @@ -31,6 +44,7 @@ PURCHASE_IN_PROGRESS = Purchae in progress... PURCHASE_REQUEST_FAILED = Purchase ^3failed^1. An HTTP error has occured. PURCHASE_SUCCEED = Purchase succeed! REUSE_SMS_CODE = Reuse the same SMS code once again. +SERVICES_LOADED = %d services have been loaded. SETINFO_INSTRUCTION = Save password by adding the following entry to the file: %s SHOP_IS_BLOCKED = There are shop related errors. Check logs. SHOP_IS_DISABLED = Shop is ^3disabled^1. @@ -50,12 +64,24 @@ CHOOSE_SERVICE = Wybierz usługę CHOOSE_SERVICE_TYPE = Wybierz typ usługi CHOOSE_QUANTITY = Wybierz ilość %s CONTACT_US = W razie problemów skontaktuj się z nami +ERROR_10 = Error 10 - Wystąpił błąd podczas odczytywania odpowiedzi od serwera walidującego licencję. Zobacz logi. +ERROR_11 = Error 11 - Serwer walidacyjny zwrócił błędny HTTP CODE [%d]. +ERROR_12 = Error 12 - Walidacja danych wysłanych do serwera walidacyjnego nie powiodła się. +ERROR_13 = Error 13 - Błędny token licencji. +ERROR_14 = Error 14 - The license doesn't support AMXX servers or the website limit has been exceeded. +ERROR_15 = Error 15 - Błąd licencji. %s +ERROR_20 = Error 20 - Nie udało się pobrać konfiguracji serwera. Error [%d] +ERROR_21 = Error 21 - Błędny token serwera. +ERROR_22 = Error 22 - Obecna wersja pluginu nie jest już wspierana. Dokonaj aktualizacji pluginu. +ERROR_23 = Error 23 - Wystąpił błąd podczas ładowania konfiguracji serwera. +ERROR_24 = Error 24 - Nie podano następujących danych: URL lub token serwera. COMMERCIAL = Zapraszamy wszystkich do korzystania ze ^3sklepu! ^1Wystarczy wpisać: ^4%s FLAGS_RELOADED = Prawidlowo przeladowano liste flag wykupionych w sklepie. FLAGS_RELOADED_RECENTLY = Ktoś przed chwilą przeładował listę. Odczekaj chwilę. FOREVER = Na zawsze INVALID_PASSWORD = Nieprawidłowe hasło LANG=polish +LICENSE_VALIDATED = Licencja została zwalidowana. LICENSE_VALIDATION_FAILED = Walidacja licencji nie powiodła się. LOADING = Ładowanie... LOAD_PLAYER_SERVICES_FAILED = Niestety nie udało się uzyskać informacji o Twoich usługach. @@ -67,6 +93,7 @@ PASSWORD_TOO_SHORT = Hasło jest za krótkie. Minimalna ilość znaków wynosi % PAYMENT_METHOD_SMS = SMS PAYMENT_METHOD_WALLET = Portfel PAYMENT_SMS_INFO = Wybrano usługę: %s ^n\wInfo: \y%s^n^n\rW celu dokonania zakupu, wyślij SMSa^n\wO treści: \y%s^n\wNa numer: \y%s^n\wKoszt: \y%s + VAT\d ( %s )^n^n\wPo wysłaniu SMSa poczekaj na kod zwrotny.^nW celu wprowadzenia go, wciśnij: \y1^n^n\wAby wyjść, wciśnij: \y0 +PLAYER_SERVICES_LOADED = Załadowano %d usług graczy. PLAYER_SERVICE_INFO = %s - wygasa: %s PLAYER_SERVICES_REQUEST_FAILED = Nie udało się pozyskać danych nt. aktywnych usług. Wystapił błąd HTTP. PURCHASE_DETAILS = Szczegóły zakupu @@ -76,6 +103,7 @@ PURCHASE_IN_PROGRESS = Trwa przeprowadzanie zakupu... PURCHASE_REQUEST_FAILED = Nie udało się dokonać zakupu. Wystąpił błąd HTTP. PURCHASE_SUCCEED = Prawidłowo zakupiono usługę! REUSE_SMS_CODE = Użyj ponownie tego samego kodu zwrotnego SMS. +SERVICES_LOADED = Załadowano %d usług. SETINFO_INSTRUCTION = Zapisz hasło dodając poniższy wpis do pliku: %s SHOP_IS_BLOCKED = Wystąpiły błędy ze sklepem. Zobacz logi. SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. diff --git a/cstrike/addons/amxmodx/scripting/amxbans_core.sma b/cstrike/addons/amxmodx/scripting/amxbans_core.sma index 59824d3..e652d9e 100755 --- a/cstrike/addons/amxmodx/scripting/amxbans_core.sma +++ b/cstrike/addons/amxmodx/scripting/amxbans_core.sma @@ -593,8 +593,8 @@ checkAccess(id, index, name[], ip[], authid[], AuthData[], Flags, password[], pa new password3[33], md5_password[34], md5_password2[34]; admins_lookup(index,AdminProp_Password,password3,charsmax(password3)); - md5(password,md5_password); - md5(password2,md5_password2); + vc_md5(password,md5_password); + vc_md5(password2,md5_password2); //log_amx("%s %s %s %s %s",password,md5_password,password2,md5_password2,password3); if ( equal(password, password3) || equal(md5_password, password3) || equal(password2, password3) || equal(md5_password2, password3) ) @@ -730,7 +730,7 @@ public client_infochanged(id) return PLUGIN_CONTINUE } -public client_disconnect(id) +public client_disconnected(id) { if(g_isAdmin[id]) { @@ -788,3 +788,12 @@ public native_amxbans_static_bantime() if(get_cvar_num("amxbans_debug") >= 3) log_amx("[AMXBans Core] Native static bantime: id: %d | result: %d",id,g_iAdminUseStaticBantime[id]) return g_iAdminUseStaticBantime[id] } + +vc_md5(const szString[], md5buffer[34]) +{ + #if defined hash_string + hash_string(szString, Hash_Md5, md5buffer, 34); + #else + md5(szString, md5buffer); + #endif +} diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index ccf07c4..2981a72 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -1829,7 +1829,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl } g_licenseValidated = true; - log_amx("License was validated."); + log_amx("%L", 0, "LICENSE_VALIDATED"); } // @@ -1855,12 +1855,12 @@ public keepDisplayingMenu(data[]) _checkLoadedPlayersFlags() { - log_amx("%d players services have been loaded.", ArraySize(g_playersFlags)); + log_amx("%L", 0, "PLAYER_SERVICES_LOADED", ArraySize(g_playersFlags)); } _checkLoadedServices() { - log_amx("%d services are ready to be purchased.", ArraySize(g_services)); + log_amx("%L", 0, "SERVICES_LOADED", ArraySize(g_services)); } _getServicePluginByID(const id[]) @@ -2015,64 +2015,56 @@ _explodeCommands(const text[], Trie:dict) // ------------------------------------------------- ERRORS ---------------------------------------------------- // -// TODO Translate errors - // License _errorUnknown() { - _log("Error 10 - Wystapil blad podczas odczytywania odpowiedzi od serwera walidujacego licencje. Zobacz logi."); g_blocked = true; + _log("%L", 0, "ERROR_10"); } _errorLicenseInvalidResponse(statusCode) { - _log("Error 11 - Serwer walidacyjny zwrocil bledny HTTP CODE %d.", statusCode); g_blocked = true; + _log("%L", 0, "ERROR_11", statusCode); } _errorValidationError() { - _log("Error 12 - Walidacja wyslanych danych do serwera walidacyjnego nie powiodla sie."); g_blocked = true; + _log("%L", 0, "ERROR_12"); } _errorInvalidToken() { - _log("Error 13 - Bledny token licencji."); g_blocked = true; + _log("%L", 0, "ERROR_13"); } _errorPaymentRequired() { - _make_error("Error 14 - Licencja nie wspiera tego typu serwera lub przekroczono limit stron WWW."); + set_fail_state("%L", 0, "ERROR_14"); } _errorForbidden(const text[] = "") { - new message[128 + 1]; - formatex(message, charsmax(message), "Error 15 - Blad licencji. %s", text); - _make_error(message); + set_fail_state("%L", 0, "ERROR_15", text); } // Config _errorConfigFailed(code) { - _log("Error 20 - Nie udalo sie pobrac konfiguracji serwera. Error: %d", code); g_blocked = true; + _log("%L", 0, "ERROR_20", code); } _errorNoServer() { - _make_error("Error 21 - Bledny token serwera."); + set_fail_state("%L", 0, "ERROR_21"); } _errorOutdatedVersion() { - _make_error("Error 22 - Obecna wersja pluginu nie jest juz wspierana. Dokonaj aktualizacji pluginu."); + set_fail_state("%L", 0, "ERROR_22"); } _errorConfigInvalidResponse() { - _log("Error 23 - Wystapil blad podczas ladowania konfiguracji serwera."); g_blocked = true; + _log("%L", 0, "ERROR_23"); } _errorNoShopCreds() { - _make_error("Error 24 - Nie podano danych sklepu: URL lub token."); -} - -_make_error(message[]) { - set_fail_state(message); + set_fail_state("%L", 0, "ERROR_24"); } // @@ -2166,7 +2158,7 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade if (code != CURLE_OK) { new szError[128]; curl_easy_strerror(code, szError, charsmax(szError)); - _log("CURL error: %d %s", code, szError); + _log("CURL error: [%d] %s", code, szError); } new statusCode; @@ -2182,7 +2174,7 @@ bool:makeRequest(const method[], const url[MAX_URL + 1], const curl_slist: heade runRequestCallback(const function[], const httpResponseContent[], playerId, CURLcode: code, statusCode) { #if defined IS_DEBUG - _log("Request response | %d %d %s", code, statusCode, httpResponseContent); + _log("Request response | [%d] [%d] %s", code, statusCode, httpResponseContent); #endif if (!strlen(function) || callfunc_begin(function) == 1) { From c5d95654407644e31a08185df4c93f777c3f3550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 27 Apr 2020 11:06:27 +0200 Subject: [PATCH 108/124] Refactor --- cstrike/addons/amxmodx/scripting/shopsms.sma | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 2981a72..925db1e 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -370,8 +370,8 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p return; } - if (statusCode == 404 || statusCode == 400) { - _errorNoServer(); + if (statusCode == 400) { + _errorInvalidServerToken(); return; } @@ -629,7 +629,7 @@ public onLoadPlayersFlagsResponse(const content[], CURLcode: code, statusCode, p } if (statusCode == 400) { - _errorNoServer(); + _errorInvalidServerToken(); return; } @@ -1779,7 +1779,7 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl } if (statusCode == 401) { - _errorInvalidToken(); + _errorInvalidLicenseToken(); return; } @@ -2031,7 +2031,7 @@ _errorValidationError() { _log("%L", 0, "ERROR_12"); } -_errorInvalidToken() { +_errorInvalidLicenseToken() { g_blocked = true; _log("%L", 0, "ERROR_13"); } @@ -2050,7 +2050,7 @@ _errorConfigFailed(code) { _log("%L", 0, "ERROR_20", code); } -_errorNoServer() { +_errorInvalidServerToken() { set_fail_state("%L", 0, "ERROR_21"); } From 6e89d3ceca9333e332a510c17440bf80dfc82d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 27 Apr 2020 11:26:13 +0200 Subject: [PATCH 109/124] Version 3.11.1-rc.1 --- cstrike/addons/amxmodx/scripting/include/shopsms_const.inc | 2 +- cstrike/addons/amxmodx/scripting/shopsms.sma | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc index bbb3ec3..3a9bf1b 100755 --- a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc @@ -5,7 +5,7 @@ #pragma library "shopsms_const" -#define VERSION "3.11.0" +#define VERSION "3.11.1-rc.1" #define PREFIX "SKLEP-SMS" diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 925db1e..edd3909 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -356,7 +356,7 @@ _loadServerConfig() _getShopToken(shop_token, charsmax(shop_token)); headers = curl_slist_append(headers, "Accept: application/assoc"); - formatex(url, charsmax(url), "%s/api/server/config?token=%s&version=%s&player_flags=1&language=english", shop_url, shop_token, VERSION); + formatex(url, charsmax(url), "%s/api/server/config?token=%s&version=%s&language=english", shop_url, shop_token, VERSION); if (!makeRequest("GET", url, headers, "", "onLoadServerConfigResponse")) { _errorConfigFailed(999); @@ -381,7 +381,7 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p } if (statusCode >= 300) { - _log("Invalid server config response HTTP code | %d", statusCode); + _log("Invalid server config response HTTP code [%d]", statusCode); _errorConfigInvalidResponse(); return; } From d6ca429bd5c06d02a16b67dc9974e764c3aa732a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 22 May 2020 13:04:36 +0200 Subject: [PATCH 110/124] VC set_fail_state --- cstrike/addons/amxmodx/scripting/shopsms.sma | 21 ++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index edd3909..f82deac 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -2037,11 +2037,15 @@ _errorInvalidLicenseToken() { } _errorPaymentRequired() { - set_fail_state("%L", 0, "ERROR_14"); + _throwError("ERROR_14"); } _errorForbidden(const text[] = "") { + #if AMXX_VERSION_NUM > 182 set_fail_state("%L", 0, "ERROR_15", text); + #else + set_fail_state("ERROR_15"); + #endif } // Config @@ -2051,11 +2055,11 @@ _errorConfigFailed(code) { } _errorInvalidServerToken() { - set_fail_state("%L", 0, "ERROR_21"); + _throwError("ERROR_21"); } _errorOutdatedVersion() { - set_fail_state("%L", 0, "ERROR_22"); + _throwError("ERROR_22"); } _errorConfigInvalidResponse() { @@ -2064,7 +2068,16 @@ _errorConfigInvalidResponse() { } _errorNoShopCreds() { - set_fail_state("%L", 0, "ERROR_24"); + _throwError("ERROR_24"); +} + +_throwError(const error[]) +{ + #if AMXX_VERSION_NUM > 182 + set_fail_state("%L", 0, error); + #else + set_fail_state(error); + #endif } // From 698a1514c7c43caa120d2aa2540d36c588ef36fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 22 May 2020 13:09:02 +0200 Subject: [PATCH 111/124] Version 3.11.1 --- cstrike/addons/amxmodx/scripting/include/shopsms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc index 3a9bf1b..0e2f1d1 100755 --- a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc @@ -5,7 +5,7 @@ #pragma library "shopsms_const" -#define VERSION "3.11.1-rc.1" +#define VERSION "3.11.1" #define PREFIX "SKLEP-SMS" From 2a558c537b8a9d6cdf3877f4f6572f0672720c2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 24 May 2020 09:22:23 +0200 Subject: [PATCH 112/124] Fix translations --- cstrike/addons/amxmodx/data/lang/shopsms.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cstrike/addons/amxmodx/data/lang/shopsms.txt b/cstrike/addons/amxmodx/data/lang/shopsms.txt index 0e0c37b..e0bfbf1 100644 --- a/cstrike/addons/amxmodx/data/lang/shopsms.txt +++ b/cstrike/addons/amxmodx/data/lang/shopsms.txt @@ -10,7 +10,7 @@ ERROR_10 = Error 10 - The response from the license validation server cannot be ERROR_11 = Error 11 - The license validation server returned invalid an HTTP CODE [%d]. ERROR_12 = Error 12 - License data validation failed. ERROR_13 = Error 13 - Invalid license token. -ERROR_14 = Error 14 - Licencja nie wspiera serwerów AMXX lub przekroczono limit stron WWW. +ERROR_14 = Error 14 - The license doesn't support AMXX servers or the website limit has been exceeded. ERROR_15 = Error 15 - License error. %s ERROR_20 = Error 20 - Couldn't load server configuration. Error [%d] ERROR_21 = Error 21 - Invalid server token. @@ -68,7 +68,7 @@ ERROR_10 = Error 10 - Wystąpił błąd podczas odczytywania odpowiedzi od serwe ERROR_11 = Error 11 - Serwer walidacyjny zwrócił błędny HTTP CODE [%d]. ERROR_12 = Error 12 - Walidacja danych wysłanych do serwera walidacyjnego nie powiodła się. ERROR_13 = Error 13 - Błędny token licencji. -ERROR_14 = Error 14 - The license doesn't support AMXX servers or the website limit has been exceeded. +ERROR_14 = Error 14 - Licencja nie wspiera serwerów AMXX lub przekroczono limit stron WWW. ERROR_15 = Error 15 - Błąd licencji. %s ERROR_20 = Error 20 - Nie udało się pobrać konfiguracji serwera. Error [%d] ERROR_21 = Error 21 - Błędny token serwera. @@ -110,7 +110,7 @@ SHOP_IS_DISABLE = Sklep jest obecnie ^3wylaczony^1. SHOP_IS_UNAVAILABLE = Sklep jest tymczasowo nieaktywny. SHOP_SMS = Sklep SMS SMS_CODE_NO_SPACE = Kod zwrotny ^3nie moze ^1zawierac ^3spacji^1. -SMS_CODE_TOO_SHORT = Kodu zwrotny jest zbyt krótki. +SMS_CODE_TOO_SHORT = Kod zwrotny jest zbyt krótki. TRANSACTION_ABORTED = Transakcja zostala ^3przerwana^1. TYPE_IP_PASS = IP + Hasło TYPE_NICK_PASS = Nick + Hasło From b0c19395da76fd588a2a3882406021860e54673c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 24 May 2020 09:29:46 +0200 Subject: [PATCH 113/124] Improve handling license error --- cstrike/addons/amxmodx/scripting/shopsms.sma | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index f82deac..c468fb6 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -1774,7 +1774,8 @@ public onValidateLicenseResponse(const content[], CURLcode: code, statusCode, pl g_validationAttempt = true; if (code != CURLE_OK) { - _log("License hasn't been validated. Reason is unknown. Error: %d", code); + _log("Invalid CURL code: %d", code); + _errorUnknown(); return; } @@ -2040,6 +2041,8 @@ _errorPaymentRequired() { _throwError("ERROR_14"); } +_error + _errorForbidden(const text[] = "") { #if AMXX_VERSION_NUM > 182 set_fail_state("%L", 0, "ERROR_15", text); From cf9f1bfe88136238e2883535ea35daed1f61f533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 24 May 2020 11:48:41 +0200 Subject: [PATCH 114/124] Remove --- cstrike/addons/amxmodx/scripting/shopsms.sma | 2 -- 1 file changed, 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index c468fb6..5b5cc0f 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -2041,8 +2041,6 @@ _errorPaymentRequired() { _throwError("ERROR_14"); } -_error - _errorForbidden(const text[] = "") { #if AMXX_VERSION_NUM > 182 set_fail_state("%L", 0, "ERROR_15", text); From f34d921f2c97080e33ed4db57e276d424cdf40c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 5 Jun 2020 13:03:09 +0200 Subject: [PATCH 115/124] Add ss_open_shop native --- .../amxmodx/scripting/include/shopsms.inc | 9 ++++- cstrike/addons/amxmodx/scripting/shopsms.sma | 35 ++++++++++++------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms.inc b/cstrike/addons/amxmodx/scripting/include/shopsms.inc index 49915d5..7b71431 100755 --- a/cstrike/addons/amxmodx/scripting/include/shopsms.inc +++ b/cstrike/addons/amxmodx/scripting/include/shopsms.inc @@ -14,9 +14,16 @@ native ss_register_service(const service_id[]); * service_id[] - Unique service ID ------------------------------*/ +native ss_open_shop(id); +/*------------------------------ + * Open shop menu + * --------------------------- + * id - ID of a player +------------------------------*/ + native ss_open_payment_method_menu(id); /*------------------------------ - * Continues shopping process. Function can be called if SS_STOP was returned in ss_service_chosen function. + * Continue shopping process. Function can be called if SS_STOP was returned in ss_service_chosen function. * --------------------------- * id - ID of a player making a purchase ------------------------------*/ diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 5b5cc0f..35b4107 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -166,8 +166,9 @@ public plugin_natives() { register_library("shopsms"); register_native("ss_register_service", "native_registerService"); - register_native("ss_show_service_purchase", "native_showServicePurchase"); + register_native("ss_open_shop", "native_openShopMenu"); register_native("ss_open_payment_method_menu", "native_openPaymentMethodMenu"); + register_native("ss_show_service_purchase", "native_showServicePurchase"); register_native("ss_log", "native_addLog"); register_native("ss_is_steam", "native_is_steam"); } @@ -2208,19 +2209,19 @@ runRequestCallback(const function[], const httpResponseContent[], playerId, CURL // public native_registerService(plugin, params) -{ +{ if (params != 1) { _log("An error occurred while registering the service. Invalid number of arguments passed to the ss_register_service function."); return SS_BAD_ARGS; } - + new id[MAX_SERVICE_ID + 1]; - + get_string(1, id, charsmax(id)); - + ArrayPushCell(service_plugins, plugin); ArrayPushString(service_ids, id); - + return SS_OK; } @@ -2235,31 +2236,41 @@ public native_showServicePurchase(plugin, params) if (params != 2) { return SS_BAD_ARGS; } - + new service_id[MAX_SERVICE_ID + 1]; new id = get_param(1); get_string(2, service_id, charsmax(service_id)); - + _openPricingMenu(id, _getServiceByID(service_id)); return SS_OK; } +public native_openShopMenu(plugin, params) +{ + if (params != 1) { + return SS_BAD_ARGS; + } + + _openShopMenu(get_param(1)); + return SS_OK; +} + public native_openPaymentMethodMenu(plugin, params) -{ +{ if (params != 1) { return SS_BAD_ARGS; } - + _openPaymentMethodMenu(get_param(1)); return SS_OK; } public bool:native_is_steam(plugin, params) -{ +{ if (params != 1) { return false; } - + return is_steam(get_param(1)); } From f9a2ab62d54b8759da497df97870943946a1452d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Fri, 5 Jun 2020 13:03:31 +0200 Subject: [PATCH 116/124] Version 3.11.2 --- cstrike/addons/amxmodx/scripting/include/shopsms_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc index 0e2f1d1..072589d 100755 --- a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc +++ b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc @@ -5,7 +5,7 @@ #pragma library "shopsms_const" -#define VERSION "3.11.1" +#define VERSION "3.11.2" #define PREFIX "SKLEP-SMS" From ae78201aa92765efc3485377799bc6e44507c81d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 7 Dec 2020 15:46:56 +0100 Subject: [PATCH 117/124] Improve bf2 (#19) --- .../scripting/shopsms_service_bf2_badge.sma | 90 +++++++++++-------- 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma index 64f2a56..30b7e30 100644 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma @@ -10,12 +10,19 @@ native bf2_set_user_badge(index, badge_id, level); #define PLUGIN "Shop SMS: BF2 badge" #define AUTHOR "SeeK" -#define TASK_MENU1 1000 +#define TASK_MENU 1000 new const service_id[MAX_SERVICE_ID + 1] = "bf2_badge"; -new stronaP[33], bool:wybranoP[33]; -new dane[33]; +// Keep track of active page number +new menuPage[33]; +new bool:badgeIdSelected[33]; +new badgeId[33]; + +/* + * badge_id - selected via menu defined below + * badge_level - selected via menu with available prices defined in ACP pricelist + */ public plugin_natives() { @@ -36,15 +43,16 @@ public ss_service_chosen(id, amount) { new menu = menu_create("Wybierz odznake:", "menuHandler"); new menu_callback = menu_makecallback("menuCallback"); - new nazwa[64]; + new name[64]; for(new i = 0; i < bf2_get_maxbadges(); ++i) { - bf2_get_badge_name(i, amount, nazwa, charsmax(nazwa)); + bf2_get_badge_name(i, amount, name, charsmax(name)); new data[2]; data[0] = i+1; + // Do not allow the purchase of a badge at this level if a user already has a higher or equal level data[1] = bf2_get_user_badge(id, i) >= amount ? 0 : 1; - menu_additem(menu, nazwa, data, 0, menu_callback); + menu_additem(menu, name, data, 0, menu_callback); } menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); @@ -52,16 +60,16 @@ public ss_service_chosen(id, amount) menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); // Reset - wybranoP[id] = false; - stronaP[id] = 0; + badgeIdSelected[id] = false; + menuPage[id] = 0; // Task data new data[2]; data[0] = id; data[1] = menu; - wyswietlMenu(data); - + openMenu(data); + return SS_STOP; } @@ -70,51 +78,55 @@ public menuCallback(id, menu, item) new data[3], iName[2]; new zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - + return data[1] ? ITEM_ENABLED : ITEM_DISABLED; } -public wyswietlMenu(data[]) +public openMenu(data[]) { new id = data[0]; - + if (!is_user_connected(id)) { menu_destroy(data[1]); return; } - - if (!wybranoP[id]) { - new menu, newmenu, page; - player_menu_info(id, menu, newmenu, page); - - if (newmenu != data[1]) { - menu_display(id, data[1], stronaP[id]); - } - else { - stronaP[id] = page; - } - - set_task(0.1, "wyswietlMenu", TASK_MENU1+id, data, 2); + + if (badgeIdSelected[id]) { + return; } + + new menu, newmenu, page; + player_menu_info(id, menu, newmenu, page); + + // New menu created, open it on the previously saved page + if (newmenu != data[1]) { + menu_display(id, data[1], menuPage[id]); + } + else { + // Save selected page for a future use + menuPage[id] = page; + } + + set_task(0.1, "openMenu", TASK_MENU+id, data, 2); } public menuHandler(id, menu, item) { if (item == MENU_EXIT) { - wybranoP[id] = true; + badgeIdSelected[id] = true; menu_destroy(menu); return; } if (item >= 0) { // Badge has been selected - wybranoP[id] = true; + badgeIdSelected[id] = true; new data[2], iName[2]; new zaccess, callback; menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - dane[id] = data[0] - 1; + badgeId[id] = data[0] - 1; menu_destroy(menu); @@ -124,19 +136,23 @@ public menuHandler(id, menu, item) public ss_service_bought(id, amount) { - new badge_id = dane[id]; + new badge_id = badgeId[id]; new badge_level = amount; if (bf2_set_user_badge(id, badge_id, badge_level) == -1) { return SS_ERROR; } - new szText[512]; - bf2_get_badge_name(badge_id, badge_level, szText, charsmax(szText)); - format(szText, charsmax(szText), "


    \ -

    Kupiles/as odznake: %s

    \ - W razie problemow skontaktuj sie z nami.\ -

    ", szText); + new szText[512], badge_name[128]; + bf2_get_badge_name(badge_id, badge_level, badge_name, charsmax(badge_name)); + formatex( + szText, charsmax(szText), + "


    \ +

    Kupiles/as odznake: %s

    \ + W razie problemow skontaktuj sie z nami.\ +

    ", + badge_name + ); show_motd(id, szText, "Informacje dotyczace uslugi"); return SS_OK; @@ -144,7 +160,7 @@ public ss_service_bought(id, amount) public native_filter(const native_name[], index, trap) { - if(trap == 0) { + if (trap == 0) { register_plugin(PLUGIN, VERSION, AUTHOR); pause_plugin(); return PLUGIN_HANDLED; From cdda7b20f1594e381a4cc4bb36f6c74f7f1b2d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Mon, 7 Dec 2020 20:01:59 +0100 Subject: [PATCH 118/124] Pass authorization type (#20) --- cstrike/addons/amxmodx/scripting/shopsms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 35b4107..421a13d 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -1407,7 +1407,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { ); vc_md5(sign_body, sign); - formatex(header, charsmax(header), "Authorization: %s", steam_id); + formatex(header, charsmax(header), "Authorization: Bearer %s", steam_id); headers = curl_slist_append(headers, header); headers = curl_slist_append(headers, "Accept: application/assoc"); @@ -1746,7 +1746,7 @@ _validateLicense() StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); formatex(header, charsmax(header), - "Authorization: %s", + "Authorization: Bearer %s", g_licenseToken ); headers = curl_slist_append(headers, header); From ef7bad14332db902e21085d5f7ffa491982aad53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sat, 19 Dec 2020 12:08:43 +0100 Subject: [PATCH 119/124] Extract scripting (#21) --- .../amxmodx/scripting/include/shopsms.inc | 104 --------- .../scripting/include/shopsms_const.inc | 19 -- .../scripting/shopsms_service_bf2_badge.sma | 169 -------------- .../scripting/shopsms_service_cod_exp.sma | 55 ----- .../scripting/shopsms_service_cod_te.sma | 208 ------------------ .../scripting/shopsms_service_extra_flags.sma | 32 --- .../scripting/shopsms_service_gxm_bm.sma | 43 ---- .../scripting/shopsms_service_gxm_exp.sma | 43 ---- .../scripting/shopsms_service_nickres.sma | 16 -- .../scripting/shopsms_service_slotres.sma | 33 --- .../amxmodx/scripting/shopsms_service_vip.sma | 33 --- .../scripting/shopsms_service_vippro.sma | 33 --- .../scripting/shopsms_service_zp_ap.sma | 42 ---- 13 files changed, 830 deletions(-) delete mode 100755 cstrike/addons/amxmodx/scripting/include/shopsms.inc delete mode 100755 cstrike/addons/amxmodx/scripting/include/shopsms_const.inc delete mode 100644 cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma delete mode 100755 cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms.inc b/cstrike/addons/amxmodx/scripting/include/shopsms.inc deleted file mode 100755 index 7b71431..0000000 --- a/cstrike/addons/amxmodx/scripting/include/shopsms.inc +++ /dev/null @@ -1,104 +0,0 @@ -#if defined _shopsms_included - #endinput -#endif -#define _shopsms_included - -#pragma library "shopsms" - -#include - -native ss_register_service(const service_id[]); -/*------------------------------ - * Register service so that players can purchase it. - * --------------------------- - * service_id[] - Unique service ID -------------------------------*/ - -native ss_open_shop(id); -/*------------------------------ - * Open shop menu - * --------------------------- - * id - ID of a player -------------------------------*/ - -native ss_open_payment_method_menu(id); -/*------------------------------ - * Continue shopping process. Function can be called if SS_STOP was returned in ss_service_chosen function. - * --------------------------- - * id - ID of a player making a purchase -------------------------------*/ - -native ss_show_service_purchase(id, const service_id[]); -/*------------------------------ - * Show service purchase menu - * --------------------------- - * id - ID of a player who makes a purchase - * service_id[] - ID of a service to be shown -------------------------------*/ - -native ss_log(const message[], any:...); -/*------------------------------ - * Log info to the shop server logs -------------------------------*/ - -native bool:ss_is_steam(id); -/*------------------------------ - * Check whether player is a steam player - * --------------------------- - * id - ID of a player -------------------------------*/ - -forward ss_service_data(name[], flags[]); -/*------------------------------ - * Forward sent ( to a service plugin ) when service data was fetched. - * --------------------------- - * name[] - service name - * flags[] - service flags - * --------------------------- - */ - -forward ss_service_addingtolist(id); -/*------------------------------ - * Forward sent ( to a service plugin ) when service is being added to the services menu. - * Function should return one of the following values: - * ITEM_ENABLED - service is AVAILABLE - * ITEM_DISABLED - service is UNAVAILABLE - * --------------------------- - * id - ID of a player making a purchase -------------------------------*/ - -forward ss_service_chosen(id, quantity); -/*------------------------------ - * Forward sent ( to a service plugin ) when service is chosen. - * Function should return one of the following values: - * SS_OK - * SS_STOP - when we want to stop purchase process for some time. - * Then we have to resume it using the ss_open_payment_method_menu native. - * --------------------------- - * id - ID of a player making a purchase - * quantity - select quantity ( option ) -------------------------------*/ - -forward ss_service_bought(id, quantity); -/*------------------------------ - * Forward sent ( to a service plugin ) when service is purchased. - * Vaue SS_ERROR can be returned in case of an error while adding the service. - * --------------------------- - * id - ID of a player making a purchase - * quantity - service quantity -------------------------------*/ - -forward ss_client_access(id, flags); -/*------------------------------ - * Forward sent to all plugins when a player is being granted access. - * Returned value is ignored. - * --------------------------- - * id - ID of a player - * flags - players flags -------------------------------*/ - -stock pause_plugin() { - static szFile[32]; - get_plugin(-1, szFile, sizeof szFile); - pause("ad", szFile); -} diff --git a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc deleted file mode 100755 index 072589d..0000000 --- a/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc +++ /dev/null @@ -1,19 +0,0 @@ -#if defined _shopsms_const_included - #endinput -#endif -#define _shopsms_const_included - -#pragma library "shopsms_const" - -#define VERSION "3.11.2" - -#define PREFIX "SKLEP-SMS" - -#define SS_OK -1 -#define SS_ERROR -2 -#define SS_STOP -3 -#define SS_BAD_ARGS -4 - -#define MAX_SERVICE_ID 16 - -#define ITEM_OFF 3 diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma deleted file mode 100644 index 30b7e30..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma +++ /dev/null @@ -1,169 +0,0 @@ -#include -#include - -native bf2_get_maxbadges(); -native bf2_get_badge_name(badge_id, badge_level, name[], len); -native bf2_get_user_badge(index, badge_id); -native bf2_set_user_badge(index, badge_id, level); - -#pragma semicolon 1 - -#define PLUGIN "Shop SMS: BF2 badge" -#define AUTHOR "SeeK" -#define TASK_MENU 1000 - -new const service_id[MAX_SERVICE_ID + 1] = "bf2_badge"; - -// Keep track of active page number -new menuPage[33]; -new bool:badgeIdSelected[33]; -new badgeId[33]; - -/* - * badge_id - selected via menu defined below - * badge_level - selected via menu with available prices defined in ACP pricelist - */ - -public plugin_natives() -{ - set_native_filter("native_filter"); -} - -public plugin_init() -{ - register_plugin(PLUGIN, VERSION, AUTHOR); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_chosen(id, amount) -{ - new menu = menu_create("Wybierz odznake:", "menuHandler"); - new menu_callback = menu_makecallback("menuCallback"); - new name[64]; - - for(new i = 0; i < bf2_get_maxbadges(); ++i) { - bf2_get_badge_name(i, amount, name, charsmax(name)); - new data[2]; - data[0] = i+1; - // Do not allow the purchase of a badge at this level if a user already has a higher or equal level - data[1] = bf2_get_user_badge(id, i) >= amount ? 0 : 1; - - menu_additem(menu, name, data, 0, menu_callback); - } - - menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); - menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - - // Reset - badgeIdSelected[id] = false; - menuPage[id] = 0; - - // Task data - new data[2]; - data[0] = id; - data[1] = menu; - - openMenu(data); - - return SS_STOP; -} - -public menuCallback(id, menu, item) -{ - new data[3], iName[2]; - new zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - - return data[1] ? ITEM_ENABLED : ITEM_DISABLED; -} - -public openMenu(data[]) -{ - new id = data[0]; - - if (!is_user_connected(id)) { - menu_destroy(data[1]); - return; - } - - if (badgeIdSelected[id]) { - return; - } - - new menu, newmenu, page; - player_menu_info(id, menu, newmenu, page); - - // New menu created, open it on the previously saved page - if (newmenu != data[1]) { - menu_display(id, data[1], menuPage[id]); - } - else { - // Save selected page for a future use - menuPage[id] = page; - } - - set_task(0.1, "openMenu", TASK_MENU+id, data, 2); -} - -public menuHandler(id, menu, item) -{ - if (item == MENU_EXIT) { - badgeIdSelected[id] = true; - menu_destroy(menu); - return; - } - - if (item >= 0) { - // Badge has been selected - badgeIdSelected[id] = true; - - new data[2], iName[2]; - new zaccess, callback; - menu_item_getinfo(menu, item, zaccess, data, charsmax(data), iName, charsmax(iName), callback); - - badgeId[id] = data[0] - 1; - - menu_destroy(menu); - - ss_open_payment_method_menu(id); - } -} - -public ss_service_bought(id, amount) -{ - new badge_id = badgeId[id]; - new badge_level = amount; - - if (bf2_set_user_badge(id, badge_id, badge_level) == -1) { - return SS_ERROR; - } - - new szText[512], badge_name[128]; - bf2_get_badge_name(badge_id, badge_level, badge_name, charsmax(badge_name)); - formatex( - szText, charsmax(szText), - "


    \ -

    Kupiles/as odznake: %s

    \ - W razie problemow skontaktuj sie z nami.\ -

    ", - badge_name - ); - show_motd(id, szText, "Informacje dotyczace uslugi"); - - return SS_OK; -} - -public native_filter(const native_name[], index, trap) -{ - if (trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); - pause_plugin(); - return PLUGIN_HANDLED; - } - return PLUGIN_CONTINUE; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma deleted file mode 100755 index 215f8d6..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include - -native cod_get_user_class(id); -native cod_get_user_xp(id); -native cod_set_user_xp(id, wartosc); - -#pragma semicolon 1 - -#define PLUGIN "Shop SMS: COD EXP" -#define AUTHOR "SeeK" - -new const service_id[MAX_SERVICE_ID + 1] = "cod_exp"; - -public plugin_natives() -{ - set_native_filter("native_filter"); -} - -public plugin_init() -{ - register_plugin(PLUGIN, VERSION, AUTHOR); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_chosen(id) -{ - if (!cod_get_user_class(id) ) { - client_print_color(id, Red, "^4[%s] ^1Musisz ^3wybrac klase^1, aby moc zakupic EXP.", PREFIX); - return SS_STOP; - } - - return SS_OK; -} - -public ss_service_bought(id, amount) -{ - cod_set_user_xp(id, cod_get_user_xp(id) + amount); -} - -public native_filter(const native_name[], index, trap) -{ - if (trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma deleted file mode 100755 index d8f55b5..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma +++ /dev/null @@ -1,208 +0,0 @@ -#include -#include -#include - -native cod_get_classes_num(); -native cod_get_class_name(perk, Return[], len); -native cod_get_user_class(id); -native cod_get_user_xp(id); -native cod_set_user_xp(id, wartosc); -native cod_set_user_class(id, klasa, zmien=0); - -#pragma semicolon 1 - -#define PLUGIN "Shop SMS: COD TE" -#define AUTHOR "SeeK" - -#define TASK_CHECK_FIRST 1000 -#define TASK_CHECK_SECOND 2000 - -new const service_id[MAX_SERVICE_ID + 1] = "cod_exp_transfer"; - -new fromClass[33], toClass[33], currentClass[33], fromClassExp[33]; - -public plugin_natives() -{ - set_native_filter("native_filter"); -} - -public plugin_init() -{ - register_plugin(PLUGIN, VERSION, AUTHOR); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_addingtolist(id) -{ - return cod_get_classes_num() >= 2 ? ITEM_ENABLED : ITEM_OFF; -} - -public ss_service_chosen(id) -{ - fromClass[id] = toClass[id] = currentClass[id] = fromClassExp[id] = 0; - - new menu = menu_create("Z jakiej klasy?", "fromClassMenu_handle"); - for (new i = 1; i <= cod_get_classes_num(); ++i) { - new name[64+1]; - cod_get_class_name(i, name, charsmax(name)); - menu_additem(menu, name); - } - - menu_setprop(menu, MPROP_BACKNAME, "Poprzednia"); - menu_setprop(menu, MPROP_NEXTNAME, "Nastepna"); - menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); - - menu_display(id, menu); - - return SS_STOP; -} - -public fromClassMenu_handle(id, menu, item) -{ - if (item < 0) { - menu_destroy(menu); - return; - } - - // +1 poniewaz klasy zaczynaja sie od id: 1 - fromClass[id] = item+1; - - new menu2 = menu_create("Na jaka klase?", "toClassMenu_handle"); - new menu_callback = menu_makecallback("toClassMenu_callback"); - - for (new i = 1; i <= cod_get_classes_num(); ++i) { - new name[64+1]; - cod_get_class_name(i, name, charsmax(name)); - menu_additem(menu2, name, "", 0, menu_callback); - } - - menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia"); - menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna"); - menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz"); - - menu_destroy(menu); - menu_display(id, menu2); -} - -public toClassMenu_callback(id, menu, item) -{ - return fromClass[id] == item+1 ? ITEM_DISABLED : ITEM_ENABLED; -} - -public toClassMenu_handle(id, menu, item) -{ - if ( item < 0 ) { - menu_destroy(menu); - return; - } - - // +1 poniewaz klasy zaczynaja sie od id: 1 - toClass[id] = item+1; - - menu_destroy(menu); - - // Zapisujemy obecna klase - currentClass[id] = cod_get_user_class(id); - - // Sprawdzamy czy pierwsza klasa jest dostepna ( nie jest np. klasa VIP ) - cod_set_user_class(id, fromClass[id], 1); - chosen_checkFirstClass(TASK_CHECK_FIRST+id); -} - -public chosen_checkFirstClass(id) -{ - id -= TASK_CHECK_FIRST; - if( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase - cod_set_user_class(id, toClass[id], 1); - chosen_checkSecondClass(TASK_CHECK_SECOND+id); - } - else if ( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2, "chosen_checkFirstClass", TASK_CHECK_FIRST+id); - } - else if( !cod_get_user_class(id) ) { - client_print_color(id, Red, "^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy z ktorej chcesz przeniesc EXP.", PREFIX); - } -} - -public chosen_checkSecondClass(id) -{ - id -= TASK_CHECK_SECOND; - if( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase - // Ustawiamy klase ktora mial gracz przed zakupem - cod_set_user_class(id, currentClass[id], 1); - ss_open_payment_method_menu(id); - } - else if ( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2, "chosen_checkSecondClass", TASK_CHECK_SECOND+id); - } - else if ( !cod_get_user_class(id) ) { - client_print_color(id, Red, "^4[%s] ^1Nie masz uprawnien, aby skorzystac z klasy na ktora chcesz przeniesc EXP.", PREFIX); - } -} - -public ss_service_bought(id, amount) -{ - // Ustawiamy pierwsza klase - cod_set_user_class(id, fromClass[id], 1); - - // Sprawdzamy czy pierwsza klasa sie prawidlowo zaladowala - bought_checkFirstClass(TASK_CHECK_FIRST+id); -} - -public bought_checkFirstClass(id) -{ - id -= TASK_CHECK_FIRST; - if ( cod_get_user_class(id) == fromClass[id] ) { // Prawidlowo ustawilo klase - // Zapisujemy EXP pierwszej klasy - fromClassExp[id] = cod_get_user_xp(id); - - // Zerujemy EXP pierwszej klasy - cod_set_user_xp(id, 0); - - new name[32+1]; get_user_name(id, name, charsmax(name)); - new class1[64+1]; cod_get_class_name(fromClass[id], class1, charsmax(class1)); - ss_log("Zabrano graczowi %s %d EXPa z klasy %s", name, fromClassExp[id], class1); - - // Ustawiamy druga klase - cod_set_user_class(id, toClass[id], 1); - bought_checkSecondClass(TASK_CHECK_SECOND+id); - } - else if ( cod_get_user_class(id) == currentClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2, "bought_checkFirstClass", TASK_CHECK_FIRST+id); - } -} - -public bought_checkSecondClass(id) -{ - id -= TASK_CHECK_SECOND; - if ( cod_get_user_class(id) == toClass[id] ) { // Prawidlowo ustawilo klase - // Ustawiamy EXP na drugiej klasie - cod_set_user_xp(id, cod_get_user_xp(id)+fromClassExp[id]); - - // Ustawiamy klase ktora mial gracz przed zakupem - cod_set_user_class(id, currentClass[id], 1); - - new name[32+1]; get_user_name(id, name, charsmax(name)); - new class1[64+1]; cod_get_class_name(fromClass[id], class1, charsmax(class1)); - new class2[64+1]; cod_get_class_name(toClass[id], class2, charsmax(class2)); - ss_log("Przeniesiono graczowi %s %d EXPa z klasy %s na klase %s", name, fromClassExp[id], class1, class2); - } - else if ( cod_get_user_class(id) == fromClass[id] ) { // Wciaz nie zmienilo z poprzedniej klasy - set_task(0.2, "bought_checkSecondClass", TASK_CHECK_SECOND+id); - } -} - -public native_filter(const native_name[], index, trap) -{ - if (trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma deleted file mode 100755 index c9a46e2..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -#pragma semicolon 1 - -new const service_id[MAX_SERVICE_ID + 1] = ""; - -new szFlags[32 + 1]; - -public plugin_init() -{ - register_plugin("Shop SMS: Extra flags", VERSION, "SeeK"); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) -{ - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) -{ - if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma deleted file mode 100755 index 158534c..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include - -native get_user_bm(id); -native set_user_bm(id, ilosc); - -#pragma semicolon 1 - -#define PLUGIN "Shop SMS: GXM BM" -#define AUTHOR "SeeK" - -new const service_id[MAX_SERVICE_ID + 1] = "gxm_bm"; - -public plugin_natives() -{ - set_native_filter("native_filter"); -} - -public plugin_init() -{ - register_plugin(PLUGIN, VERSION, AUTHOR); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_bought(id, amount) -{ - set_user_bm(id, get_user_bm(id)+amount); -} - -public native_filter(const native_name[], index, trap) -{ - if (trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma deleted file mode 100755 index 90a30f5..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include - -native get_user_xp(id); -native set_user_xp(id, ilosc); - -#pragma semicolon 1 - -#define PLUGIN "Shop SMS: GXM EXP" -#define AUTHOR "SeeK" - -new const service_id[MAX_SERVICE_ID + 1] = "gxm_exp"; - -public plugin_natives() -{ - set_native_filter("native_filter"); -} - -public plugin_init() -{ - register_plugin(PLUGIN, VERSION, AUTHOR); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_bought(id, amount) -{ - set_user_xp(id, get_user_xp(id) + amount); -} - -public native_filter(const native_name[], index, trap) -{ - if (trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma deleted file mode 100755 index 49a0c0e..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include - -#pragma semicolon 1 - -new const service_id[MAX_SERVICE_ID + 1] = "resnick"; - -public plugin_init() -{ - register_plugin("Shop SMS: Nick reservation", VERSION, "SeeK"); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma deleted file mode 100755 index 8158a96..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -#pragma semicolon 1 - -new const service_id[MAX_SERVICE_ID + 1] = "resslot"; - -new szFlags[32 + 1]; - -public plugin_init() -{ - register_plugin("Shop SMS: Slot reservation", VERSION, "SeeK"); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) -{ - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) -{ - // Disable purchasing if the user already has a flag set - if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma deleted file mode 100755 index c4b2faf..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -#pragma semicolon 1 - -new const service_id[MAX_SERVICE_ID + 1] = "vip"; - -new szFlags[32 + 1]; - -public plugin_init() -{ - register_plugin("Shop SMS: VIP", VERSION, "SeeK"); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) -{ - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) -{ - // Disable purchasing if the user already has a flag set - if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma deleted file mode 100755 index 96f08ec..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -#pragma semicolon 1 - -new const service_id[MAX_SERVICE_ID + 1] = "vippro"; - -new szFlags[32 + 1]; - -public plugin_init() -{ - register_plugin("Shop SMS: VIP PRO", VERSION, "SeeK"); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_data(name[], flags[]) -{ - copy(szFlags, charsmax(szFlags), flags); -} - -public ss_service_addingtolist(id) -{ - // Disable purchasing if the user already has a flag set - if (get_user_flags(id) & read_flags(szFlags) == read_flags(szFlags)) { - return ITEM_DISABLED; - } - - return ITEM_ENABLED; -} diff --git a/cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma deleted file mode 100755 index d4a97fd..0000000 --- a/cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include -native zp_get_user_ammo_packs(id); -native zp_set_user_ammo_packs(id, amount); - -#pragma semicolon 1 - -#define PLUGIN "Shop SMS: ZP AP" -#define AUTHOR "SeeK" - -new const service_id[MAX_SERVICE_ID + 1] = "zp_ap"; - -public plugin_natives() -{ - set_native_filter("native_filter"); -} - -public plugin_init() -{ - register_plugin(PLUGIN, VERSION, AUTHOR); -} - -public plugin_cfg() -{ - ss_register_service(service_id); -} - -public ss_service_bought(id, amount) -{ - zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + amount); -} - -public native_filter(const native_name[], index, trap) -{ - if (trap == 0) { - register_plugin(PLUGIN, VERSION, AUTHOR); - pause_plugin(); - return PLUGIN_HANDLED; - } - - return PLUGIN_CONTINUE; -} From c57b65089477821709400cfdcf27db15503072ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Thu, 3 Feb 2022 01:12:01 +0100 Subject: [PATCH 120/124] Accept longer license token (#24) --- cstrike/addons/amxmodx/scripting/shopsms.sma | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 421a13d..ba03016 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -49,7 +49,6 @@ const MAX_FULL_IP = MAX_IP + MAX_PORT + 1; // ip + semicolon + port const MAX_URL_HOST = 128; const MAX_URL_PATH = 384; const MAX_URL = MAX_URL_HOST + MAX_URL_PATH; -const MAX_HEADER = 128; const MAX_BODY = 384; const MAX_FUNCTION = 128; const MAX_CONFIG_KEY = 64; @@ -95,7 +94,7 @@ new g_currency[16], g_smsText[MAX_SMS_TEXT + 1], Float:g_vat, Trie:g_accountsSteamIds, - g_licenseToken[63]; + g_licenseToken[512 + 1]; // License new bool:g_footer = true, @@ -1365,7 +1364,7 @@ _purchaseService(id, const method[], const sms_code[] = "") { new u_service_id[MAX_SERVICE_ID * 2 + 1], u_auth_data[64 + 1], u_password[MAX_PASSWORD * 2 + 1], u_sms_code[MAX_CODE * 2 + 1]; new sign[34], sign_body[1 + charsmax(auth_data) + MAX_CODE + MAX_SHOP_TOKEN + 1]; - new header[MAX_HEADER + 1]; + new header[128 + 1]; new shop_url[MAX_URL + 1], shop_token[MAX_SHOP_TOKEN + 1]; @@ -1737,19 +1736,19 @@ _createShopSmsConfigFile() _validateLicense() { new curl_slist: headers; - new header[MAX_HEADER + 1]; new body[MAX_BODY + 1]; { + new headerAuthorization[512 + 1]; new serverNameEscaped[MAX_SERVER_NAME * 2 + 1]; get_cvar_string("hostname", g_serverName, charsmax(g_serverName)); StringURLEncode(g_serverName, serverNameEscaped, charsmax(serverNameEscaped)); - formatex(header, charsmax(header), + formatex(headerAuthorization, charsmax(headerAuthorization), "Authorization: Bearer %s", g_licenseToken ); - headers = curl_slist_append(headers, header); + headers = curl_slist_append(headers, headerAuthorization); headers = curl_slist_append(headers, "Accept: application/assoc"); formatex(body, charsmax(body), From ce9c549cbb1cbe711ee29906d88f75b5e1a4550b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Sun, 6 Feb 2022 23:42:48 +0100 Subject: [PATCH 121/124] Lengthen menu title size (#25) --- cstrike/addons/amxmodx/scripting/shopsms.sma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index ba03016..5fe1f36 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -957,7 +957,7 @@ _openShopMenu(id) return; } - new menu_title[64]; + new menu_title[256]; if (g_footer) { formatex(menu_title, charsmax(menu_title), "\r%L\d powered by\w sklep-sms.pl^n\y%L", id, "SHOP_SMS", id, "CHOOSE_SERVICE"); } else { @@ -1027,7 +1027,7 @@ _openPricingMenu(id, service_id) } new service[e_Service]; - new szText[128], data[3]; + new szText[256], data[3]; ArrayGetArray(g_services, service_id, service); From 16ea4feba860ff7b8e8aee27ce55c1110da3546d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 18 Jan 2023 01:05:15 +0100 Subject: [PATCH 122/124] Update server possible versions --- server/run.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/run.sh b/server/run.sh index bce64a6..e1402bd 100755 --- a/server/run.sh +++ b/server/run.sh @@ -12,13 +12,15 @@ DIRECTORY=$(cd `dirname $0` && pwd) declare -A BASE_VERSIONS=( ["1.8.2"]="https://www.amxmodx.org/release/amxmodx-1.8.2-base-linux.tar.gz" ["1.8.3"]="https://www.amxmodx.org/amxxdrop/1.8/amxmodx-1.8.3-dev-git5201-base-linux.tar.gz" - ["1.9.0"]="https://www.amxmodx.org/amxxdrop/1.9/amxmodx-1.9.0-git5241-base-linux.tar.gz" + ["1.9.0"]="https://www.amxmodx.org/amxxdrop/1.9/amxmodx-1.9.0-git5294-base-linux.tar.gz" + ["1.10.0"]="https://www.amxmodx.org/amxxdrop/1.10/amxmodx-1.10.0-git5465-base-linux.tar.gz" ) declare -A CSTRKE_VERSIONS=( ["1.8.2"]="https://www.amxmodx.org/release/amxmodx-1.8.2-cstrike-linux.tar.gz" ["1.8.3"]="https://www.amxmodx.org/amxxdrop/1.8/amxmodx-1.8.3-dev-git5201-cstrike-linux.tar.gz" - ["1.9.0"]="https://www.amxmodx.org/amxxdrop/1.9/amxmodx-1.9.0-git5241-cstrike-linux.tar.gz" + ["1.9.0"]="https://www.amxmodx.org/amxxdrop/1.9/amxmodx-1.9.0-git5294-cstrike-linux.tar.gz" + ["1.10.0"]="https://www.amxmodx.org/amxxdrop/1.10/amxmodx-1.10.0-git5465-cstrike-linux.tar.gz" ) BUILD_VERSION=$1 From 0fd7a5f6df5d7e0454210ecea6a49bdfcf6a9f97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 18 Jan 2023 01:05:39 +0100 Subject: [PATCH 123/124] Allow backend verify user's steam id --- cstrike/addons/amxmodx/scripting/shopsms.sma | 43 +------------------- 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/shopsms.sma b/cstrike/addons/amxmodx/scripting/shopsms.sma index 5fe1f36..c094c99 100755 --- a/cstrike/addons/amxmodx/scripting/shopsms.sma +++ b/cstrike/addons/amxmodx/scripting/shopsms.sma @@ -93,7 +93,6 @@ new g_currency[16], g_contact[MAX_CONTACT + 1], g_smsText[MAX_SMS_TEXT + 1], Float:g_vat, - Trie:g_accountsSteamIds, g_licenseToken[512 + 1]; // License @@ -202,7 +201,6 @@ public plugin_precache() g_shopCommands = TrieCreate(); g_serviceListCommands = TrieCreate(); g_reloadCommands = TrieCreate(); - g_accountsSteamIds = TrieCreate(); } public plugin_init() @@ -274,7 +272,6 @@ public plugin_end() TrieDestroy(g_shopCommands); TrieDestroy(g_serviceListCommands); TrieDestroy(g_reloadCommands); - TrieDestroy(g_accountsSteamIds); } _loadCvars() @@ -404,22 +401,6 @@ public onLoadServerConfigResponse(const content[], CURLcode: code, statusCode, p TrieGetString(dict, "currency", g_currency, charsmax(g_currency)); TrieGetString(dict, "contact", g_contact, charsmax(g_contact)); TrieGetTextFloat(dict, "vat", g_vat); - - TrieGetString(dict, "steam_ids", g_szTemp, charsmax(g_szTemp)); - - TrieClear(g_accountsSteamIds); - new cur_len = 0, max_len = strlen(g_szTemp); - while (cur_len < max_len) - { - new steam_id[MAX_SID + 1]; - cur_len += copyc(steam_id, charsmax(steam_id), g_szTemp[cur_len], ';') + 1; - strtolower(steam_id); - trim(steam_id); - - if (strlen(steam_id)) { - TrieSetCell(g_accountsSteamIds, steam_id, 1); - } - } _extractSmsNumbers(dict); _extractPrices(dict); @@ -1244,7 +1225,7 @@ public paymentMethodMenu_callback(id, menu, item) return ITEM_ENABLED; } case 1: { - return _canPayWithWallet(id) ? ITEM_ENABLED : ITEM_DISABLED; + return ITEM_ENABLED; } } @@ -1935,28 +1916,6 @@ _canUseShop() return !g_blocked && g_licenseValidated && get_pcvar_num(g_cvarOn); } -_canPayWithWallet(id) -{ - new steam_id[MAX_SID + 1]; - - get_user_authid(id, steam_id, charsmax(steam_id)); - strtolower(steam_id); - - if (TrieKeyExists(g_accountsSteamIds, steam_id)) { - return true; - } - - // CSGO uses different steamid prefix. STEAM_1 instead of STEAM_0. - // We want to check against it as well. - replace(steam_id, charsmax(steam_id), "steam_1", "steam_0"); - if (TrieKeyExists(g_accountsSteamIds, steam_id)) { - return true; - } - - replace(steam_id, charsmax(steam_id), "steam_0", "steam_1"); - return TrieKeyExists(g_accountsSteamIds, steam_id); -} - _getShopCommand(output[], len) { #if defined TrieIterCreate From cbb6b0e2054ec0131e178c236b5f47ce9f8e4f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Budziak?= Date: Wed, 5 Aug 2026 22:17:53 +0200 Subject: [PATCH 124/124] Merge engine into repository --- .github/workflows/ci-workflow.yml | 37 ++- .gitignore | 3 +- README.md | 20 ++ build.sh | 29 ++- .../amxmodx/scripting}/include/shopsms.inc | 0 .../scripting}/include/shopsms_const.inc | 0 .../scripting}/shopsms_service_bf2_badge.sma | 0 .../scripting}/shopsms_service_cod_exp.sma | 0 .../scripting}/shopsms_service_cod_te.sma | 0 .../shopsms_service_extra_flags.sma | 0 .../scripting}/shopsms_service_gxm_bm.sma | 0 .../scripting}/shopsms_service_gxm_exp.sma | 0 .../scripting}/shopsms_service_jbpack.sma | 0 .../scripting}/shopsms_service_nickres.sma | 0 .../scripting}/shopsms_service_slotres.sma | 0 .../scripting}/shopsms_service_vip.sma | 0 .../scripting}/shopsms_service_vippro.sma | 0 .../scripting}/shopsms_service_zp_ap.sma | 0 package.sh | 16 ++ scripting/include/colorchat.inc | 227 ------------------ scripting/include/custom_color_chat.inc | 13 - 21 files changed, 92 insertions(+), 253 deletions(-) rename {scripting => cstrike/addons/amxmodx/scripting}/include/shopsms.inc (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/include/shopsms_const.inc (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_bf2_badge.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_cod_exp.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_cod_te.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_extra_flags.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_gxm_bm.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_gxm_exp.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_jbpack.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_nickres.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_slotres.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_vip.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_vippro.sma (100%) rename {scripting => cstrike/addons/amxmodx/scripting}/shopsms_service_zp_ap.sma (100%) create mode 100755 package.sh delete mode 100755 scripting/include/colorchat.inc delete mode 100755 scripting/include/custom_color_chat.inc diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index efc2f01..7171b06 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -3,9 +3,13 @@ on: push: branches: - master + tags: + - '*' pull_request: branches: - master +permissions: + contents: read jobs: main: name: Compile plugins @@ -20,7 +24,38 @@ jobs: steps: - name: Check out the repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Compile plugins run: ./build.sh ${{ matrix.amxx_version }} test + - + name: Package release zip + run: ./package.sh ${{ matrix.amxx_version }} + - + name: Archive build artifacts + uses: actions/upload-artifact@v4 + with: + name: artifacts-${{ matrix.amxx_version }} + path: out + + release: + name: Publish Release + if: startsWith(github.ref, 'refs/tags/') + needs: main + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - + name: Download all artifacts + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + merge-multiple: true + path: out + - + name: Publish Release + uses: softprops/action-gh-release@v2 + with: + files: out/*.zip + generate_release_notes: true diff --git a/.gitignore b/.gitignore index e07452e..23e99ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -plugins \ No newline at end of file +cstrike/addons/amxmodx/plugins +server/storage diff --git a/README.md b/README.md index 3ddc243..ff6cf17 100644 --- a/README.md +++ b/README.md @@ -55,3 +55,23 @@ Should the above commands be visible on the chat after usage. #### shopsms_commercial "137" How often (seconds) should the shop commercial be displayed on the chat? 0 - never + +## Build + +The repository contains the full plugin source: the shop engine (`shopsms.sma`) and all service modules. Requires Docker and the `budziam/amxmodx-builder` image. + +```bash +./build.sh 1.10.0 # compiles everything into cstrike/addons/amxmodx/plugins/ +./package.sh 1.10.0 # produces out/amxmodx-1.10.0.zip (full cstrike/ tree, sources included) +``` + +Supported compiler versions: 1.8.2, 1.8.3, 1.9.0, 1.10.0. + +## Test server + +A runnable CS 1.6 test server (Docker HLDS + Metamod + AMX Mod X) lives in `server/`: + +```bash +./build.sh 1.10.0 +./server/run.sh 1.10.0 +``` diff --git a/build.sh b/build.sh index 5c7e1d0..9e469a7 100755 --- a/build.sh +++ b/build.sh @@ -12,16 +12,23 @@ MODE=${2:-watch} DIR="$( cd "$( dirname $( dirname "${BASH_SOURCE[0]}" ) )" && pwd )" # PREPARE -mkdir -p "$DIR/plugins" -chmod 777 "$DIR/plugins" -rm -f $DIR/plugins/* +PLUGINS_DIR="$DIR/cstrike/addons/amxmodx/plugins" +SCRIPTING_DIR="$DIR/cstrike/addons/amxmodx/scripting" -docker run --rm \ - -v "$DIR/plugins":/home/builder/builds \ - -v "$DIR/scripting":/home/builder/sources \ - -v "$DIR/scripting/include/colorchat.inc":/home/builder/addons/amxmodx/scripting/include/colorchat.inc \ - -v "$DIR/scripting/include/custom_color_chat.inc":/home/builder/addons/amxmodx/scripting/include/custom_color_chat.inc \ - -v "$DIR/scripting/include/shopsms_const.inc":/home/builder/addons/amxmodx/scripting/include/shopsms_const.inc \ - -v "$DIR/scripting/include/shopsms.inc":/home/builder/addons/amxmodx/scripting/include/shopsms.inc \ - budziam/amxmodx-builder:${BUILD_VERSION} \ +mkdir -p "$PLUGINS_DIR" +chmod 777 "$PLUGINS_DIR" +rm -f $PLUGINS_DIR/* + +docker run \ + --rm \ + -v "$PLUGINS_DIR":/home/builder/builds \ + -v "$SCRIPTING_DIR":/home/builder/sources \ + -v "$SCRIPTING_DIR/include/colorchat.inc":/home/builder/addons/amxmodx/scripting/include/colorchat.inc \ + -v "$SCRIPTING_DIR/include/curl.inc":/home/builder/addons/amxmodx/scripting/include/curl.inc \ + -v "$SCRIPTING_DIR/include/curl_consts.inc":/home/builder/addons/amxmodx/scripting/include/curl_consts.inc \ + -v "$SCRIPTING_DIR/include/custom_color_chat.inc":/home/builder/addons/amxmodx/scripting/include/custom_color_chat.inc \ + -v "$SCRIPTING_DIR/include/shopsms_const.inc":/home/builder/addons/amxmodx/scripting/include/shopsms_const.inc \ + -v "$SCRIPTING_DIR/include/shopsms.inc":/home/builder/addons/amxmodx/scripting/include/shopsms.inc \ + -v "$DIR/cstrike/addons/amxmodx/modules/curl_amxx_i386.so":/home/builder/addons/amxmodx/scripting/modules/curl_amxx_i386.so \ + "budziam/amxmodx-builder:${BUILD_VERSION}" \ ${MODE} diff --git a/scripting/include/shopsms.inc b/cstrike/addons/amxmodx/scripting/include/shopsms.inc similarity index 100% rename from scripting/include/shopsms.inc rename to cstrike/addons/amxmodx/scripting/include/shopsms.inc diff --git a/scripting/include/shopsms_const.inc b/cstrike/addons/amxmodx/scripting/include/shopsms_const.inc similarity index 100% rename from scripting/include/shopsms_const.inc rename to cstrike/addons/amxmodx/scripting/include/shopsms_const.inc diff --git a/scripting/shopsms_service_bf2_badge.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma similarity index 100% rename from scripting/shopsms_service_bf2_badge.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_bf2_badge.sma diff --git a/scripting/shopsms_service_cod_exp.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma similarity index 100% rename from scripting/shopsms_service_cod_exp.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_cod_exp.sma diff --git a/scripting/shopsms_service_cod_te.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma similarity index 100% rename from scripting/shopsms_service_cod_te.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_cod_te.sma diff --git a/scripting/shopsms_service_extra_flags.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma similarity index 100% rename from scripting/shopsms_service_extra_flags.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_extra_flags.sma diff --git a/scripting/shopsms_service_gxm_bm.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma similarity index 100% rename from scripting/shopsms_service_gxm_bm.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_gxm_bm.sma diff --git a/scripting/shopsms_service_gxm_exp.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma similarity index 100% rename from scripting/shopsms_service_gxm_exp.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_gxm_exp.sma diff --git a/scripting/shopsms_service_jbpack.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_jbpack.sma similarity index 100% rename from scripting/shopsms_service_jbpack.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_jbpack.sma diff --git a/scripting/shopsms_service_nickres.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma similarity index 100% rename from scripting/shopsms_service_nickres.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_nickres.sma diff --git a/scripting/shopsms_service_slotres.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma similarity index 100% rename from scripting/shopsms_service_slotres.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_slotres.sma diff --git a/scripting/shopsms_service_vip.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma similarity index 100% rename from scripting/shopsms_service_vip.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_vip.sma diff --git a/scripting/shopsms_service_vippro.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma similarity index 100% rename from scripting/shopsms_service_vippro.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_vippro.sma diff --git a/scripting/shopsms_service_zp_ap.sma b/cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma similarity index 100% rename from scripting/shopsms_service_zp_ap.sma rename to cstrike/addons/amxmodx/scripting/shopsms_service_zp_ap.sma diff --git a/package.sh b/package.sh new file mode 100755 index 0000000..e0405b0 --- /dev/null +++ b/package.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -e + +if [ "$#" -lt 1 ]; then + echo "Usage: ./package.sh " + exit 1 +fi + +BUILD_VERSION=$1 +DIR="$( cd "$( dirname $( dirname "${BASH_SOURCE[0]}" ) )" && pwd )" + +mkdir -p "$DIR/out" +rm -f "$DIR"/out/amxmodx-*.zip + +(cd "$DIR" && zip -r "out/amxmodx-${BUILD_VERSION}.zip" cstrike) diff --git a/scripting/include/colorchat.inc b/scripting/include/colorchat.inc deleted file mode 100755 index acdde70..0000000 --- a/scripting/include/colorchat.inc +++ /dev/null @@ -1,227 +0,0 @@ -#if defined _colorchat_included - #endinput -#endif -#define _colorchat_included - -/* ColorChat Support */ -#define RED Red -#define BLUE Blue -#define GREY Grey -#define ColorChat client_print_color -/* ColorChat Support */ - -enum { - Grey = 33, - Red, - Blue -}; - -stock client_print_color(id, sender, const fmt[], any:...) -{ - // check if id is different from 0 - if( id && !is_user_connected(id) ) - { - return 0; - } - - static const szTeamName[][] = - { - "", - "TERRORIST", - "CT" - }; - - new szMessage[192]; - - new iParams = numargs(); - // Specific player code - if( id ) - { - if( iParams == 3 ) - { - copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value - } - else - { - vformat(szMessage, charsmax(szMessage), fmt, 4); - } - - if( sender > Grey ) - { - if( sender > Blue ) - { - sender = id; - } - else - { - _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); - } - } - _CC_SayText(id, sender, szMessage); - } - - // Send message to all players - else - { - // Figure out if at least 1 player is connected - // so we don't execute useless useless code if not - new iPlayers[32], iNum; - get_players(iPlayers, iNum, "ch"); - if( !iNum ) - { - return 0; - } - - new iMlNumber, i, j; - new Array:aStoreML = ArrayCreate(); - if( iParams >= 5 ) // ML can be used - { - for(j=3; j Grey ) - { - _CC_TeamInfo(0, sender, szTeamName[sender-Grey]); - } - _CC_SayText(0, sender, szMessage); - return 1; - } - } - - if( sender > Blue ) - { - sender = 0; // use receiver index - } - - for(--iNum; iNum>=0; iNum--) - { - id = iPlayers[iNum]; - - if( iMlNumber ) - { - for(j=0; j Grey ) - { - _CC_TeamInfo(id, sender, szTeamName[sender-Grey]); - } - _CC_SayText(id, sender, szMessage); - } - - ArrayDestroy(aStoreML); - } - return 1; -} - -stock _CC_TeamInfo(iReceiver, iSender, szTeam[]) -{ - static iTeamInfo = 0; - if( !iTeamInfo ) - { - iTeamInfo = get_user_msgid("TeamInfo"); - } - message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver); - write_byte(iSender); - write_string(szTeam); - message_end(); -} - -stock _CC_SayText(iReceiver, iSender, szMessage[]) -{ - static iSayText = 0; - if( !iSayText ) - { - iSayText = get_user_msgid("SayText"); - } - message_begin(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver); - write_byte(iSender ? iSender : iReceiver); - write_string(szMessage); - message_end(); -} - -stock register_dictionary_colored(const filename[]) -{ - if( !register_dictionary(filename) ) - { - return 0; - } - - new szFileName[256]; - get_localinfo("amxx_datadir", szFileName, charsmax(szFileName)); - format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename); - new fp = fopen(szFileName, "rt"); - if( !fp ) - { - log_amx("Failed to open %s", szFileName); - return 0; - } - - new szBuffer[512], szLang[3], szKey[64], szTranslation[256], TransKey:iKey; - - while( !feof(fp) ) - { - fgets(fp, szBuffer, charsmax(szBuffer)); - trim(szBuffer); - - if( szBuffer[0] == '[' ) - { - strtok(szBuffer[1], szLang, charsmax(szLang), szBuffer, 1, ']'); - } - else if( szBuffer[0] ) - { - strbreak(szBuffer, szKey, charsmax(szKey), szTranslation, charsmax(szTranslation)); - iKey = GetLangTransKey(szKey); - if( iKey != TransKey_Bad ) - { - replace_all(szTranslation, charsmax(szTranslation), "!g", "^4"); - replace_all(szTranslation, charsmax(szTranslation), "!t", "^3"); - replace_all(szTranslation, charsmax(szTranslation), "!n", "^1"); - AddTranslation(szLang, iKey, szTranslation[2]); - } - } - } - - fclose(fp); - return 1; -} \ No newline at end of file diff --git a/scripting/include/custom_color_chat.inc b/scripting/include/custom_color_chat.inc deleted file mode 100755 index 3a162c2..0000000 --- a/scripting/include/custom_color_chat.inc +++ /dev/null @@ -1,13 +0,0 @@ -#if defined _custom_color_chat_included - #endinput -#endif -#define _custom_color_chat_included - -#pragma library "custom_color_chat" - -#if AMXX_VERSION_NUM < 183 -#include -#else -#define Red print_team_red -#define Blue print_team_blue -#endif