From 44d42ea8af09eeeb6087e1f2819dbf7152d4ee69 Mon Sep 17 00:00:00 2001 From: Ivor Barhansky Date: Fri, 10 Jun 2022 23:13:43 +0300 Subject: [PATCH] =?UTF-8?q?#5=20=D0=9F=D0=BE=D1=87=D1=82=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=B8=D0=B3=D1=80=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _incl_data/class/mail/class.phpmailer.php | 2826 +++++++++++++++++++++ _incl_data/class/mail/class.pop3.php | 418 +++ _incl_data/class/mail/class.smtp.php | 1003 ++++++++ _incl_data/mails.php | 3 +- modules_data/location/an/bank.php | 368 +-- modules_data/location/bank.php | 410 +-- register.php | 797 ++---- repass.php | 62 +- 8 files changed, 4943 insertions(+), 944 deletions(-) create mode 100644 _incl_data/class/mail/class.phpmailer.php create mode 100644 _incl_data/class/mail/class.pop3.php create mode 100644 _incl_data/class/mail/class.smtp.php diff --git a/_incl_data/class/mail/class.phpmailer.php b/_incl_data/class/mail/class.phpmailer.php new file mode 100644 index 00000000..99c0d783 --- /dev/null +++ b/_incl_data/class/mail/class.phpmailer.php @@ -0,0 +1,2826 @@ +UseSendmailOptions) ) { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($subject)), $body, $header); + } else { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($subject)), $body, $header, $params); + } + return $rt; + } + + /** + * Outputs debugging info via user-defined method + * @param string $str + */ + private function edebug($str) { + if ($this->Debugoutput == "error_log") { + error_log($str); + } else { + echo $str; + } + } + + /** + * Constructor + * @param boolean $exceptions Should we throw external exceptions? + */ + public function __construct($exceptions = false) { + $this->exceptions = ($exceptions == true); + } + + /** + * Sets message type to HTML. + * @param bool $ishtml + * @return void + */ + public function IsHTML($ishtml = true) { + if ($ishtml) { + $this->ContentType = 'text/html'; + } else { + $this->ContentType = 'text/plain'; + } + } + + /** + * Sets Mailer to send message using SMTP. + * @return void + */ + public function IsSMTP() { + $this->Mailer = 'smtp'; + } + + /** + * Sets Mailer to send message using PHP mail() function. + * @return void + */ + public function IsMail() { + $this->Mailer = 'mail'; + } + + /** + * Sets Mailer to send message using the $Sendmail program. + * @return void + */ + public function IsSendmail() { + if (!stristr(ini_get('sendmail_path'), 'sendmail')) { + $this->Sendmail = '/var/qmail/bin/sendmail'; + } + $this->Mailer = 'sendmail'; + } + + /** + * Sets Mailer to send message using the qmail MTA. + * @return void + */ + public function IsQmail() { + if (stristr(ini_get('sendmail_path'), 'qmail')) { + $this->Sendmail = '/var/qmail/bin/sendmail'; + } + $this->Mailer = 'sendmail'; + } + + ///////////////////////////////////////////////// + // METHODS, RECIPIENTS + ///////////////////////////////////////////////// + + /** + * Adds a "To" address. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddAddress($address, $name = '') { + return $this->AddAnAddress('to', $address, $name); + } + + /** + * Adds a "Cc" address. + * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddCC($address, $name = '') { + return $this->AddAnAddress('cc', $address, $name); + } + + /** + * Adds a "Bcc" address. + * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddBCC($address, $name = '') { + return $this->AddAnAddress('bcc', $address, $name); + } + + /** + * Adds a "Reply-to" address. + * @param string $address + * @param string $name + * @return boolean + */ + public function AddReplyTo($address, $name = '') { + return $this->AddAnAddress('Reply-To', $address, $name); + } + + /** + * Adds an address to one of the recipient arrays + * Addresses that have been added already return false, but do not throw exceptions + * @param string $kind One of 'to', 'cc', 'bcc', 'ReplyTo' + * @param string $address The email address to send to + * @param string $name + * @throws phpmailerException + * @return boolean true on success, false if address already used or invalid in some way + * @access protected + */ + protected function AddAnAddress($kind, $address, $name = '') { + if (!preg_match('/^(to|cc|bcc|Reply-To)$/', $kind)) { + $this->SetError($this->Lang('Invalid recipient array').': '.$kind); + if ($this->exceptions) { + throw new phpmailerException('Invalid recipient array: ' . $kind); + } + if ($this->SMTPDebug) { + $this->edebug($this->Lang('Invalid recipient array').': '.$kind); + } + return false; + } + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + if (!$this->ValidateAddress($address)) { + $this->SetError($this->Lang('invalid_address').': '. $address); + if ($this->exceptions) { + throw new phpmailerException($this->Lang('invalid_address').': '.$address); + } + if ($this->SMTPDebug) { + $this->edebug($this->Lang('invalid_address').': '.$address); + } + return false; + } + if ($kind != 'Reply-To') { + if (!isset($this->all_recipients[strtolower($address)])) { + array_push($this->$kind, array($address, $name)); + $this->all_recipients[strtolower($address)] = true; + return true; + } + } else { + if (!array_key_exists(strtolower($address), $this->ReplyTo)) { + $this->ReplyTo[strtolower($address)] = array($address, $name); + return true; + } + } + return false; +} + +/** + * Set the From and FromName properties + * @param string $address + * @param string $name + * @param int $auto Also set Reply-To and Sender + * @throws phpmailerException + * @return boolean + */ + public function SetFrom($address, $name = '', $auto = 1) { + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + if (!$this->ValidateAddress($address)) { + $this->SetError($this->Lang('invalid_address').': '. $address); + if ($this->exceptions) { + throw new phpmailerException($this->Lang('invalid_address').': '.$address); + } + if ($this->SMTPDebug) { + $this->edebug($this->Lang('invalid_address').': '.$address); + } + return false; + } + $this->From = $address; + $this->FromName = $name; + if ($auto) { + if (empty($this->ReplyTo)) { + $this->AddAnAddress('Reply-To', $address, $name); + } + if (empty($this->Sender)) { + $this->Sender = $address; + } + } + return true; + } + + /** + * Check that a string looks roughly like an email address should + * Static so it can be used without instantiation, public so people can overload + * Conforms to RFC5322: Uses *correct* regex on which FILTER_VALIDATE_EMAIL is + * based; So why not use FILTER_VALIDATE_EMAIL? Because it was broken to + * not allow a@b type valid addresses :( + * Some Versions of PHP break on the regex though, likely due to PCRE, so use + * the older validation method for those users. (http://php.net/manual/en/pcre.installation.php) + * @link http://squiloople.com/2009/12/20/email-address-validation/ + * @copyright regex Copyright Michael Rushton 2009-10 | http://squiloople.com/ | Feel free to use and redistribute this code. But please keep this copyright notice. + * @param string $address The email address to check + * @return boolean + * @static + * @access public + */ + public static function ValidateAddress($address) { + if ((defined('PCRE_VERSION')) && (version_compare(PCRE_VERSION, '8.0') >= 0)) { + return preg_match('/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[ ])+|(?>[ ]*\x0D\x0A)?[ ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}|(?!(?:.*[a-f0-9][:\]]){7,})((?6)(?>:(?6)){0,5})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:|(?!(?:.*[a-f0-9]:){5,})(?8)?::(?>((?6)(?>:(?6)){0,3}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', $address); + } elseif (function_exists('filter_var')) { //Introduced in PHP 5.2 + if(filter_var($address, FILTER_VALIDATE_EMAIL) === FALSE) { + return false; + } else { + return true; + } + } else { + return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address); + } + } + + ///////////////////////////////////////////////// + // METHODS, MAIL SENDING + ///////////////////////////////////////////////// + + /** + * Creates message and assigns Mailer. If the message is + * not sent successfully then it returns false. Use the ErrorInfo + * variable to view description of the error. + * @throws phpmailerException + * @return bool + */ + public function Send() { + try { + if(!$this->PreSend()) return false; + return $this->PostSend(); + } catch (phpmailerException $e) { + $this->mailHeader = ''; + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; + } + } + + /** + * Prep mail by constructing all message entities + * @throws phpmailerException + * @return bool + */ + public function PreSend() { + try { + $this->mailHeader = ""; + if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { + throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL); + } + + // Set whether the message is multipart/alternative + if(!empty($this->AltBody)) { + $this->ContentType = 'multipart/alternative'; + } + + $this->error_count = 0; // reset errors + $this->SetMessageType(); + //Refuse to send an empty message + if (empty($this->Body)) { + throw new phpmailerException($this->Lang('empty_message'), self::STOP_CRITICAL); + } + + $this->MIMEHeader = $this->CreateHeader(); + $this->MIMEBody = $this->CreateBody(); + + // To capture the complete message when using mail(), create + // an extra header list which CreateHeader() doesn't fold in + if ($this->Mailer == 'mail') { + if (count($this->to) > 0) { + $this->mailHeader .= $this->AddrAppend("To", $this->to); + } else { + $this->mailHeader .= $this->HeaderLine("To", "undisclosed-recipients:;"); + } + $this->mailHeader .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader(trim($this->Subject)))); + // if(count($this->cc) > 0) { + // $this->mailHeader .= $this->AddrAppend("Cc", $this->cc); + // } + } + + // digitally sign with DKIM if enabled + if (!empty($this->DKIM_domain) && !empty($this->DKIM_private) && !empty($this->DKIM_selector) && !empty($this->DKIM_domain) && file_exists($this->DKIM_private)) { + $header_dkim = $this->DKIM_Add($this->MIMEHeader, $this->EncodeHeader($this->SecureHeader($this->Subject)), $this->MIMEBody); + $this->MIMEHeader = str_replace("\r\n", "\n", $header_dkim) . $this->MIMEHeader; + } + + return true; + + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; + } + } + + /** + * Actual Email transport function + * Send the email via the selected mechanism + * @throws phpmailerException + * @return bool + */ + public function PostSend() { + try { + // Choose the mailer and send through it + switch($this->Mailer) { + case 'sendmail': + return $this->SendmailSend($this->MIMEHeader, $this->MIMEBody); + case 'smtp': + return $this->SmtpSend($this->MIMEHeader, $this->MIMEBody); + case 'mail': + return $this->MailSend($this->MIMEHeader, $this->MIMEBody); + default: + return $this->MailSend($this->MIMEHeader, $this->MIMEBody); + } + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + if ($this->SMTPDebug) { + $this->edebug($e->getMessage()."\n"); + } + } + return false; + } + + /** + * Sends mail using the $Sendmail program. + * @param string $header The message headers + * @param string $body The message body + * @throws phpmailerException + * @access protected + * @return bool + */ + protected function SendmailSend($header, $body) { + if ($this->Sender != '') { + $sendmail = sprintf("%s -oi -f%s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender)); + } else { + $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); + } + if ($this->SingleTo === true) { + foreach ($this->SingleToArray as $val) { + if(!@$mail = popen($sendmail, 'w')) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fputs($mail, "To: " . $val . "\n"); + fputs($mail, $header); + fputs($mail, $body); + $result = pclose($mail); + // implement call back function if it exists + $isSent = ($result == 0) ? 1 : 0; + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); + if($result != 0) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + } else { + if(!@$mail = popen($sendmail, 'w')) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fputs($mail, $header); + fputs($mail, $body); + $result = pclose($mail); + // implement call back function if it exists + $isSent = ($result == 0) ? 1 : 0; + $this->doCallback($isSent, $this->to, $this->cc, $this->bcc, $this->Subject, $body); + if($result != 0) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + return true; + } + + /** + * Sends mail using the PHP mail() function. + * @param string $header The message headers + * @param string $body The message body + * @throws phpmailerException + * @access protected + * @return bool + */ + protected function MailSend($header, $body) { + $toArr = array(); + foreach($this->to as $t) { + $toArr[] = $this->AddrFormat($t); + } + $to = implode(', ', $toArr); + + if (empty($this->Sender)) { + $params = "-oi "; + } else { + $params = sprintf("-oi -f%s", $this->Sender); + } + if ($this->Sender != '' and !ini_get('safe_mode')) { + $old_from = ini_get('sendmail_from'); + ini_set('sendmail_from', $this->Sender); + } + $rt = false; + if ($this->SingleTo === true && count($toArr) > 1) { + foreach ($toArr as $val) { + $rt = $this->mail_passthru($val, $this->Subject, $body, $header, $params); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); + } + } else { + $rt = $this->mail_passthru($to, $this->Subject, $body, $header, $params); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body); + } + if (isset($old_from)) { + ini_set('sendmail_from', $old_from); + } + if(!$rt) { + throw new phpmailerException($this->Lang('instantiate'), self::STOP_CRITICAL); + } + return true; + } + + /** + * Sends mail via SMTP using PhpSMTP + * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. + * @param string $header The message headers + * @param string $body The message body + * @throws phpmailerException + * @uses SMTP + * @access protected + * @return bool + */ + protected function SmtpSend($header, $body) { + require_once $this->PluginDir . 'class.smtp.php'; + $bad_rcpt = array(); + + if(!$this->SmtpConnect()) { + throw new phpmailerException($this->Lang('smtp_connect_failed'), self::STOP_CRITICAL); + } + $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; + if(!$this->smtp->Mail($smtp_from)) { + $this->SetError($this->Lang('from_failed') . $smtp_from . " : " . implode(",",$this->smtp->getError())) ; + throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL); + } + + // Attempt to send attach all recipients + foreach($this->to as $to) { + if (!$this->smtp->Recipient($to[0])) { + $bad_rcpt[] = $to[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); + } + } + foreach($this->cc as $cc) { + if (!$this->smtp->Recipient($cc[0])) { + $bad_rcpt[] = $cc[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); + } + } + foreach($this->bcc as $bcc) { + if (!$this->smtp->Recipient($bcc[0])) { + $bad_rcpt[] = $bcc[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); + } + } + + + if (count($bad_rcpt) > 0 ) { //Create error message for any bad addresses + $badaddresses = implode(', ', $bad_rcpt); + throw new phpmailerException($this->Lang('recipients_failed') . $badaddresses); + } + if(!$this->smtp->Data($header . $body)) { + throw new phpmailerException($this->Lang('data_not_accepted'), self::STOP_CRITICAL); + } + if($this->SMTPKeepAlive == true) { + $this->smtp->Reset(); + } else { + $this->smtp->Quit(); + $this->smtp->Close(); + } + return true; + } + + /** + * Initiates a connection to an SMTP server. + * Returns false if the operation failed. + * @uses SMTP + * @access public + * @throws phpmailerException + * @return bool + */ + public function SmtpConnect() { + if(is_null($this->smtp)) { + $this->smtp = new SMTP; + } + + $this->smtp->Timeout = $this->Timeout; + $this->smtp->do_debug = $this->SMTPDebug; + $hosts = explode(';', $this->Host); + $index = 0; + $connection = $this->smtp->Connected(); + + // Retry while there is no connection + try { + while($index < count($hosts) && !$connection) { + $hostinfo = array(); + if (preg_match('/^(.+):([0-9]+)$/', $hosts[$index], $hostinfo)) { + $host = $hostinfo[1]; + $port = $hostinfo[2]; + } else { + $host = $hosts[$index]; + $port = $this->Port; + } + + $tls = ($this->SMTPSecure == 'tls'); + $ssl = ($this->SMTPSecure == 'ssl'); + + if ($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout)) { + + $hello = ($this->Helo != '' ? $this->Helo : $this->ServerHostname()); + $this->smtp->Hello($hello); + + if ($tls) { + if (!$this->smtp->StartTLS()) { + throw new phpmailerException($this->Lang('connect_host')); + } + + //We must resend HELO after tls negotiation + $this->smtp->Hello($hello); + } + + $connection = true; + if ($this->SMTPAuth) { + if (!$this->smtp->Authenticate($this->Username, $this->Password, $this->AuthType, + $this->Realm, $this->Workstation)) { + throw new phpmailerException($this->Lang('authenticate')); + } + } + } + $index++; + if (!$connection) { + throw new phpmailerException($this->Lang('connect_host')); + } + } + } catch (phpmailerException $e) { + $this->smtp->Reset(); + if ($this->exceptions) { + throw $e; + } + } + return true; + } + + /** + * Closes the active SMTP session if one exists. + * @return void + */ + public function SmtpClose() { + if ($this->smtp !== null) { + if($this->smtp->Connected()) { + $this->smtp->Quit(); + $this->smtp->Close(); + } + } + } + + /** + * Sets the language for all class error messages. + * Returns false if it cannot load the language file. The default language is English. + * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: "br") + * @param string $lang_path Path to the language file directory + * @return bool + * @access public + */ + function SetLanguage($langcode = 'en', $lang_path = 'language/') { + //Define full set of translatable strings + $PHPMAILER_LANG = array( + 'authenticate' => 'SMTP Error: Could not authenticate.', + 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', + 'data_not_accepted' => 'SMTP Error: Data not accepted.', + 'empty_message' => 'Message body empty', + 'encoding' => 'Unknown encoding: ', + 'execute' => 'Could not execute: ', + 'file_access' => 'Could not access file: ', + 'file_open' => 'File Error: Could not open file: ', + 'from_failed' => 'The following From address failed: ', + 'instantiate' => 'Could not instantiate mail function.', + 'invalid_address' => 'Invalid address', + 'mailer_not_supported' => ' mailer is not supported.', + 'provide_address' => 'You must provide at least one recipient email address.', + 'recipients_failed' => 'SMTP Error: The following recipients failed: ', + 'signing' => 'Signing Error: ', + 'smtp_connect_failed' => 'SMTP Connect() failed.', + 'smtp_error' => 'SMTP server error: ', + 'variable_set' => 'Cannot set or reset variable: ' + ); + //Overwrite language-specific strings. This way we'll never have missing translations - no more "language string failed to load"! + $l = true; + if ($langcode != 'en') { //There is no English translation file + $l = @include $lang_path.'phpmailer.lang-'.$langcode.'.php'; + } + $this->language = $PHPMAILER_LANG; + return ($l == true); //Returns false if language not found + } + + /** + * Return the current array of language strings + * @return array + */ + public function GetTranslations() { + return $this->language; + } + + ///////////////////////////////////////////////// + // METHODS, MESSAGE CREATION + ///////////////////////////////////////////////// + + /** + * Creates recipient headers. + * @access public + * @param string $type + * @param array $addr + * @return string + */ + public function AddrAppend($type, $addr) { + $addr_str = $type . ': '; + $addresses = array(); + foreach ($addr as $a) { + $addresses[] = $this->AddrFormat($a); + } + $addr_str .= implode(', ', $addresses); + $addr_str .= $this->LE; + + return $addr_str; + } + + /** + * Formats an address correctly. + * @access public + * @param string $addr + * @return string + */ + public function AddrFormat($addr) { + if (empty($addr[1])) { + return $this->SecureHeader($addr[0]); + } else { + return $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; + } + } + + /** + * Wraps message for use with mailers that do not + * automatically perform wrapping and for quoted-printable. + * Original written by philippe. + * @param string $message The message to wrap + * @param integer $length The line length to wrap to + * @param boolean $qp_mode Whether to run in Quoted-Printable mode + * @access public + * @return string + */ + public function WrapText($message, $length, $qp_mode = false) { + $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; + // If utf-8 encoding is used, we will need to make sure we don't + // split multibyte characters when we wrap + $is_utf8 = (strtolower($this->CharSet) == "utf-8"); + $lelen = strlen($this->LE); + $crlflen = strlen(self::CRLF); + + $message = $this->FixEOL($message); + if (substr($message, -$lelen) == $this->LE) { + $message = substr($message, 0, -$lelen); + } + + $line = explode($this->LE, $message); // Magic. We know FixEOL uses $LE + $message = ''; + for ($i = 0 ;$i < count($line); $i++) { + $line_part = explode(' ', $line[$i]); + $buf = ''; + for ($e = 0; $e $length)) { + $space_left = $length - strlen($buf) - $crlflen; + if ($e != 0) { + if ($space_left > 20) { + $len = $space_left; + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { + $len--; + } elseif (substr($word, $len - 2, 1) == "=") { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = substr($word, $len); + $buf .= ' ' . $part; + $message .= $buf . sprintf("=%s", self::CRLF); + } else { + $message .= $buf . $soft_break; + } + $buf = ''; + } + while (strlen($word) > 0) { + $len = $length; + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { + $len--; + } elseif (substr($word, $len - 2, 1) == "=") { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = substr($word, $len); + + if (strlen($word) > 0) { + $message .= $part . sprintf("=%s", self::CRLF); + } else { + $buf = $part; + } + } + } else { + $buf_o = $buf; + $buf .= ($e == 0) ? $word : (' ' . $word); + + if (strlen($buf) > $length and $buf_o != '') { + $message .= $buf_o . $soft_break; + $buf = $word; + } + } + } + $message .= $buf . self::CRLF; + } + + return $message; + } + + /** + * Finds last character boundary prior to maxLength in a utf-8 + * quoted (printable) encoded string. + * Original written by Colin Brown. + * @access public + * @param string $encodedText utf-8 QP text + * @param int $maxLength find last character boundary prior to this length + * @return int + */ + public function UTF8CharBoundary($encodedText, $maxLength) { + $foundSplitPos = false; + $lookBack = 3; + while (!$foundSplitPos) { + $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); + $encodedCharPos = strpos($lastChunk, "="); + if ($encodedCharPos !== false) { + // Found start of encoded character byte within $lookBack block. + // Check the encoded byte value (the 2 chars after the '=') + $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); + $dec = hexdec($hex); + if ($dec < 128) { // Single byte character. + // If the encoded char was found at pos 0, it will fit + // otherwise reduce maxLength to start of the encoded char + $maxLength = ($encodedCharPos == 0) ? $maxLength : + $maxLength - ($lookBack - $encodedCharPos); + $foundSplitPos = true; + } elseif ($dec >= 192) { // First byte of a multi byte character + // Reduce maxLength to split at start of character + $maxLength = $maxLength - ($lookBack - $encodedCharPos); + $foundSplitPos = true; + } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back + $lookBack += 3; + } + } else { + // No encoded character found + $foundSplitPos = true; + } + } + return $maxLength; + } + + + /** + * Set the body wrapping. + * @access public + * @return void + */ + public function SetWordWrap() { + if($this->WordWrap < 1) { + return; + } + + switch($this->message_type) { + case 'alt': + case 'alt_inline': + case 'alt_attach': + case 'alt_inline_attach': + $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); + break; + default: + $this->Body = $this->WrapText($this->Body, $this->WordWrap); + break; + } + } + + /** + * Assembles message header. + * @access public + * @return string The assembled header + */ + public function CreateHeader() { + $result = ''; + + // Set the boundaries + $uniq_id = md5(uniqid(time())); + $this->boundary[1] = 'b1_' . $uniq_id; + $this->boundary[2] = 'b2_' . $uniq_id; + $this->boundary[3] = 'b3_' . $uniq_id; + + if ($this->MessageDate == '') { + $result .= $this->HeaderLine('Date', self::RFCDate()); + } else { + $result .= $this->HeaderLine('Date', $this->MessageDate); + } + + if ($this->ReturnPath) { + $result .= $this->HeaderLine('Return-Path', trim($this->ReturnPath)); + } elseif ($this->Sender == '') { + $result .= $this->HeaderLine('Return-Path', trim($this->From)); + } else { + $result .= $this->HeaderLine('Return-Path', trim($this->Sender)); + } + + // To be created automatically by mail() + if($this->Mailer != 'mail') { + if ($this->SingleTo === true) { + foreach($this->to as $t) { + $this->SingleToArray[] = $this->AddrFormat($t); + } + } else { + if(count($this->to) > 0) { + $result .= $this->AddrAppend('To', $this->to); + } elseif (count($this->cc) == 0) { + $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); + } + } + } + + $from = array(); + $from[0][0] = trim($this->From); + $from[0][1] = $this->FromName; + $result .= $this->AddrAppend('From', $from); + + // sendmail and mail() extract Cc from the header before sending + if(count($this->cc) > 0) { + $result .= $this->AddrAppend('Cc', $this->cc); + } + + // sendmail and mail() extract Bcc from the header before sending + if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) { + $result .= $this->AddrAppend('Bcc', $this->bcc); + } + + if(count($this->ReplyTo) > 0) { + $result .= $this->AddrAppend('Reply-To', $this->ReplyTo); + } + + // mail() sets the subject itself + if($this->Mailer != 'mail') { + $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); + } + + if($this->MessageID != '') { + $result .= $this->HeaderLine('Message-ID', $this->MessageID); + } else { + $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); + } + $result .= $this->HeaderLine('X-Priority', $this->Priority); + if ($this->XMailer == '') { + $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (http://code.google.com/a/apache-extras.org/p/phpmailer/)'); + } else { + $myXmailer = trim($this->XMailer); + if ($myXmailer) { + $result .= $this->HeaderLine('X-Mailer', $myXmailer); + } + } + + if($this->ConfirmReadingTo != '') { + $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); + } + + // Add custom headers + for($index = 0; $index < count($this->CustomHeader); $index++) { + $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); + } + if (!$this->sign_key_file) { + $result .= $this->HeaderLine('MIME-Version', '1.0'); + $result .= $this->GetMailMIME(); + } + + return $result; + } + + /** + * Returns the message MIME. + * @access public + * @return string + */ + public function GetMailMIME() { + $result = ''; + switch($this->message_type) { + case 'inline': + $result .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + case 'attach': + case 'inline_attach': + case 'alt_attach': + case 'alt_inline_attach': + $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + case 'alt': + case 'alt_inline': + $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + default: + // Catches case 'plain': and case '': + $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding); + $result .= $this->TextLine('Content-Type: '.$this->ContentType.'; charset='.$this->CharSet); + break; + } + + if($this->Mailer != 'mail') { + $result .= $this->LE; + } + + return $result; + } + + /** + * Returns the MIME message (headers and body). Only really valid post PreSend(). + * @access public + * @return string + */ + public function GetSentMIMEMessage() { + return $this->MIMEHeader . $this->mailHeader . self::CRLF . $this->MIMEBody; + } + + + /** + * Assembles the message body. Returns an empty string on failure. + * @access public + * @throws phpmailerException + * @return string The assembled message body + */ + public function CreateBody() { + $body = ''; + + if ($this->sign_key_file) { + $body .= $this->GetMailMIME().$this->LE; + } + + $this->SetWordWrap(); + + switch($this->message_type) { + case 'inline': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[1]); + break; + case 'attach': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'alt': + $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[1], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[1]); + break; + case 'alt_inline': + $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->EndBoundary($this->boundary[1]); + break; + case 'alt_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'alt_inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->TextLine("--" . $this->boundary[2]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[3] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[3], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[3]); + $body .= $this->LE; + $body .= $this->EndBoundary($this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + default: + // catch case 'plain' and case '' + $body .= $this->EncodeString($this->Body, $this->Encoding); + break; + } + + if ($this->IsError()) { + $body = ''; + } elseif ($this->sign_key_file) { + try { + $file = tempnam('', 'mail'); + file_put_contents($file, $body); //TODO check this worked + $signed = tempnam("", "signed"); + if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), NULL)) { + @unlink($file); + $body = file_get_contents($signed); + @unlink($signed); + } else { + @unlink($file); + @unlink($signed); + throw new phpmailerException($this->Lang("signing").openssl_error_string()); + } + } catch (phpmailerException $e) { + $body = ''; + if ($this->exceptions) { + throw $e; + } + } + } + + return $body; + } + + /** + * Returns the start of a message boundary. + * @access protected + * @param string $boundary + * @param string $charSet + * @param string $contentType + * @param string $encoding + * @return string + */ + protected function GetBoundary($boundary, $charSet, $contentType, $encoding) { + $result = ''; + if($charSet == '') { + $charSet = $this->CharSet; + } + if($contentType == '') { + $contentType = $this->ContentType; + } + if($encoding == '') { + $encoding = $this->Encoding; + } + $result .= $this->TextLine('--' . $boundary); + $result .= sprintf("Content-Type: %s; charset=%s", $contentType, $charSet); + $result .= $this->LE; + $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding); + $result .= $this->LE; + + return $result; + } + + /** + * Returns the end of a message boundary. + * @access protected + * @param string $boundary + * @return string + */ + protected function EndBoundary($boundary) { + return $this->LE . '--' . $boundary . '--' . $this->LE; + } + + /** + * Sets the message type. + * @access protected + * @return void + */ + protected function SetMessageType() { + $this->message_type = array(); + if($this->AlternativeExists()) $this->message_type[] = "alt"; + if($this->InlineImageExists()) $this->message_type[] = "inline"; + if($this->AttachmentExists()) $this->message_type[] = "attach"; + $this->message_type = implode("_", $this->message_type); + if($this->message_type == "") $this->message_type = "plain"; + } + + /** + * Returns a formatted header line. + * @access public + * @param string $name + * @param string $value + * @return string + */ + public function HeaderLine($name, $value) { + return $name . ': ' . $value . $this->LE; + } + + /** + * Returns a formatted mail line. + * @access public + * @param string $value + * @return string + */ + public function TextLine($value) { + return $value . $this->LE; + } + + ///////////////////////////////////////////////// + // CLASS METHODS, ATTACHMENTS + ///////////////////////////////////////////////// + + /** + * Adds an attachment from a path on the filesystem. + * Returns false if the file could not be found + * or accessed. + * @param string $path Path to the attachment. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @throws phpmailerException + * @return bool + */ + public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + try { + if ( !@is_file($path) ) { + throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE); + } + $filename = basename($path); + if ( $name == '' ) { + $name = $filename; + } + + $this->attachment[] = array( + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => 'attachment', + 7 => 0 + ); + + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + if ($this->SMTPDebug) { + $this->edebug($e->getMessage()."\n"); + } + if ( $e->getCode() == self::STOP_CRITICAL ) { + return false; + } + } + return true; + } + + /** + * Return the current array of attachments + * @return array + */ + public function GetAttachments() { + return $this->attachment; + } + + /** + * Attaches all fs, string, and binary attachments to the message. + * Returns an empty string on failure. + * @access protected + * @param string $disposition_type + * @param string $boundary + * @return string + */ + protected function AttachAll($disposition_type, $boundary) { + // Return text of body + $mime = array(); + $cidUniq = array(); + $incl = array(); + + // Add all attachments + foreach ($this->attachment as $attachment) { + // CHECK IF IT IS A VALID DISPOSITION_FILTER + if($attachment[6] == $disposition_type) { + // Check for string attachment + $string = ''; + $path = ''; + $bString = $attachment[5]; + if ($bString) { + $string = $attachment[0]; + } else { + $path = $attachment[0]; + } + + $inclhash = md5(serialize($attachment)); + if (in_array($inclhash, $incl)) { continue; } + $incl[] = $inclhash; + $filename = $attachment[1]; + $name = $attachment[2]; + $encoding = $attachment[3]; + $type = $attachment[4]; + $disposition = $attachment[6]; + $cid = $attachment[7]; + if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } + $cidUniq[$cid] = true; + + $mime[] = sprintf("--%s%s", $boundary, $this->LE); + $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); + $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); + + if($disposition == 'inline') { + $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); + } + + $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); + + // Encode as string attachment + if($bString) { + $mime[] = $this->EncodeString($string, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } else { + $mime[] = $this->EncodeFile($path, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } + } + } + + $mime[] = sprintf("--%s--%s", $boundary, $this->LE); + + return implode("", $mime); + } + + /** + * Encodes attachment in requested format. + * Returns an empty string on failure. + * @param string $path The full path to the file + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * @throws phpmailerException + * @see EncodeFile() + * @access protected + * @return string + */ + protected function EncodeFile($path, $encoding = 'base64') { + try { + if (!is_readable($path)) { + throw new phpmailerException($this->Lang('file_open') . $path, self::STOP_CONTINUE); + } + // if (!function_exists('get_magic_quotes')) { + // function get_magic_quotes() { + // return false; + // } + // } + $magic_quotes = get_magic_quotes_runtime(); + if ($magic_quotes) { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + set_magic_quotes_runtime(0); + } else { + ini_set('magic_quotes_runtime', 0); + } + } + $file_buffer = file_get_contents($path); + $file_buffer = $this->EncodeString($file_buffer, $encoding); + if ($magic_quotes) { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + set_magic_quotes_runtime($magic_quotes); + } else { + ini_set('magic_quotes_runtime', $magic_quotes); + } + } + return $file_buffer; + } catch (Exception $e) { + $this->SetError($e->getMessage()); + return ''; + } + } + + /** + * Encodes string to requested format. + * Returns an empty string on failure. + * @param string $str The text to encode + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * @access public + * @return string + */ + public function EncodeString($str, $encoding = 'base64') { + $encoded = ''; + switch(strtolower($encoding)) { + case 'base64': + $encoded = chunk_split(base64_encode($str), 76, $this->LE); + break; + case '7bit': + case '8bit': + $encoded = $this->FixEOL($str); + //Make sure it ends with a line break + if (substr($encoded, -(strlen($this->LE))) != $this->LE) + $encoded .= $this->LE; + break; + case 'binary': + $encoded = $str; + break; + case 'quoted-printable': + $encoded = $this->EncodeQP($str); + break; + default: + $this->SetError($this->Lang('encoding') . $encoding); + break; + } + return $encoded; + } + + /** + * Encode a header string to best (shortest) of Q, B, quoted or none. + * @access public + * @param string $str + * @param string $position + * @return string + */ + public function EncodeHeader($str, $position = 'text') { + $x = 0; + + switch (strtolower($position)) { + case 'phrase': + if (!preg_match('/[\200-\377]/', $str)) { + // Can't use addslashes as we don't know what value has magic_quotes_sybase + $encoded = addcslashes($str, "\0..\37\177\\\""); + if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { + return ($encoded); + } else { + return ("\"$encoded\""); + } + } + $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); + break; + case 'comment': + $x = preg_match_all('/[()"]/', $str, $matches); + // Fall-through + case 'text': + default: + $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); + break; + } + + if ($x == 0) { + return ($str); + } + + $maxlen = 75 - 7 - strlen($this->CharSet); + // Try to select the encoding which should produce the shortest output + if (strlen($str)/3 < $x) { + $encoding = 'B'; + if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) { + // Use a custom function which correctly encodes and wraps long + // multibyte strings without breaking lines within a character + $encoded = $this->Base64EncodeWrapMB($str, "\n"); + } else { + $encoded = base64_encode($str); + $maxlen -= $maxlen % 4; + $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + } + } else { + $encoding = 'Q'; + $encoded = $this->EncodeQ($str, $position); + $encoded = $this->WrapText($encoded, $maxlen, true); + $encoded = str_replace('='.self::CRLF, "\n", trim($encoded)); + } + + $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); + $encoded = trim(str_replace("\n", $this->LE, $encoded)); + + return $encoded; + } + + /** + * Checks if a string contains multibyte characters. + * @access public + * @param string $str multi-byte text to wrap encode + * @return bool + */ + public function HasMultiBytes($str) { + if (function_exists('mb_strlen')) { + return (strlen($str) > mb_strlen($str, $this->CharSet)); + } else { // Assume no multibytes (we can't handle without mbstring functions anyway) + return false; + } + } + + /** + * Correctly encodes and wraps long multibyte strings for mail headers + * without breaking lines within a character. + * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php + * @access public + * @param string $str multi-byte text to wrap encode + * @param string $lf string to use as linefeed/end-of-line + * @return string + */ + public function Base64EncodeWrapMB($str, $lf=null) { + $start = "=?".$this->CharSet."?B?"; + $end = "?="; + $encoded = ""; + if ($lf === null) { + $lf = $this->LE; + } + + $mb_length = mb_strlen($str, $this->CharSet); + // Each line must have length <= 75, including $start and $end + $length = 75 - strlen($start) - strlen($end); + // Average multi-byte ratio + $ratio = $mb_length / strlen($str); + // Base64 has a 4:3 ratio + $offset = $avgLength = floor($length * $ratio * .75); + + for ($i = 0; $i < $mb_length; $i += $offset) { + $lookBack = 0; + + do { + $offset = $avgLength - $lookBack; + $chunk = mb_substr($str, $i, $offset, $this->CharSet); + $chunk = base64_encode($chunk); + $lookBack++; + } + while (strlen($chunk) > $length); + + $encoded .= $chunk . $lf; + } + + // Chomp the last linefeed + $encoded = substr($encoded, 0, -strlen($lf)); + return $encoded; + } + + /** + * Encode string to quoted-printable. + * Only uses standard PHP, slow, but will always work + * @access public + * @param string $input + * @param integer $line_max Number of chars allowed on a line before wrapping + * @param bool $space_conv + * @internal param string $string the text to encode + * @return string + */ + public function EncodeQPphp( $input = '', $line_max = 76, $space_conv = false) { + $hex = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); + $lines = preg_split('/(?:\r\n|\r|\n)/', $input); + $eol = "\r\n"; + $escape = '='; + $output = ''; + while( list(, $line) = each($lines) ) { + $linlen = strlen($line); + $newline = ''; + for($i = 0; $i < $linlen; $i++) { + $c = substr( $line, $i, 1 ); + $dec = ord( $c ); + if ( ( $i == 0 ) && ( $dec == 46 ) ) { // convert first point in the line into =2E + $c = '=2E'; + } + if ( $dec == 32 ) { + if ( $i == ( $linlen - 1 ) ) { // convert space at eol only + $c = '=20'; + } else if ( $space_conv ) { + $c = '=20'; + } + } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required + $h2 = (integer)floor($dec/16); + $h1 = (integer)floor($dec%16); + $c = $escape.$hex[$h2].$hex[$h1]; + } + if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted + $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay + $newline = ''; + // check if newline first character will be point or not + if ( $dec == 46 ) { + $c = '=2E'; + } + } + $newline .= $c; + } // end of for + $output .= $newline.$eol; + } // end of while + return $output; + } + + /** + * Encode string to RFC2045 (6.7) quoted-printable format + * Uses a PHP5 stream filter to do the encoding about 64x faster than the old version + * Also results in same content as you started with after decoding + * @see EncodeQPphp() + * @access public + * @param string $string the text to encode + * @param integer $line_max Number of chars allowed on a line before wrapping + * @param boolean $space_conv Dummy param for compatibility with existing EncodeQP function + * @return string + * @author Marcus Bointon + */ + public function EncodeQP($string, $line_max = 76, $space_conv = false) { + if (function_exists('quoted_printable_encode')) { //Use native function if it's available (>= PHP5.3) + return quoted_printable_encode($string); + } + $filters = stream_get_filters(); + if (!in_array('convert.*', $filters)) { //Got convert stream filter? + return $this->EncodeQPphp($string, $line_max, $space_conv); //Fall back to old implementation + } + $fp = fopen('php://temp/', 'r+'); + $string = preg_replace('/\r\n?/', $this->LE, $string); //Normalise line breaks + $params = array('line-length' => $line_max, 'line-break-chars' => $this->LE); + $s = stream_filter_append($fp, 'convert.quoted-printable-encode', STREAM_FILTER_READ, $params); + fputs($fp, $string); + rewind($fp); + $out = stream_get_contents($fp); + stream_filter_remove($s); + $out = preg_replace('/^\./m', '=2E', $out); //Encode . if it is first char on a line, workaround for bug in Exchange + fclose($fp); + return $out; + } + + /** + * Encode string to q encoding. + * @link http://tools.ietf.org/html/rfc2047 + * @param string $str the text to encode + * @param string $position Where the text is going to be used, see the RFC for what that means + * @access public + * @return string + */ + public function EncodeQ($str, $position = 'text') { + //There should not be any EOL in the string + $pattern=""; + $encoded = str_replace(array("\r", "\n"), '', $str); + switch (strtolower($position)) { + case 'phrase': + $pattern = '^A-Za-z0-9!*+\/ -'; + break; + + case 'comment': + $pattern = '\(\)"'; + //note that we dont break here! + //for this reason we build the $pattern withoud including delimiters and [] + + case 'text': + default: + //Replace every high ascii, control =, ? and _ characters + //We put \075 (=) as first value to make sure it's the first one in being converted, preventing double encode + $pattern = '\075\000-\011\013\014\016-\037\077\137\177-\377' . $pattern; + break; + } + + if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { + foreach (array_unique($matches[0]) as $char) { + $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded); + } + } + + //Replace every spaces to _ (more readable than =20) + return str_replace(' ', '_', $encoded); +} + + + /** + * Adds a string or binary attachment (non-filesystem) to the list. + * This method can be used to attach ascii or binary data, + * such as a BLOB record from a database. + * @param string $string String attachment data. + * @param string $filename Name of the attachment. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return void + */ + public function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') { + // Append to $attachment array + $this->attachment[] = array( + 0 => $string, + 1 => $filename, + 2 => basename($filename), + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => 'attachment', + 7 => 0 + ); + } + + /** + * Adds an embedded attachment. This can include images, sounds, and + * just about any other document. Make sure to set the $type to an + * image type. For JPEG images use "image/jpeg" and for GIF images + * use "image/gif". + * @param string $path Path to the attachment. + * @param string $cid Content ID of the attachment. Use this to identify + * the Id for accessing the image in an HTML form. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + + if ( !@is_file($path) ) { + $this->SetError($this->Lang('file_access') . $path); + return false; + } + + $filename = basename($path); + if ( $name == '' ) { + $name = $filename; + } + + // Append to $attachment array + $this->attachment[] = array( + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => 'inline', + 7 => $cid + ); + + return true; + } + + /** + * Adds an embedded stringified attachment. This can include images, sounds, and + * just about any other document. Make sure to set the $type to an + * image type. For JPEG images use "image/jpeg" and for GIF images + * use "image/gif". + * @param string $string The attachment. + * @param string $cid Content ID of the attachment. Use this to identify + * the Id for accessing the image in an HTML form. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + public function AddStringEmbeddedImage($string, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + // Append to $attachment array + $this->attachment[] = array( + 0 => $string, + 1 => $name, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => 'inline', + 7 => $cid + ); + } + + /** + * Returns true if an inline attachment is present. + * @access public + * @return bool + */ + public function InlineImageExists() { + foreach($this->attachment as $attachment) { + if ($attachment[6] == 'inline') { + return true; + } + } + return false; + } + + /** + * Returns true if an attachment (non-inline) is present. + * @return bool + */ + public function AttachmentExists() { + foreach($this->attachment as $attachment) { + if ($attachment[6] == 'attachment') { + return true; + } + } + return false; + } + + /** + * Does this message have an alternative body set? + * @return bool + */ + public function AlternativeExists() { + return !empty($this->AltBody); + } + + ///////////////////////////////////////////////// + // CLASS METHODS, MESSAGE RESET + ///////////////////////////////////////////////// + + /** + * Clears all recipients assigned in the TO array. Returns void. + * @return void + */ + public function ClearAddresses() { + foreach($this->to as $to) { + unset($this->all_recipients[strtolower($to[0])]); + } + $this->to = array(); + } + + /** + * Clears all recipients assigned in the CC array. Returns void. + * @return void + */ + public function ClearCCs() { + foreach($this->cc as $cc) { + unset($this->all_recipients[strtolower($cc[0])]); + } + $this->cc = array(); + } + + /** + * Clears all recipients assigned in the BCC array. Returns void. + * @return void + */ + public function ClearBCCs() { + foreach($this->bcc as $bcc) { + unset($this->all_recipients[strtolower($bcc[0])]); + } + $this->bcc = array(); + } + + /** + * Clears all recipients assigned in the ReplyTo array. Returns void. + * @return void + */ + public function ClearReplyTos() { + $this->ReplyTo = array(); + } + + /** + * Clears all recipients assigned in the TO, CC and BCC + * array. Returns void. + * @return void + */ + public function ClearAllRecipients() { + $this->to = array(); + $this->cc = array(); + $this->bcc = array(); + $this->all_recipients = array(); + } + + /** + * Clears all previously set filesystem, string, and binary + * attachments. Returns void. + * @return void + */ + public function ClearAttachments() { + $this->attachment = array(); + } + + /** + * Clears all custom headers. Returns void. + * @return void + */ + public function ClearCustomHeaders() { + $this->CustomHeader = array(); + } + + ///////////////////////////////////////////////// + // CLASS METHODS, MISCELLANEOUS + ///////////////////////////////////////////////// + + /** + * Adds the error message to the error container. + * @access protected + * @param string $msg + * @return void + */ + protected function SetError($msg) { + $this->error_count++; + if ($this->Mailer == 'smtp' and !is_null($this->smtp)) { + $lasterror = $this->smtp->getError(); + if (!empty($lasterror) and array_key_exists('smtp_msg', $lasterror)) { + $msg .= '

' . $this->Lang('smtp_error') . $lasterror['smtp_msg'] . "

\n"; + } + } + $this->ErrorInfo = $msg; + } + + /** + * Returns the proper RFC 822 formatted date. + * @access public + * @return string + * @static + */ + public static function RFCDate() { + $tz = date('Z'); + $tzs = ($tz < 0) ? '-' : '+'; + $tz = abs($tz); + $tz = (int)($tz/3600)*100 + ($tz%3600)/60; + $result = sprintf("%s %s%04d", date('D, j M Y H:i:s'), $tzs, $tz); + + return $result; + } + + /** + * Returns the server hostname or 'localhost.localdomain' if unknown. + * @access protected + * @return string + */ + protected function ServerHostname() { + if (!empty($this->Hostname)) { + $result = $this->Hostname; + } elseif (isset($_SERVER['SERVER_NAME'])) { + $result = $_SERVER['SERVER_NAME']; + } else { + $result = 'localhost.localdomain'; + } + + return $result; + } + + /** + * Returns a message in the appropriate language. + * @access protected + * @param string $key + * @return string + */ + protected function Lang($key) { + if(count($this->language) < 1) { + $this->SetLanguage('en'); // set the default language + } + + if(isset($this->language[$key])) { + return $this->language[$key]; + } else { + return 'Language string failed to load: ' . $key; + } + } + + /** + * Returns true if an error occurred. + * @access public + * @return bool + */ + public function IsError() { + return ($this->error_count > 0); + } + + /** + * Changes every end of line from CRLF, CR or LF to $this->LE. + * @access public + * @param string $str String to FixEOL + * @return string + */ + public function FixEOL($str) { + // condense down to \n + $nstr = str_replace(array("\r\n", "\r"), "\n", $str); + // Now convert LE as needed + if ($this->LE !== "\n") { + $nstr = str_replace("\n", $this->LE, $nstr); + } + return $nstr; + } + + /** + * Adds a custom header. $name value can be overloaded to contain + * both header name and value (name:value) + * @access public + * @param string $name custom header name + * @param string $value header value + * @return void + */ + public function AddCustomHeader($name, $value=null) { + if ($value === null) { + // Value passed in as name:value + $this->CustomHeader[] = explode(':', $name, 2); + } else { + $this->CustomHeader[] = array($name, $value); + } + } + + /** + * Evaluates the message and returns modifications for inline images and backgrounds + * @access public + * @param string $message Text to be HTML modified + * @param string $basedir baseline directory for path + * @return string $message + */ + public function MsgHTML($message, $basedir = '') { + preg_match_all("/(src|background)=[\"'](.*)[\"']/Ui", $message, $images); + if(isset($images[2])) { + foreach($images[2] as $i => $url) { + // do not change urls for absolute images (thanks to corvuscorax) + if (!preg_match('#^[A-z]+://#', $url)) { + $filename = basename($url); + $directory = dirname($url); + if ($directory == '.') { + $directory = ''; + } + $cid = 'cid:' . md5($url); + $ext = pathinfo($filename, PATHINFO_EXTENSION); + $mimeType = self::_mime_types($ext); + if ( strlen($basedir) > 1 && substr($basedir, -1) != '/') { $basedir .= '/'; } + if ( strlen($directory) > 1 && substr($directory, -1) != '/') { $directory .= '/'; } + if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($url), $filename, 'base64', $mimeType) ) { + $message = preg_replace("/".$images[1][$i]."=[\"']".preg_quote($url, '/')."[\"']/Ui", $images[1][$i]."=\"".$cid."\"", $message); + } + } + } + } + $this->IsHTML(true); + $this->Body = $message; + if (empty($this->AltBody)) { + $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s', '', $message))); + if (!empty($textMsg)) { + $this->AltBody = html_entity_decode($textMsg, ENT_QUOTES, $this->CharSet); + } + } + if (empty($this->AltBody)) { + $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n"; + } + return $message; + } + + /** + * Gets the MIME type of the embedded or inline image + * @param string $ext File extension + * @access public + * @return string MIME type of ext + * @static + */ + public static function _mime_types($ext = '') { + $mimes = array( + 'xl' => 'application/excel', + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'bin' => 'application/macbinary', + 'doc' => 'application/msword', + 'word' => 'application/msword', + 'class' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'dms' => 'application/octet-stream', + 'exe' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'psd' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'so' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'php3' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => 'application/x-javascript', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'zip' => 'application/zip', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mpga' => 'audio/mpeg', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'wav' => 'audio/x-wav', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'jpeg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'png' => 'image/png', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'eml' => 'message/rfc822', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'log' => 'text/plain', + 'text' => 'text/plain', + 'txt' => 'text/plain', + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'mpeg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mov' => 'video/quicktime', + 'qt' => 'video/quicktime', + 'rv' => 'video/vnd.rn-realvideo', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie' + ); + return (!isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; + } + + /** + * Set (or reset) Class Objects (variables) + * + * Usage Example: + * $page->set('X-Priority', '3'); + * + * @access public + * @param string $name Parameter Name + * @param mixed $value Parameter Value + * NOTE: will not work with arrays, there are no arrays to set/reset + * @throws phpmailerException + * @return bool + * @todo Should this not be using __set() magic function? + */ + public function set($name, $value = '') { + try { + if (isset($this->$name) ) { + $this->$name = $value; + } else { + throw new phpmailerException($this->Lang('variable_set') . $name, self::STOP_CRITICAL); + } + } catch (Exception $e) { + $this->SetError($e->getMessage()); + if ($e->getCode() == self::STOP_CRITICAL) { + return false; + } + } + return true; + } + + /** + * Strips newlines to prevent header injection. + * @access public + * @param string $str String + * @return string + */ + public function SecureHeader($str) { + return trim(str_replace(array("\r", "\n"), '', $str)); + } + + /** + * Set the private key file and password to sign the message. + * + * @access public + * @param $cert_filename + * @param string $key_filename Parameter File Name + * @param string $key_pass Password for private key + */ + public function Sign($cert_filename, $key_filename, $key_pass) { + $this->sign_cert_file = $cert_filename; + $this->sign_key_file = $key_filename; + $this->sign_key_pass = $key_pass; + } + + /** + * Set the private key file and password to sign the message. + * + * @access public + * @param string $txt + * @return string + */ + public function DKIM_QP($txt) { + $line = ''; + for ($i = 0; $i < strlen($txt); $i++) { + $ord = ord($txt[$i]); + if ( ((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E)) ) { + $line .= $txt[$i]; + } else { + $line .= "=".sprintf("%02X", $ord); + } + } + return $line; + } + + /** + * Generate DKIM signature + * + * @access public + * @param string $s Header + * @return string + */ + public function DKIM_Sign($s) { + $privKeyStr = file_get_contents($this->DKIM_private); + if ($this->DKIM_passphrase != '') { + $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); + } else { + $privKey = $privKeyStr; + } + if (openssl_sign($s, $signature, $privKey)) { + return base64_encode($signature); + } + return ''; + } + + /** + * Generate DKIM Canonicalization Header + * + * @access public + * @param string $s Header + * @return string + */ + public function DKIM_HeaderC($s) { + $s = preg_replace("/\r\n\s+/", " ", $s); + $lines = explode("\r\n", $s); + foreach ($lines as $key => $line) { + list($heading, $value) = explode(":", $line, 2); + $heading = strtolower($heading); + $value = preg_replace("/\s+/", " ", $value) ; // Compress useless spaces + $lines[$key] = $heading.":".trim($value) ; // Don't forget to remove WSP around the value + } + $s = implode("\r\n", $lines); + return $s; + } + + /** + * Generate DKIM Canonicalization Body + * + * @access public + * @param string $body Message Body + * @return string + */ + public function DKIM_BodyC($body) { + if ($body == '') return "\r\n"; + // stabilize line endings + $body = str_replace("\r\n", "\n", $body); + $body = str_replace("\n", "\r\n", $body); + // END stabilize line endings + while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") { + $body = substr($body, 0, strlen($body) - 2); + } + return $body; + } + + /** + * Create the DKIM header, body, as new header + * + * @access public + * @param string $headers_line Header lines + * @param string $subject Subject + * @param string $body Body + * @return string + */ + public function DKIM_Add($headers_line, $subject, $body) { + $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms + $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body + $DKIMquery = 'dns/txt'; // Query method + $DKIMtime = time() ; // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) + $subject_header = "Subject: $subject"; + $headers = explode($this->LE, $headers_line); + $from_header = ""; + $to_header = ""; + foreach($headers as $header) { + if (strpos($header, 'From:') === 0) { + $from_header = $header; + } elseif (strpos($header, 'To:') === 0) { + $to_header = $header; + } + } + $from = str_replace('|', '=7C', $this->DKIM_QP($from_header)); + $to = str_replace('|', '=7C', $this->DKIM_QP($to_header)); + $subject = str_replace('|', '=7C', $this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable + $body = $this->DKIM_BodyC($body); + $DKIMlen = strlen($body) ; // Length of body + $DKIMb64 = base64_encode(pack("H*", sha1($body))) ; // Base64 of packed binary SHA-1 hash of body + $ident = ($this->DKIM_identity == '')? '' : " i=" . $this->DKIM_identity . ";"; + $dkimhdrs = "DKIM-Signature: v=1; a=" . $DKIMsignatureType . "; q=" . $DKIMquery . "; l=" . $DKIMlen . "; s=" . $this->DKIM_selector . ";\r\n". + "\tt=" . $DKIMtime . "; c=" . $DKIMcanonicalization . ";\r\n". + "\th=From:To:Subject;\r\n". + "\td=" . $this->DKIM_domain . ";" . $ident . "\r\n". + "\tz=$from\r\n". + "\t|$to\r\n". + "\t|$subject;\r\n". + "\tbh=" . $DKIMb64 . ";\r\n". + "\tb="; + $toSign = $this->DKIM_HeaderC($from_header . "\r\n" . $to_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs); + $signed = $this->DKIM_Sign($toSign); + return "X-PHPMAILER-DKIM: code.google.com/a/apache-extras.org/p/phpmailer/\r\n".$dkimhdrs.$signed."\r\n"; + } + + /** + * Perform callback + * @param boolean $isSent + * @param string $to + * @param string $cc + * @param string $bcc + * @param string $subject + * @param string $body + * @param string $from + */ + protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from=null) { + if (!empty($this->action_function) && is_callable($this->action_function)) { + $params = array($isSent, $to, $cc, $bcc, $subject, $body, $from); + call_user_func_array($this->action_function, $params); + } + } +} + +/** + * Exception handler for PHPMailer + * @package PHPMailer + */ +class phpmailerException extends Exception { + /** + * Prettify error message output + * @return string + */ + public function errorMessage() { + $errorMsg = '' . $this->getMessage() . "
\n"; + return $errorMsg; + } +} +?> diff --git a/_incl_data/class/mail/class.pop3.php b/_incl_data/class/mail/class.pop3.php new file mode 100644 index 00000000..506b5999 --- /dev/null +++ b/_incl_data/class/mail/class.pop3.php @@ -0,0 +1,418 @@ + + * @author Andy Prevost + * @author Jim Jagielski + */ + +class POP3 { + /** + * Default POP3 port + * @var int + */ + public $POP3_PORT = 110; + + /** + * Default Timeout + * @var int + */ + public $POP3_TIMEOUT = 30; + + /** + * POP3 Carriage Return + Line Feed + * @var string + */ + public $CRLF = "\r\n"; + + /** + * Displaying Debug warnings? (0 = now, 1+ = yes) + * @var int + */ + public $do_debug = 2; + + /** + * POP3 Mail Server + * @var string + */ + public $host; + + /** + * POP3 Port + * @var int + */ + public $port; + + /** + * POP3 Timeout Value + * @var int + */ + public $tval; + + /** + * POP3 Username + * @var string + */ + public $username; + + /** + * POP3 Password + * @var string + */ + public $password; + + /** + * Sets the POP3 PHPMailer Version number + * @var string + */ + public $Version = '5.2.4'; + + ///////////////////////////////////////////////// + // PROPERTIES, PRIVATE AND PROTECTED + ///////////////////////////////////////////////// + + /** + * @var resource Resource handle for the POP connection socket + */ + private $pop_conn; + /** + * @var boolean Are we connected? + */ + private $connected; + /** + * @var array Error container + */ + private $error; // Error log array + + /** + * Constructor, sets the initial values + * @access public + * @return POP3 + */ + public function __construct() { + $this->pop_conn = 0; + $this->connected = false; + $this->error = null; + } + + /** + * Combination of public events - connect, login, disconnect + * @access public + * @param string $host + * @param bool|int $port + * @param bool|int $tval + * @param string $username + * @param string $password + * @param int $debug_level + * @return bool + */ + public function Authorise ($host, $port = false, $tval = false, $username, $password, $debug_level = 0) { + $this->host = $host; + + // If no port value is passed, retrieve it + if ($port == false) { + $this->port = $this->POP3_PORT; + } else { + $this->port = $port; + } + + // If no port value is passed, retrieve it + if ($tval == false) { + $this->tval = $this->POP3_TIMEOUT; + } else { + $this->tval = $tval; + } + + $this->do_debug = $debug_level; + $this->username = $username; + $this->password = $password; + + // Refresh the error log + $this->error = null; + + // Connect + $result = $this->Connect($this->host, $this->port, $this->tval); + + if ($result) { + $login_result = $this->Login($this->username, $this->password); + + if ($login_result) { + $this->Disconnect(); + + return true; + } + + } + + // We need to disconnect regardless if the login succeeded + $this->Disconnect(); + + return false; + } + + /** + * Connect to the POP3 server + * @access public + * @param string $host + * @param bool|int $port + * @param integer $tval + * @return boolean + */ + public function Connect ($host, $port = false, $tval = 30) { + // Are we already connected? + if ($this->connected) { + return true; + } + + /* + On Windows this will raise a PHP Warning error if the hostname doesn't exist. + Rather than supress it with @fsockopen, let's capture it cleanly instead + */ + + set_error_handler(array(&$this, 'catchWarning')); + + // Connect to the POP3 server + $this->pop_conn = fsockopen($host, // POP3 Host + $port, // Port # + $errno, // Error Number + $errstr, // Error Message + $tval); // Timeout (seconds) + + // Restore the error handler + restore_error_handler(); + + // Does the Error Log now contain anything? + if ($this->error && $this->do_debug >= 1) { + $this->displayErrors(); + } + + // Did we connect? + if ($this->pop_conn == false) { + // It would appear not... + $this->error = array( + 'error' => "Failed to connect to server $host on port $port", + 'errno' => $errno, + 'errstr' => $errstr + ); + + if ($this->do_debug >= 1) { + $this->displayErrors(); + } + + return false; + } + + // Increase the stream time-out + + // Check for PHP 4.3.0 or later + if (version_compare(phpversion(), '5.0.0', 'ge')) { + stream_set_timeout($this->pop_conn, $tval, 0); + } else { + // Does not work on Windows + if (substr(PHP_OS, 0, 3) !== 'WIN') { + socket_set_timeout($this->pop_conn, $tval, 0); + } + } + + // Get the POP3 server response + $pop3_response = $this->getResponse(); + + // Check for the +OK + if ($this->checkResponse($pop3_response)) { + // The connection is established and the POP3 server is talking + $this->connected = true; + return true; + } + return false; + } + + /** + * Login to the POP3 server (does not support APOP yet) + * @access public + * @param string $username + * @param string $password + * @return boolean + */ + public function Login ($username = '', $password = '') { + if ($this->connected == false) { + $this->error = 'Not connected to POP3 server'; + + if ($this->do_debug >= 1) { + $this->displayErrors(); + } + } + + if (empty($username)) { + $username = $this->username; + } + + if (empty($password)) { + $password = $this->password; + } + + $pop_username = "USER $username" . $this->CRLF; + $pop_password = "PASS $password" . $this->CRLF; + + // Send the Username + $this->sendString($pop_username); + $pop3_response = $this->getResponse(); + + if ($this->checkResponse($pop3_response)) { + // Send the Password + $this->sendString($pop_password); + $pop3_response = $this->getResponse(); + + if ($this->checkResponse($pop3_response)) { + return true; + } + } + return false; + } + + /** + * Disconnect from the POP3 server + * @access public + */ + public function Disconnect () { + $this->sendString('QUIT'); + + fclose($this->pop_conn); + } + + ///////////////////////////////////////////////// + // Private Methods + ///////////////////////////////////////////////// + + /** + * Get the socket response back. + * $size is the maximum number of bytes to retrieve + * @access private + * @param integer $size + * @return string + */ + private function getResponse ($size = 128) { + $pop3_response = fgets($this->pop_conn, $size); + + return $pop3_response; + } + + /** + * Send a string down the open socket connection to the POP3 server + * @access private + * @param string $string + * @return integer + */ + private function sendString ($string) { + $bytes_sent = fwrite($this->pop_conn, $string, strlen($string)); + + return $bytes_sent; + } + + /** + * Checks the POP3 server response for +OK or -ERR + * @access private + * @param string $string + * @return boolean + */ + private function checkResponse ($string) { + if (substr($string, 0, 3) !== '+OK') { + $this->error = array( + 'error' => "Server reported an error: $string", + 'errno' => 0, + 'errstr' => '' + ); + + if ($this->do_debug >= 1) { + $this->displayErrors(); + } + + return false; + } else { + return true; + } + + } + + /** + * If debug is enabled, display the error message array + * @access private + */ + private function displayErrors () { + echo '
';
+
+    foreach ($this->error as $single_error) {
+      print_r($single_error);
+    }
+
+    echo '
'; + } + + /** + * Takes over from PHP for the socket warning handler + * @access private + * @param integer $errno + * @param string $errstr + * @param string $errfile + * @param integer $errline + */ + private function catchWarning ($errno, $errstr, $errfile, $errline) { + $this->error[] = array( + 'error' => "Connecting to the POP3 server raised a PHP warning: ", + 'errno' => $errno, + 'errstr' => $errstr + ); + } + + // End of class +} +?> diff --git a/_incl_data/class/mail/class.smtp.php b/_incl_data/class/mail/class.smtp.php new file mode 100644 index 00000000..72361bbb --- /dev/null +++ b/_incl_data/class/mail/class.smtp.php @@ -0,0 +1,1003 @@ +Debugoutput == "error_log") { + error_log($str); + } else { + echo $str; + } + } + + /** + * Initialize the class so that the data is in a known state. + * @access public + * @return SMTP + */ + public function __construct() { + $this->smtp_conn = 0; + $this->error = null; + $this->helo_rply = null; + + $this->do_debug = 0; + } + + ///////////////////////////////////////////////// + // CONNECTION FUNCTIONS + ///////////////////////////////////////////////// + + /** + * Connect to the server specified on the port specified. + * If the port is not specified use the default SMTP_PORT. + * If tval is specified then a connection will try and be + * established with the server for that number of seconds. + * If tval is not specified the default is 30 seconds to + * try on the connection. + * + * SMTP CODE SUCCESS: 220 + * SMTP CODE FAILURE: 421 + * @access public + * @param string $host + * @param int $port + * @param int $tval + * @return bool + */ + public function Connect($host, $port = 0, $tval = 30) { + // set the error val to null so there is no confusion + $this->error = null; + + // make sure we are __not__ connected + if($this->connected()) { + // already connected, generate error + $this->error = array("error" => "Already connected to a server"); + return false; + } + + if(empty($port)) { + $port = $this->SMTP_PORT; + } + + // connect to the smtp server + $this->smtp_conn = @fsockopen($host, // the host of the server + $port, // the port to use + $errno, // error number if any + $errstr, // error message if any + $tval); // give up after ? secs + // verify we connected properly + if(empty($this->smtp_conn)) { + $this->error = array("error" => "Failed to connect to server", + "errno" => $errno, + "errstr" => $errstr); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '
'); + } + return false; + } + + // SMTP server can take longer to respond, give longer timeout for first read + // Windows does not have support for this timeout function + if(substr(PHP_OS, 0, 3) != "WIN") { + $max = ini_get('max_execution_time'); + if ($max != 0 && $tval > $max) { // don't bother if unlimited + @set_time_limit($tval); + } + stream_set_timeout($this->smtp_conn, $tval, 0); + } + + // get any announcement + $announce = $this->get_lines(); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $announce . $this->CRLF . '
'); + } + + return true; + } + + /** + * Initiate a TLS communication with the server. + * + * SMTP CODE 220 Ready to start TLS + * SMTP CODE 501 Syntax error (no parameters allowed) + * SMTP CODE 454 TLS not available due to temporary reason + * @access public + * @return bool success + */ + public function StartTLS() { + $this->error = null; # to avoid confusion + + if(!$this->connected()) { + $this->error = array("error" => "Called StartTLS() without being connected"); + return false; + } + + fputs($this->smtp_conn,"STARTTLS" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'); + } + + if($code != 220) { + $this->error = + array("error" => "STARTTLS not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + + // Begin encrypted connection + if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) { + return false; + } + + return true; + } + + /** + * Performs SMTP authentication. Must be run after running the + * Hello() method. Returns true if successfully authenticated. + * @access public + * @param string $username + * @param string $password + * @param string $authtype + * @param string $realm + * @param string $workstation + * @return bool + */ + public function Authenticate($username, $password, $authtype='LOGIN', $realm='', $workstation='') { + if (empty($authtype)) { + $authtype = 'LOGIN'; + } + + switch ($authtype) { + case 'PLAIN': + // Start authentication + fputs($this->smtp_conn,"AUTH PLAIN" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + // Send encoded username and password + fputs($this->smtp_conn, base64_encode("\0".$username."\0".$password) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Authentication not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + break; + case 'LOGIN': + // Start authentication + fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + + // Send encoded username + fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "Username not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + + // Send encoded password + fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Password not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + break; + case 'NTLM': + /* + * ntlm_sasl_client.php + ** Bundled with Permission + ** + ** How to telnet in windows: http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx + ** PROTOCOL Documentation http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication + */ + require_once('ntlm_sasl_client.php'); + $temp = new stdClass(); + $ntlm_client = new ntlm_sasl_client_class; + if(! $ntlm_client->Initialize($temp)){//let's test if every function its available + $this->error = array("error" => $temp->error); + if($this->do_debug >= 1) { + $this->edebug("You need to enable some modules in your php.ini file: " . $this->error["error"] . $this->CRLF); + } + return false; + } + $msg1 = $ntlm_client->TypeMsg1($realm, $workstation);//msg1 + + fputs($this->smtp_conn,"AUTH NTLM " . base64_encode($msg1) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF); + } + return false; + } + + $challange = substr($rply,3);//though 0 based, there is a white space after the 3 digit number....//msg2 + $challange = base64_decode($challange); + $ntlm_res = $ntlm_client->NTLMResponse(substr($challange,24,8),$password); + $msg3 = $ntlm_client->TypeMsg3($ntlm_res,$username,$realm,$workstation);//msg3 + // Send encoded username + fputs($this->smtp_conn, base64_encode($msg3) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Could not authenticate", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF); + } + return false; + } + break; + } + return true; + } + + /** + * Returns true if connected to a server otherwise false + * @access public + * @return bool + */ + public function Connected() { + if(!empty($this->smtp_conn)) { + $sock_status = socket_get_status($this->smtp_conn); + if($sock_status["eof"]) { + // the socket is valid but we are not connected + if($this->do_debug >= 1) { + $this->edebug("SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected"); + } + $this->Close(); + return false; + } + return true; // everything looks good + } + return false; + } + + /** + * Closes the socket and cleans up the state of the class. + * It is not considered good to use this function without + * first trying to use QUIT. + * @access public + * @return void + */ + public function Close() { + $this->error = null; // so there is no confusion + $this->helo_rply = null; + if(!empty($this->smtp_conn)) { + // close the connection and cleanup + fclose($this->smtp_conn); + $this->smtp_conn = 0; + } + } + + ///////////////////////////////////////////////// + // SMTP COMMANDS + ///////////////////////////////////////////////// + + /** + * Issues a data command and sends the msg_data to the server + * finializing the mail transaction. $msg_data is the message + * that is to be send with the headers. Each header needs to be + * on a single line followed by a with the message headers + * and the message body being seperated by and additional . + * + * Implements rfc 821: DATA + * + * SMTP CODE INTERMEDIATE: 354 + * [data] + * . + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 552,554,451,452 + * SMTP CODE FAILURE: 451,554 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @param string $msg_data + * @return bool + */ + public function Data($msg_data) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Data() without being connected"); + return false; + } + + fputs($this->smtp_conn,"DATA" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'); + } + + if($code != 354) { + $this->error = + array("error" => "DATA command not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + + /* the server is ready to accept data! + * according to rfc 821 we should not send more than 1000 + * including the CRLF + * characters on a single line so we will break the data up + * into lines by \r and/or \n then if needed we will break + * each of those into smaller lines to fit within the limit. + * in addition we will be looking for lines that start with + * a period '.' and append and additional period '.' to that + * line. NOTE: this does not count towards limit. + */ + + // normalize the line breaks so we know the explode works + $msg_data = str_replace("\r\n","\n",$msg_data); + $msg_data = str_replace("\r","\n",$msg_data); + $lines = explode("\n",$msg_data); + + /* we need to find a good way to determine is headers are + * in the msg_data or if it is a straight msg body + * currently I am assuming rfc 822 definitions of msg headers + * and if the first field of the first line (':' sperated) + * does not contain a space then it _should_ be a header + * and we can process all lines before a blank "" line as + * headers. + */ + + $field = substr($lines[0],0,strpos($lines[0],":")); + $in_headers = false; + if(!empty($field) && !strstr($field," ")) { + $in_headers = true; + } + + $max_line_length = 998; // used below; set here for ease in change + + while(list(,$line) = @each($lines)) { + $lines_out = null; + if($line == "" && $in_headers) { + $in_headers = false; + } + // ok we need to break this line up into several smaller lines + while(strlen($line) > $max_line_length) { + $pos = strrpos(substr($line,0,$max_line_length)," "); + + // Patch to fix DOS attack + if(!$pos) { + $pos = $max_line_length - 1; + $lines_out[] = substr($line,0,$pos); + $line = substr($line,$pos); + } else { + $lines_out[] = substr($line,0,$pos); + $line = substr($line,$pos + 1); + } + + /* if processing headers add a LWSP-char to the front of new line + * rfc 822 on long msg headers + */ + if($in_headers) { + $line = "\t" . $line; + } + } + $lines_out[] = $line; + + // send the lines to the server + while(list(,$line_out) = @each($lines_out)) { + if(strlen($line_out) > 0) + { + if(substr($line_out, 0, 1) == ".") { + $line_out = "." . $line_out; + } + } + fputs($this->smtp_conn,$line_out . $this->CRLF); + } + } + + // message data has been sent + fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'); + } + + if($code != 250) { + $this->error = + array("error" => "DATA not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + return true; + } + + /** + * Sends the HELO command to the smtp server. + * This makes sure that we and the server are in + * the same known state. + * + * Implements from rfc 821: HELO + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500, 501, 504, 421 + * @access public + * @param string $host + * @return bool + */ + public function Hello($host = '') { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Hello() without being connected"); + return false; + } + + // if hostname for HELO was not specified send default + if(empty($host)) { + // determine appropriate default to send to server + $host = "localhost"; + } + + // Send extended hello first (RFC 2821) + if(!$this->SendHello("EHLO", $host)) { + if(!$this->SendHello("HELO", $host)) { + return false; + } + } + + return true; + } + + /** + * Sends a HELO/EHLO command. + * @access private + * @param string $hello + * @param string $host + * @return bool + */ + private function SendHello($hello, $host) { + fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER: " . $rply . $this->CRLF . '
'); + } + + if($code != 250) { + $this->error = + array("error" => $hello . " not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + + $this->helo_rply = $rply; + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. + * + * Implements rfc 821: MAIL FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,421 + * @access public + * @param string $from + * @return bool + */ + public function Mail($from) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Mail() without being connected"); + return false; + } + + $useVerp = ($this->do_verp ? " XVERP" : ""); + fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'); + } + + if($code != 250) { + $this->error = + array("error" => "MAIL not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + return true; + } + + /** + * Sends the quit command to the server and then closes the socket + * if there is no error or the $close_on_error argument is true. + * + * Implements from rfc 821: QUIT + * + * SMTP CODE SUCCESS: 221 + * SMTP CODE ERROR : 500 + * @access public + * @param bool $close_on_error + * @return bool + */ + public function Quit($close_on_error = true) { + $this->error = null; // so there is no confusion + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Quit() without being connected"); + return false; + } + + // send the quit command to the server + fputs($this->smtp_conn,"quit" . $this->CRLF); + + // get any good-bye messages + $byemsg = $this->get_lines(); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $byemsg . $this->CRLF . '
'); + } + + $rval = true; + $e = null; + + $code = substr($byemsg,0,3); + if($code != 221) { + // use e as a tmp var cause Close will overwrite $this->error + $e = array("error" => "SMTP server rejected quit command", + "smtp_code" => $code, + "smtp_rply" => substr($byemsg,4)); + $rval = false; + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF . '
'); + } + } + + if(empty($e) || $close_on_error) { + $this->Close(); + } + + return $rval; + } + + /** + * Sends the command RCPT to the SMTP server with the TO: argument of $to. + * Returns true if the recipient was accepted false if it was rejected. + * + * Implements from rfc 821: RCPT TO: + * + * SMTP CODE SUCCESS: 250,251 + * SMTP CODE FAILURE: 550,551,552,553,450,451,452 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @param string $to + * @return bool + */ + public function Recipient($to) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Recipient() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'); + } + + if($code != 250 && $code != 251) { + $this->error = + array("error" => "RCPT not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + return true; + } + + /** + * Sends the RSET command to abort and transaction that is + * currently in progress. Returns true if successful false + * otherwise. + * + * Implements rfc 821: RSET + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500,501,504,421 + * @access public + * @return bool + */ + public function Reset() { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Reset() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RSET" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'); + } + + if($code != 250) { + $this->error = + array("error" => "RSET failed", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in and send them an email. + * + * Implements rfc 821: SAML FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @param string $from + * @return bool + */ + public function SendAndMail($from) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called SendAndMail() without being connected"); + return false; + } + + fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'); + } + + if($code != 250) { + $this->error = + array("error" => "SAML not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'); + } + return false; + } + return true; + } + + /** + * This is an optional command for SMTP that this class does not + * support. This method is here to make the RFC821 Definition + * complete for this class and __may__ be implimented in the future + * + * Implements from rfc 821: TURN + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 502 + * SMTP CODE ERROR : 500, 503 + * @access public + * @return bool + */ + public function Turn() { + $this->error = array("error" => "This method, TURN, of the SMTP ". + "is not implemented"); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF . '
'); + } + return false; + } + + /** + * Get the current error + * @access public + * @return array + */ + public function getError() { + return $this->error; + } + + ///////////////////////////////////////////////// + // INTERNAL FUNCTIONS + ///////////////////////////////////////////////// + + /** + * Read in as many lines as possible + * either before eof or socket timeout occurs on the operation. + * With SMTP we can tell if we have more lines to read if the + * 4th character is '-' symbol. If it is a space then we don't + * need to read anything else. + * @access private + * @return string + */ + private function get_lines() { + $data = ""; + $endtime = 0; + /* If for some reason the fp is bad, don't inf loop */ + if (!is_resource($this->smtp_conn)) { + return $data; + } + stream_set_timeout($this->smtp_conn, $this->Timeout); + if ($this->Timelimit > 0) { + $endtime = time() + $this->Timelimit; + } + while(is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { + $str = @fgets($this->smtp_conn,515); + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF . '
'); + $this->edebug("SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF . '
'); + } + $data .= $str; + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF . '
'); + } + // if 4th character is a space, we are done reading, break the loop + if(substr($str,3,1) == " ") { break; } + // Timed-out? Log and break + $info = stream_get_meta_data($this->smtp_conn); + if ($info['timed_out']) { + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): timed-out (" . $this->Timeout . " seconds)
"); + } + break; + } + // Now check if reads took too long + if ($endtime) { + if (time() > $endtime) { + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): timelimit reached (" . $this->Timelimit . " seconds)
"); + } + break; + } + } + } + return $data; + } + +} +?> diff --git a/_incl_data/mails.php b/_incl_data/mails.php index d7e9c88f..a208a856 100644 --- a/_incl_data/mails.php +++ b/_incl_data/mails.php @@ -5,6 +5,7 @@ function mails($to, $message, $subject = ' { require '_incl_data/class/mail/class.phpmailer.php'; $message = mb_convert_encoding($message, 'UTF-8', 'CP1251'); + $subject = mb_convert_encoding($subject, 'UTF-8', 'CP1251'); $mail = new PHPMailer; $mail->IsSMTP(); // Set mailer to use SMTP @@ -17,7 +18,7 @@ function mails($to, $message, $subject = ' $mail->CharSet = 'UTF-8'; $mail->From = 'newcombats@yahoo.com'; - $mail->FromName = ' '; + $mail->FromName = mb_convert_encoding(' ', 'UTF-8', 'CP1251'); $mail->AddAddress($to); // Add a recipient $mail->IsHTML(true); // Set email format to HTML diff --git a/modules_data/location/an/bank.php b/modules_data/location/an/bank.php index 6e335989..8102b9cb 100644 --- a/modules_data/location/an/bank.php +++ b/modules_data/location/an/bank.php @@ -6,7 +6,7 @@ require_once '_incl_data/mails.php'; if ($u->room['file'] == 'an/bank') { $noc = 60; //120 kr = 1 ekr. - $con = 20; //1 . = 30 . + $con = 20; //1 екр. = 30 кр. function getNum($v) { $plid = $v; @@ -46,26 +46,26 @@ if ($u->room['file'] == 'an/bank') { if (isset($_GET['enter']) && !isset($u->bank['id'])) { $bank = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `uid` = "' . $u->info['id'] . '" AND `id` = "' . mysql_real_escape_string((int)$_POST['bank']) . '" LIMIT 1')); if (!isset($bank['id'])) { - $re2 = ' .'; + $re2 = 'Неверный номер счета.'; } elseif ($bank['pass'] != $_POST['pass']) { $pl = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `time` > "' . (time() - 60 * 60) . '" AND `vars` = "bank_bad_pass_' . mysql_real_escape_string($bank['id']) . '" LIMIT 5')); if ($pl[0] >= 3) { - $re2 = ' 1 '; + $re2 = 'Ваш счет был заблокирован на 1 час'; } else { if ($pl[0] == 0) { - $re2 = ' . , '; + $re2 = 'Неверный номер счета или пароль. Если вы трижды введете неверный номер счета или пароль, счет будет заблокирован на час'; } else { - $pp = [0 => '', 1 => '', 2 => '', 3 => '']; - $re2 = ' . ' . (3 - $pl[0]) . ' ' . $pp[3 - $pl[0]] . ', '; + $pp = [0 => 'ок', 1 => 'ка', 2 => 'ки', 3 => 'ки']; + $re2 = 'Неверный номер счета или пароль. У вас осталось ' . (3 - $pl[0]) . ' попыт' . $pp[3 - $pl[0]] . ', в противном случаи счет будет заблокирован на час'; } mysql_query('INSERT INTO `actions` (`uid`,`time`,`city`,`room`,`vars`,`ip`) VALUES ("' . $u->info['id'] . '","' . time() . '","' . $u->info['city'] . '","' . $u->info['room'] . '","bank_bad_pass_' . mysql_real_escape_string($bank['id']) . '","' . mysql_real_escape_string($_SERVER['HTTP_X_REAL_IP']) . '")'); } } else { if ($u->info['allLock'] > time()) { - echo ''; + echo ''; } else { - //! + //вошли! $bank['useNow'] = time() + 12 * 60 * 60; mysql_query('UPDATE `bank` SET `useNow` = "0" WHERE `id` != "' . $bank['id'] . '" AND `uid` = "' . $u->info['id'] . '" AND `useNow`!="0" LIMIT 1'); mysql_query('UPDATE `bank` SET `useNow` = "' . $bank['useNow'] . '" WHERE `id` = "' . $bank['id'] . '" AND `uid` = "' . $u->info['id'] . '" LIMIT 1'); @@ -77,27 +77,27 @@ if ($u->room['file'] == 'an/bank') { //echo $_GET['schet'].'
'; $b_pass = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `uid` = "' . $u->info['id'] . '" AND `id` = "' . mysql_real_escape_string(getNumId($_GET['schet'])) . '" ORDER BY `id` DESC LIMIT 1')); if ($b_pass['repass'] >= time()) { - $re2 = ' '; + $re2 = 'Номера счетов и пароли к ним можно выслать только один раз в сутки'; } else { mysql_query('INSERT INTO `actions` (`uid`,`time`,`city`,`room`,`vars`,`ip`) VALUES ("' . $u->info['id'] . '","' . time() . '","' . $u->info['city'] . '","' . $u->info['room'] . '","bank_res","' . mysql_real_escape_string($_SERVER['HTTP_X_REAL_IP']) . '")'); - $re2 = ' email, '; + $re2 = 'Выслан номер счета и пароль на email, указанный в анкете'; mysql_query('UPDATE `bank` SET `repass` = "' . (time() + 24 * 3600) . '" WHERE `id` = "' . $b_pass['id'] . '" LIMIT 1'); - $subject = ' ' . $u->info['login']; - $message = ' : ' . getNum($b_pass['id']) . '
: ' . $b_pass['pass'] . - '

,
'; + $subject = 'Восстановление пароля от счета в банке персонажа ' . $u->info['login']; + $message = 'Номер счета: ' . getNum($b_pass['id']) . '
Пароль: ' . $b_pass['pass'] . + '

С уважением,
Администрация Бойцовского Клуба'; mails($u->info['mail'], $message, $subject); unset($subject, $message); } } elseif (isset($_GET['open']) && !isset($u->bank['id'])) { if ($_POST['rdn01'] == 2 && ($u->info['level'] >= 8 || $u->info['money4'] < 15)) { - $re2 = ' !'; + $re2 = 'Недостаточно зубов!'; } elseif ($u->info['money'] >= 3 || ($u->info['level'] < 8 && $u->info['money4'] >= 15)) { if ($_POST['pass1'] == '' || $_POST['pass1'] == ' ') { - $re2 = ' !'; + $re2 = 'Вы не указали пароль!'; } elseif ($_POST['pass1'] != $_POST['pass2']) { - $re2 = ' !'; + $re2 = 'Пароли не совпадают!'; } elseif ($u->info['money'] - 3 < 0 && $_POST['rdn01'] != 2) { - $re2 = ' .'; + $re2 = 'У вас недостаточно кр.'; } elseif ($u->info['align'] != 2) { $pass = rand(10000, 91191); $pass = htmlspecialchars($_POST['pass1'], null, 'cp1251'); @@ -110,19 +110,19 @@ if ($u->room['file'] == 'an/bank') { $u->info['money'] -= 3; } $upd = mysql_query('UPDATE `users` SET `money` = "' . $u->info['money'] . '",`money4` = "' . $u->info['money4'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); - $re2 = ' ' . getNum($bank) . ' .
: ' . $pass . '

( " " )'; - $u->addDelo(3, $u->info['id'], ' ' . getNum($bank) . '', time(), $u->info['city'], 'Bank.System', 3, 0, ''); + $re2 = 'Счет №' . getNum($bank) . ' был успешно открыт.
Пароль от счета: ' . $pass . '

(Сменить пароль можно в разделе "Управление счетом" после авторизации)'; + $u->addDelo(3, $u->info['id'], 'Вы успешно открыли счет №' . getNum($bank) . '', time(), $u->info['city'], 'Bank.System', 3, 0, ''); } else { - $re2 = ' .'; + $re2 = 'Банк отказал в получении банковского счета.'; } } else { - $re2 = ' .'; + $re2 = 'Хаосники не могут создавать новые счета в банке.'; } } else { if ($u->info['level'] < 8) { - $re2 = ' 3.00 . ' . $u->zuby(15) . ''; + $re2 = 'Для открытия счета необходимо иметь при себе 3.00 кр. или ' . $u->zuby(15) . ''; } else { - $re2 = ' 3.00 .'; + $re2 = 'Для открытия счета необходимо иметь при себе 3.00 кр.'; } } } elseif (isset($_GET['exit']) && isset($u->bank['id'])) { @@ -137,7 +137,7 @@ if ($u->room['file'] == 'an/bank') { if (isset($u->bank['id'])) { if (isset($_POST['sd4']) && $u->newAct($_POST['sd4'])) { if (isset($_POST['transfer_kredit2']) && $u->info['admin'] > 0) { - // + //перевод екредитов с одного счета на другой $ub = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `id` = "' . mysql_real_escape_string((int)$_POST['num2']) . '" LIMIT 1')); if (isset($ub['id']) && $ub['id'] != $u->bank['id']) { $ut = mysql_fetch_array(mysql_query('SELECT `id`,`level`,`city`,`room`,`login` FROM `users` WHERE `id` = "' . mysql_real_escape_string($ub['uid']) . '" LIMIT 1')); @@ -148,7 +148,7 @@ if ($u->room['file'] == 'an/bank') { $mn += $prc; if ($u->bank['money2'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `bank` SET `money2` = "' . mysql_real_escape_string($u->bank['money2'] - $mn) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { @@ -159,10 +159,10 @@ if ($u->room['file'] == 'an/bank') { mysql_query('UPDATE `users` SET `frg` = `frg` + ' . floor($mn) . ' WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); mysql_query('UPDATE `bank` SET `money2` = "' . mysql_real_escape_string($ub['money2']) . '" WHERE `id` = "' . $ub['id'] . '" LIMIT 1'); - $re2 = ' ' . ($mn - $prc) . ' . ( ' . $prc . ' .) ' . getNum($ub['id']) . ' "' . $ut['login'] . '"'; - $u->addDelo(3, $ut['id'], ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' "' . $u->info['login'] . '", ' . $prc . ' . (: ' . $ub['money1'] . ' ., ' . $ub['money2'] . ' .)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); - $u->addDelo(3, $u->info['id'], ' ' . ($mn - $prc) . ' . ' . getNum($ub['id']) . ' "' . $ut['login'] . '", ' . $prc . ' . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); - $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] ' . $u->bank['id'] . ' ' . $ub['id'] . ' "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' .'; + $re2 = 'Вы удачно перевели ' . ($mn - $prc) . ' екр. (комиссия ' . $prc . ' екр.) на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '"'; + $u->addDelo(3, $ut['id'], 'Получено ' . ($mn - $prc) . ' екр. со счета №' . getNum($u->bank['id']) . ' от персонажа "' . $u->info['login'] . '", комиссия ' . $prc . ' екр. (Итого: ' . $ub['money1'] . ' кр., ' . $ub['money2'] . ' екр.)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); + $u->addDelo(3, $u->info['id'], 'Передано ' . ($mn - $prc) . ' екр. на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '", комиссия ' . $prc . ' екр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); + $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] перевел со своего банковского счета №' . $u->bank['id'] . ' на счет №' . $ub['id'] . ' к персонажу "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' екр.'; $u->addDelo(1, $u->info['id'], $log, time(), $u->info['city'], 'Bank.System', 0, 0, ''); $u->addDelo(1, $ut['id'], $log, time(), $ut['city'], 'Bank.System', 0, 0, ''); if ($ut['id'] != $u->info['id']) { @@ -170,25 +170,25 @@ if ($u->room['file'] == 'an/bank') { if ($u->info['align'] == 50) { $alg = ''; } - $text = '"' . $alg . '[login:' . $u->info['login'] . ']" ' . ($u->info['sex'] == 0 ? "" : "") . ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' ' . getNum($ub['id']) . '.'; + $text = '"' . $alg . '[login:' . $u->info['login'] . ']" перевел' . ($u->info['sex'] == 0 ? "" : "а") . ' вам ' . ($mn - $prc) . ' екр. со своего банковского счета №' . getNum($u->bank['id']) . ' на ваш банковский счет №' . getNum($ub['id']) . '.'; mysql_query("INSERT INTO `chat` (`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`,`typeTime`) VALUES ('" . $ut['city'] . "','" . $ut['room'] . "','','" . $ut['login'] . "','" . $text . "','" . time() . "','12','0','1')"); } } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' екр. на счете'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } elseif (isset($_POST['transfer_kredit']) && $u->info['align'] != 2) { - // + //перевод кредитов с одного счета на другой if ($u->info['level'] >= 4 || $u->info['admin'] > 0) { $ub = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `id` = "' . mysql_real_escape_string((int)$_POST['num']) . '" LIMIT 1')); if (isset($ub['id']) && $ub['id'] != $u->bank['id']) { @@ -200,41 +200,41 @@ if ($u->room['file'] == 'an/bank') { $mn += $prc; if ($u->bank['money1'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1'] - $mn) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] -= $mn; $ub['money1'] += $mn - $prc; mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($ub['money1']) . '" WHERE `id` = "' . $ub['id'] . '" LIMIT 1'); - $re2 = ' ' . ($mn - $prc) . ' . ( ' . $prc . ' .) ' . getNum($ub['id']) . ' "' . $ut['login'] . '"'; - $u->addDelo(3, $ut['id'], ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' "' . $u->info['login'] . '", ' . $prc . ' . (: ' . $ub['money1'] . ' ., ' . $ub['money2'] . ' .)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); - $u->addDelo(3, $u->info['id'], ' ' . ($mn - $prc) . ' . ' . getNum($ub['id']) . ' "' . $ut['login'] . '", ' . $prc . ' . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); - $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] ' . $u->bank['id'] . ' ' . $ub['id'] . ' "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' . ' . $prc . ' . .'; + $re2 = 'Вы удачно перевели ' . ($mn - $prc) . ' кр. (комиссия ' . $prc . ' кр.) на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '"'; + $u->addDelo(3, $ut['id'], 'Получено ' . ($mn - $prc) . ' кр. со счета №' . getNum($u->bank['id']) . ' от персонажа "' . $u->info['login'] . '", комиссия ' . $prc . ' кр. (Итого: ' . $ub['money1'] . ' кр., ' . $ub['money2'] . ' екр.)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); + $u->addDelo(3, $u->info['id'], 'Передано ' . ($mn - $prc) . ' кр. на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '", комиссия ' . $prc . ' кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); + $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] перевел со своего банковского счета №' . $u->bank['id'] . ' на счет №' . $ub['id'] . ' к персонажу "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' кр. Дополнительно снято ' . $prc . ' кр. за услуги банка.'; $u->addDelo(1, $u->info['id'], $log, time(), $u->info['city'], 'Bank.System', 0, 0, ''); $u->addDelo(1, $ut['id'], $log, time(), $ut['city'], 'Bank.System', 0, 0, ''); if ($ut['id'] != $u->info['id']) { - $text = '"[login:' . $u->info['login'] . ']" ' . ($u->info['sex'] == 0 ? "" : "") . ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' ' . getNum($ub['id']) . '.'; + $text = '"[login:' . $u->info['login'] . ']" перевел' . ($u->info['sex'] == 0 ? "" : "а") . ' вам ' . ($mn - $prc) . ' кр. со своего банковского счета №' . getNum($u->bank['id']) . ' на ваш банковский счет №' . getNum($ub['id']) . '.'; mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`,`typeTime`) VALUES (1,'" . $ut['city'] . "','" . $ut['room'] . "','','" . $ut['login'] . "','" . $text . "','" . time() . "','6','0','1')"); } } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' кр. на счете'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } else { - $re2 = ' 4- '; + $re2 = 'Передача кредитов возможна только с 4-го уровня'; } } elseif ($u->info['align'] != 2 && $u->info['haos'] < time() && $u->info['haos'] != 1 && $u->info['align'] != 50 && isset($_POST['convert_kredit']) && 1 == 2) { - // . . + //обменять кр. на екр. if ($u->info['palpro'] > time()) { $mn = ceil((int)($_POST['convert_sum2'] * 100)); $mn = round(($mn / 100), 2); @@ -244,9 +244,9 @@ if ($u->room['file'] == 'an/bank') { $sm_lim = 50; if (isset($sm['id']) && $sm['vals'] + $mne > $sm_lim) { if ($sm['vals'] < $sm_lim) { - $re2 = ' ' . ($sm_lim - $sm['vals']) . ' .. ( ' . round((($sm_lim - $sm['vals']) * $noc), 2) . ' .), ' . $mne . ' ..'; + $re2 = 'На сегодня Вы можете обменять еще на ' . ($sm_lim - $sm['vals']) . ' екр.. (Примерно ' . round((($sm_lim - $sm['vals']) * $noc), 2) . ' кр.), текущий обмен на ' . $mne . ' екр..'; } else { - $re2 = ' . . (' . $sm_lim . ' .)'; + $re2 = 'На сегодня Вы исчерпали свой лимит обмена кр. на екр. (' . $sm_lim . ' екр.)'; } } elseif ($mn > 0 && $mne > 0 && $mn >= round((0.01 * ($noc * 1.03) + 5), 2)) { if ($u->bank['money1'] >= $mn) { @@ -255,109 +255,109 @@ if ($u->room['file'] == 'an/bank') { } else { mysql_query('UPDATE `actions` SET `vals` = "' . ($sm['vals'] + $mne) . '" WHERE `id` = "' . $sm['id'] . '" LIMIT 1'); } - $re2 = ' ' . $mn . ' . ' . $mne . ' .'; + $re2 = 'Вы успешно обменяли ' . $mn . ' кр. на ' . $mne . ' екр.'; $u->bank['money1'] -= $mn; $u->bank['money2'] += $mne; mysql_query('UPDATE `users` SET `catch` = `catch` + "' . round($mne, 2) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1']) . '", `money2` = "' . mysql_real_escape_string($u->bank['money2']) . '" WHERE `id` = "' . mysql_real_escape_string($u->bank['id']) . '" LIMIT 1'); - $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] ' . $mn . ' . ' . $mne . ' ., ' . $u->bank['id'] . '.'; + $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] обменял ' . $mn . ' кр. на ' . $mne . ' екр., Банковский счет №' . $u->bank['id'] . '.'; $u->addDelo(1, $u->info['id'], $log, time(), $u->info['city'], 'Bank.System', 0, 0, ''); - $u->addDelo(3, $u->info['id'], ' ' . ceil((int)($_POST['convert_sum2'] * 100 / 100)) . ' . ' . $mne . ' ., ' . round((ceil((int)($_POST['convert_sum2'] * 100 / 100)) / 100 * 3 + 5), 2) . ' . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $u->addDelo(3, $u->info['id'], 'Вы успешно обменяли ' . ceil((int)($_POST['convert_sum2'] * 100 / 100)) . ' кр. на ' . $mne . ' екр., комиссия ' . round((ceil((int)($_POST['convert_sum2'] * 100 / 100)) / 100 * 3 + 5), 2) . ' кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' кр. на счете'; } } else { - $re2 = ' ' . round((0.01 * ($noc * 1.03) + 5), 2) . ' .'; + $re2 = 'Минимальная сумма для обмена составляет ' . round((0.01 * ($noc * 1.03) + 5), 2) . ' кр.'; } } else { - $re2 = ' .'; + $re2 = 'Вы должны пройти проверку на чистоту у Паладинов или Тарманов.'; } } elseif (isset($_POST['convert_ekredit'])) { - // . . + //обменять екр. на кр. $mn = ceil((int)($_POST['convert_sum'] * 100)); $mn = round(($mn / 100), 2); if ($u->bank['money2'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1'] + ($mn * $con)) . '",`money2` = "' . mysql_real_escape_string($u->bank['money2'] - $mn) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] += $mn * $con; $u->bank['money2'] -= $mn; - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' . ' . ($mn * $con) . ' ., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn * $con), $u->bank['id']); - $re2 = ' ' . $mn . ' . ' . ($mn * $con) . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы обменяли ' . $mn . ' екр. на ' . ($mn * $con) . ' кр., комиссия 0 кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn * $con), $u->bank['id']); + $re2 = 'Вы удачно обменяли ' . $mn . ' екр. на ' . ($mn * $con) . ' кр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' екр. на счете'; } } elseif (isset($_POST['get_kredit'])) { - // + //положить деньги на счет $mn = floor((int)($_POST['get_sum'] * 100)); $mn = round(($mn / 100), 2); if ($u->bank['money1'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `users` SET `money` = "' . mysql_real_escape_string($u->info['money'] + $mn) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] -= $mn; $u->info['money'] += $mn; mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' ., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); - $re2 = ' ' . $mn . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы сняли со счета ' . $mn . ' кр., комиссия 0 кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Вы удачно сняли со счета ' . $mn . ' кр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' кр. на счете'; } } elseif (isset($_POST['add_kredit'])) { - // + //положить деньги на счет $mn = floor((int)($_POST['add_sum'] * 100)); $mn = round(($mn / 100), 2); if ($u->info['money'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `users` SET `money` = "' . mysql_real_escape_string($u->info['money'] - $mn) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] += $mn; $u->info['money'] -= $mn; mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' ., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); - $re2 = ' ' . $mn . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы положили на счет ' . $mn . ' кр., комиссия 0 кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Вы удачно положили на свой счет ' . $mn . ' кр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' .'; + $re2 = 'У вас нет при себе ' . $mn . ' кр.'; } } elseif (isset($_POST['change_psw2'])) { - // + //смена пароля счета $sm = $u->testAction('`uid` = "' . $u->info['id'] . '" AND `vals` = "id=' . $u->bank['id'] . '&new_pass=' . $u->bank['pass'] . '" AND `vars` = "bank_new_pass" AND `time` > "' . (time() - 24 * 60 * 60) . '" LIMIT 1', 1); if ($_POST['new_psw1'] != $_POST['new_psw2']) { - $re2 = ' '; + $re2 = 'Пароли не совпадают'; } elseif (iconv_strlen($_POST['new_psw1']) < 6 || iconv_strlen($_POST['new_psw1']) > 32) { - $re2 = ' 6 32 '; + $re2 = 'Пароль не может быть короче 6 или длинее 32 символов'; } elseif (isset($sm['id'])) { - $re2 = ' '; + $re2 = 'Нельзя менять пароль чаще одного раза в день'; } else { - // + //меняем $upd = mysql_query('UPDATE `bank` SET `pass` = "' . mysql_real_escape_string($_POST['new_psw1']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { $u->addAction(time(), 'bank_new_pass', 'id=' . $u->bank['id'] . '&new_pass=' . $_POST['new_psw1'] . ''); $u->bank['pass'] = $_POST['new_psw1']; - $re2 = ' ' . getNum($u->bank['id']) . '
: ' . $u->bank['pass'] . ''; - $u->addDelo(3, $u->info['id'], ' .', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Пароль от счета №' . getNum($u->bank['id']) . ' был успешно изменен
Новый пароль: ' . $u->bank['pass'] . ''; + $u->addDelo(3, $u->info['id'], 'Был изменен пароль от счета.', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); } else { - $re2 = ' '; + $re2 = 'Вам отказали в смене пароля'; } } } @@ -425,7 +425,7 @@ if ($u->room['file'] == 'an/bank') {
-


+

Банк

@@ -453,8 +453,8 @@ if ($u->room['file'] == 'an/bank') { id="greyText" class="menutop" onclick="location='main.php?loc=2.180.0.236&rnd=';" - title=""> - + title="">Страшилкина + улица @@ -474,7 +474,7 @@ if ($u->room['file'] == 'an/bank') {
- +
@@ -484,12 +484,12 @@ if ($u->room['file'] == 'an/bank') { } if (!isset($u->bank['id'])) { ?> - : + Мы предоставляем следующие услуги:
    -
  1. -
  2. / / -
  3. / -
  4. . +
  5. Открытие счета +
  6. Возможность положить/снять кредиты/еврокредиты со счета +
  7. Перевести кредиты/еврокредиты с одного счета на другой +
  8. Обменный пункт. Обмен еврокредитов на кредиты
- ? : + Хотите открыть свой счет? Услуга платная: @@ -553,13 +553,13 @@ if ($u->room['file'] == 'an/bank') {
- + Управление счетом @@ -588,8 +588,8 @@ if ($u->room['file'] == 'an/bank') { >

- ? email, : + Забыли пароль? Можно его выслать на email, номер счета:
- + - + - +
Номер счета
Пароль
@@ -616,34 +616,34 @@ if ($u->room['file'] == 'an/bank') { .pay td:hover img { filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80); /* IE 5.5+*/ - -moz-opacity: 0.8; /* Mozilla 1.6 */ + -moz-opacity: 0.8; /* Mozilla 1.6 и ниже */ -khtml-opacity: 0.8; /* Konqueror 3.1, Safari 1.1 */ opacity: 0.8; /* CSS3 - Mozilla 1.7b +, Firefox 0.9 +, Safari 1.2+, Opera 9 */ cursor: pointer; } - +
- -

  - : bank['id']); ?> [x]
+

Управление счетом

  + Счёт №: bank['id']); ?> [x]
- + У вас на счете - + - + @@ -652,8 +652,8 @@ if ($u->room['file'] == 'an/bank') { - - + +
:Кредитов: round2($u->bank['money1']); ?>
:Еврокредитов: round2($u->bank['money2']); ?>
:round2($u->info['money']); ?> .При себе наличных:round2($u->info['money']); ?> кр.
@@ -661,8 +661,8 @@ if ($u->room['file'] == 'an/bank') {
! - , . + Внимание! Некоторые услуги банка + платные, о размере взымаемой комиссии написано в соответствующем разделе.
@@ -685,7 +685,7 @@ if ($u->room['file'] == 'an/bank') {
. + height="15"/> Приобретение Екр. онлайн - .: - + @@ -712,12 +712,12 @@ if ($u->room['file'] == 'an/bank') {
- - + Пополнить счет + Сумма - . - + кр. +
@@ -725,34 +725,34 @@ if ($u->room['file'] == 'an/bank') {
- - + Перевести кредиты на другой счет + Сумма - .
- + кр.
+ Номер счета куда перевести кредиты
+ value="Перевести кредиты на другой счет" + onclick="if(Math.round(document.getElementById('vl1')).value==0 || Math.round(document.getElementById('vl2').value)==0) {alert('Укажите сумму и номер счета'); return false;} else {return confirm('Вы хотите перевести со своего счета '+(Math.floor(document.getElementById('vl1').value*100)/100).toFixed(2)+' кр. на счет номер '+Math.floor(document.getElementById('vl2').value)+' ?')}"/>
- 3.00 % , 1.00 - . + Комиссия составляет 3.00 % от суммы, но не менее 1.00 + кр.
- - .
- 1 . = .00 .
- + Обменный пункт + Обменять еврокредиты на кредиты.
+ Курс 1 екр. = .00 кр.
+ Сумма - . + екр. /> + value="Обменять" ).toFixed(2)+' кр. ?');" */ ?> />
@@ -760,17 +760,17 @@ if ($u->room['file'] == 'an/bank') {
- - .
- . = 1.00 .
- + Обменный пункт + Обменять кредиты на еврокредиты.
+ Курс кр. = 1.00 екр.
+ Сумма - . + кр.
- 3.00 % , - 5.00 . - + Комиссия составляет 3.00 % от суммы, а так-же 5.00 кр. +
@@ -780,19 +780,19 @@ if ($u->room['file'] == 'an/bank') {
- - + Перевести еврокредиты на другой счет + Сумма - .
- + екр.
+ Номер счета куда перевести кредиты
+ value="Перевести еврокредиты на другой счет" + onclick="if(Math.round(document.getElementById('vl12')).value==0 || Math.round(document.getElementById('vl22').value)==0) {alert('Укажите сумму и номер счета'); return false;} else {return confirm('Вы хотите перевести со своего счета '+(Math.floor(document.getElementById('vl12').value*100)/100).toFixed(2)+' екр. на счет номер '+Math.floor(document.getElementById('vl22').value)+' ?')}"/>
- 0.00 % , 0.01 . + Комиссия составляет 0.00 % от суммы, но не менее 0.01 екр.
@@ -800,27 +800,27 @@ if ($u->room['file'] == 'an/bank') {
- - email. - email, , , - email. - email. - / , !
+ Настройки + У вас разрешена высылка номера счета и пароля на email. Если вы не уверены в + своем email, или убеждены, что не забудете свой номер счета и пароль к нему, то + можете запретить высылку пароля на email. Это убережет вас от кражи кредитов с + вашего счета в случае взлома вашего email. Но если вы сами забудете свой номер + счета и/или пароль, вам уже никто не поможет!
+ value="Запретить высылку пароля на email"/>
-
+ Сменить пароль
- + - +
Новый пароль
Введите новый пароль повторно
- +
@@ -836,12 +836,12 @@ if ($u->room['file'] == 'an/bank') {
- - + Снять со счета + Сумма - . - + кр. +
@@ -852,33 +852,33 @@ if ($u->room['file'] == 'an/bank') {
- + Курс еврокредита к мировой валюте - + - @@ -889,8 +889,8 @@ if ($u->room['file'] == 'an/bank') { ?> @@ -901,7 +901,7 @@ if ($u->room['file'] == 'an/bank') { @@ -496,8 +496,8 @@ if ($u->room['file'] == 'bank') { id="greyText" class="menutop" onclick="location='main.php?loc=1.180.0.11&rnd=';" - title=""> - + title="">Страшилкина + улица
- Данные на + без учета комиссий
1 . = 1 екр. =
-
-
+
Не удалось получить + информацию
- + Последние операции info['id'] . '" AND `dop` = "' . $u->bank['id'] . '" AND `type` = "3" ORDER BY `time` DESC LIMIT 21'); @@ -925,7 +925,7 @@ if ($u->room['file'] == 'an/bank') {
- \ . + Сумма указанная в окне оповещения и суммы взымаемая\начисляемая могут различаться. room['file'] == 'bank') { $noc = $c['crtoecr'] * 2; //120 kr = 1 ekr. - $con = $c['ecrtocr'] * 2.5; //1 . = 30 . + $con = $c['ecrtocr'] * 2.5; //1 екр. = 30 кр. function getNum($v) { $plid = $v; @@ -46,26 +46,26 @@ if ($u->room['file'] == 'bank') { if (isset($_GET['enter']) && !isset($u->bank['id'])) { $bank = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `uid` = "' . $u->info['id'] . '" AND `id` = "' . mysql_real_escape_string((int)$_POST['bank']) . '" LIMIT 1')); if (!isset($bank['id'])) { - $re2 = ' .'; + $re2 = 'Неверный номер счета.'; } elseif ($bank['pass'] != $_POST['pass']) { $pl = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `time` > "' . (time() - 60 * 60) . '" AND `vars` = "bank_bad_pass_' . mysql_real_escape_string($bank['id']) . '" LIMIT 5')); if ($pl[0] >= 3) { - $re2 = ' 1 '; + $re2 = 'Ваш счет был заблокирован на 1 час'; } else { if ($pl[0] == 0) { - $re2 = ' . , '; + $re2 = 'Неверный номер счета или пароль. Если вы трижды введете неверный номер счета или пароль, счет будет заблокирован на час'; } else { - $pp = [0 => '', 1 => '', 2 => '', 3 => '']; - $re2 = ' . ' . (3 - $pl[0]) . ' ' . $pp[3 - $pl[0]] . ', '; + $pp = [0 => 'ок', 1 => 'ка', 2 => 'ки', 3 => 'ки']; + $re2 = 'Неверный номер счета или пароль. У вас осталось ' . (3 - $pl[0]) . ' попыт' . $pp[3 - $pl[0]] . ', в противном случаи счет будет заблокирован на час'; } mysql_query('INSERT INTO `actions` (`uid`,`time`,`city`,`room`,`vars`,`ip`) VALUES ("' . $u->info['id'] . '","' . time() . '","' . $u->info['city'] . '","' . $u->info['room'] . '","bank_bad_pass_' . mysql_real_escape_string($bank['id']) . '","' . mysql_real_escape_string($_SERVER['HTTP_X_REAL_IP']) . '")'); } } else { if ($u->info['allLock'] > time()) { - echo ''; + echo ''; } else { - //! + //вошли! $bank['useNow'] = time() + 12 * 60 * 60; mysql_query('UPDATE `bank` SET `useNow` = "0" WHERE `id` != "' . $bank['id'] . '" AND `uid` = "' . $u->info['id'] . '" AND `useNow`!="0" LIMIT 1'); mysql_query('UPDATE `bank` SET `useNow` = "' . $bank['useNow'] . '" WHERE `id` = "' . $bank['id'] . '" AND `uid` = "' . $u->info['id'] . '" LIMIT 1'); @@ -76,27 +76,27 @@ if ($u->room['file'] == 'bank') { } elseif (isset($_GET['res'])) { $b_pass = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `uid` = "' . $u->info['id'] . '" AND `id` = "' . mysql_real_escape_string(getNumId($_GET['schet'])) . '" ORDER BY `id` DESC LIMIT 1')); if ($b_pass['repass'] >= time()) { - $re2 = ' '; + $re2 = 'Номера счетов и пароли к ним можно выслать только один раз в сутки'; } else { mysql_query('INSERT INTO `actions` (`uid`,`time`,`city`,`room`,`vars`,`ip`) VALUES ("' . $u->info['id'] . '","' . time() . '","' . $u->info['city'] . '","' . $u->info['room'] . '","bank_res","' . mysql_real_escape_string($_SERVER['HTTP_X_REAL_IP']) . '")'); - $re2 = ' email, '; + $re2 = 'Выслан номер счета и пароль на email, указанный в анкете'; mysql_query('UPDATE `bank` SET `repass` = "' . (time() + 24 * 3600) . '" WHERE `id` = "' . $b_pass['id'] . '" LIMIT 1'); - $subject = ' ' . $u->info['login']; - $message = ' : ' . getNum($b_pass['id']) . '
: ' . $b_pass['pass'] . - '

,
'; + $subject = 'Восстановление пароля от счета в банке персонажа ' . $u->info['login']; + $message = 'Номер счета: ' . getNum($b_pass['id']) . '
Пароль: ' . $b_pass['pass'] . + '

С уважением,
Администрация Бойцовского Клуба'; mails($u->info['mail'], $message, $subject); unset($subject, $message); } } elseif (isset($_GET['open']) && !isset($u->bank['id'])) { if ($_POST['rdn01'] == 2 && ($u->info['level'] >= 8 || $u->info['money4'] < 15)) { - $re2 = ' !'; + $re2 = 'Недостаточно зубов!'; } elseif ($u->info['money'] >= 3 || ($u->info['level'] < 8 && $u->info['money4'] >= 15 && $c['zuby'] == true)) { if ($_POST['pass1'] == '' || $_POST['pass1'] == ' ') { - $re2 = ' !'; + $re2 = 'Вы не указали пароль!'; } elseif ($_POST['pass1'] != $_POST['pass2']) { - $re2 = ' !'; + $re2 = 'Пароли не совпадают!'; } elseif ($u->info['money'] - 3 < 0 && $_POST['rdn01'] != 2) { - $re2 = ' .'; + $re2 = 'У вас недостаточно кр.'; } elseif ($u->info['align'] != 2) { $pass = rand(10000, 91191); $pass = htmlspecialchars($_POST['pass1'], null, 'cp1251'); @@ -109,19 +109,19 @@ if ($u->room['file'] == 'bank') { $u->info['money'] -= 3; } $upd = mysql_query('UPDATE `users` SET `money` = "' . $u->info['money'] . '",`money4` = "' . $u->info['money4'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); - $re2 = ' ' . getNum($bank) . ' .
: ' . $pass . '

( " " )'; - $u->addDelo(3, $u->info['id'], ' ' . getNum($bank) . '', time(), $u->info['city'], 'Bank.System', 3, 0, ''); + $re2 = 'Счет №' . getNum($bank) . ' был успешно открыт.
Пароль от счета: ' . $pass . '

(Сменить пароль можно в разделе "Управление счетом" после авторизации)'; + $u->addDelo(3, $u->info['id'], 'Вы успешно открыли счет №' . getNum($bank) . '', time(), $u->info['city'], 'Bank.System', 3, 0, ''); } else { - $re2 = ' .'; + $re2 = 'Банк отказал в получении банковского счета.'; } } else { - $re2 = ' .'; + $re2 = 'Хаосники не могут создавать новые счета в банке.'; } } else { if ($u->info['level'] < 8 && $c['zuby'] == true) { - $re2 = ' 3.00 . ' . $u->zuby(15) . ''; + $re2 = 'Для открытия счета необходимо иметь при себе 3.00 кр. или ' . $u->zuby(15) . ''; } else { - $re2 = ' 3.00 .'; + $re2 = 'Для открытия счета необходимо иметь при себе 3.00 кр.'; } } } elseif (isset($_GET['exit']) && isset($u->bank['id'])) { @@ -136,7 +136,7 @@ if ($u->room['file'] == 'bank') { if (isset($u->bank['id'])) { if (isset($_POST['sd4']) && $u->newAct($_POST['sd4'])) { if (isset($_POST['transfer_kredit2']) && $u->info['admin'] > 0) { - // + //перевод екредитов с одного счета на другой $ub = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `id` = "' . mysql_real_escape_string((int)$_POST['num2']) . '" LIMIT 1')); if (isset($ub['id']) && $ub['id'] != $u->bank['id']) { $ut = mysql_fetch_array(mysql_query('SELECT `id`,`level`,`city`,`room`,`login` FROM `users` WHERE `id` = "' . mysql_real_escape_string($ub['uid']) . '" LIMIT 1')); @@ -147,7 +147,7 @@ if ($u->room['file'] == 'bank') { $mn += $prc; if ($u->bank['money2'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `bank` SET `money2` = "' . mysql_real_escape_string($u->bank['money2'] - $mn) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { @@ -158,10 +158,10 @@ if ($u->room['file'] == 'bank') { mysql_query('UPDATE `users` SET `frg` = `frg` + ' . floor($mn) . ' WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); mysql_query('UPDATE `bank` SET `money2` = "' . mysql_real_escape_string($ub['money2']) . '" WHERE `id` = "' . $ub['id'] . '" LIMIT 1'); - $re2 = ' ' . ($mn - $prc) . ' . ( ' . $prc . ' .) ' . getNum($ub['id']) . ' "' . $ut['login'] . '"'; - $u->addDelo(3, $ut['id'], ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' "' . $u->info['login'] . '", ' . $prc . ' . (: ' . $ub['money1'] . ' ., ' . $ub['money2'] . ' .)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); - $u->addDelo(3, $u->info['id'], ' ' . ($mn - $prc) . ' . ' . getNum($ub['id']) . ' "' . $ut['login'] . '", ' . $prc . ' . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); - $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] ' . $u->bank['id'] . ' ' . $ub['id'] . ' "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' .'; + $re2 = 'Вы удачно перевели ' . ($mn - $prc) . ' екр. (комиссия ' . $prc . ' екр.) на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '"'; + $u->addDelo(3, $ut['id'], 'Получено ' . ($mn - $prc) . ' екр. со счета №' . getNum($u->bank['id']) . ' от персонажа "' . $u->info['login'] . '", комиссия ' . $prc . ' екр. (Итого: ' . $ub['money1'] . ' кр., ' . $ub['money2'] . ' екр.)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); + $u->addDelo(3, $u->info['id'], 'Передано ' . ($mn - $prc) . ' екр. на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '", комиссия ' . $prc . ' екр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); + $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] перевел со своего банковского счета №' . $u->bank['id'] . ' на счет №' . $ub['id'] . ' к персонажу "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' екр.'; $u->addDelo(1, $u->info['id'], $log, time(), $u->info['city'], 'Bank.System', 0, 0, ''); $u->addDelo(1, $ut['id'], $log, time(), $ut['city'], 'Bank.System', 0, 0, ''); if ($ut['id'] != $u->info['id']) { @@ -169,25 +169,25 @@ if ($u->room['file'] == 'bank') { if ($u->info['align'] == 50) { $alg = ''; } - $text = '"' . $alg . '[login:' . $u->info['login'] . ']" ' . ($u->info['sex'] == 0 ? "" : "") . ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' ' . getNum($ub['id']) . '.'; + $text = '"' . $alg . '[login:' . $u->info['login'] . ']" перевел' . ($u->info['sex'] == 0 ? "" : "а") . ' вам ' . ($mn - $prc) . ' екр. со своего банковского счета №' . getNum($u->bank['id']) . ' на ваш банковский счет №' . getNum($ub['id']) . '.'; mysql_query("INSERT INTO `chat` (`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`,`typeTime`) VALUES ('" . $ut['city'] . "','" . $ut['room'] . "','','" . $ut['login'] . "','" . $text . "','" . time() . "','12','0','1')"); } } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' екр. на счете'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } elseif (isset($_POST['transfer_kredit']) && $u->info['align'] != 2) { - // + //перевод кредитов с одного счета на другой if ($u->info['level'] >= 4 || $u->info['admin'] > 0) { $ub = mysql_fetch_array(mysql_query('SELECT * FROM `bank` WHERE `id` = "' . mysql_real_escape_string((int)$_POST['num']) . '" LIMIT 1')); if (isset($ub['id']) && $ub['id'] != $u->bank['id']) { @@ -199,41 +199,41 @@ if ($u->room['file'] == 'bank') { $mn += $prc; if ($u->bank['money1'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1'] - $mn) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] -= $mn; $ub['money1'] += $mn - $prc; mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($ub['money1']) . '" WHERE `id` = "' . $ub['id'] . '" LIMIT 1'); - $re2 = ' ' . ($mn - $prc) . ' . ( ' . $prc . ' .) ' . getNum($ub['id']) . ' "' . $ut['login'] . '"'; - $u->addDelo(3, $ut['id'], ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' "' . $u->info['login'] . '", ' . $prc . ' . (: ' . $ub['money1'] . ' ., ' . $ub['money2'] . ' .)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); - $u->addDelo(3, $u->info['id'], ' ' . ($mn - $prc) . ' . ' . getNum($ub['id']) . ' "' . $ut['login'] . '", ' . $prc . ' . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); - $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] ' . $u->bank['id'] . ' ' . $ub['id'] . ' "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' . ' . $prc . ' . .'; + $re2 = 'Вы удачно перевели ' . ($mn - $prc) . ' кр. (комиссия ' . $prc . ' кр.) на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '"'; + $u->addDelo(3, $ut['id'], 'Получено ' . ($mn - $prc) . ' кр. со счета №' . getNum($u->bank['id']) . ' от персонажа "' . $u->info['login'] . '", комиссия ' . $prc . ' кр. (Итого: ' . $ub['money1'] . ' кр., ' . $ub['money2'] . ' екр.)', time(), $ut['city'], 'Bank.System', mysql_real_escape_string($mn - $prc), 0, $ub['id']); + $u->addDelo(3, $u->info['id'], 'Передано ' . ($mn - $prc) . ' кр. на счет №' . getNum($ub['id']) . ' персонажу "' . $ut['login'] . '", комиссия ' . $prc . ' кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn), $u->bank['id']); + $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] перевел со своего банковского счета №' . $u->bank['id'] . ' на счет №' . $ub['id'] . ' к персонажу "' . $ut['login'] . '" [' . $ut['level'] . '] ' . ($mn - $prc) . ' кр. Дополнительно снято ' . $prc . ' кр. за услуги банка.'; $u->addDelo(1, $u->info['id'], $log, time(), $u->info['city'], 'Bank.System', 0, 0, ''); $u->addDelo(1, $ut['id'], $log, time(), $ut['city'], 'Bank.System', 0, 0, ''); if ($ut['id'] != $u->info['id']) { - $text = '"[login:' . $u->info['login'] . ']" ' . ($u->info['sex'] == 0 ? "" : "") . ' ' . ($mn - $prc) . ' . ' . getNum($u->bank['id']) . ' ' . getNum($ub['id']) . '.'; + $text = '"[login:' . $u->info['login'] . ']" перевел' . ($u->info['sex'] == 0 ? "" : "а") . ' вам ' . ($mn - $prc) . ' кр. со своего банковского счета №' . getNum($u->bank['id']) . ' на ваш банковский счет №' . getNum($ub['id']) . '.'; mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`,`typeTime`) VALUES (1,'" . $ut['city'] . "','" . $ut['room'] . "','','" . $ut['login'] . "','" . $text . "','" . time() . "','6','0','1')"); } } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' кр. на счете'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } else { - $re2 = ' '; + $re2 = 'Нельзя перевести кредиты на этот счет'; } } else { - $re2 = ' 4- '; + $re2 = 'Передача кредитов возможна только с 4-го уровня'; } } elseif ($u->info['align'] != 2 && $u->info['haos'] < time() && $u->info['haos'] != 1 && $u->info['align'] != 50 && isset($_POST['convert_kredit']) && $c['crtoecr'] > 0) { - // . . + //обменять кр. на екр. if ($u->info['palpro'] > time()) { $mn = ceil((int)($_POST['convert_sum2'] * 100)); $mn = round(($mn / 100), 2); @@ -243,9 +243,9 @@ if ($u->room['file'] == 'bank') { $sm_lim = 100; if (isset($sm['id']) && $sm['vals'] + $mne > $sm_lim) { if ($sm['vals'] < $sm_lim) { - $re2 = ' ' . ($sm_lim - $sm['vals']) . ' .. ( ' . round((($sm_lim - $sm['vals']) * $noc), 2) . ' .), ' . $mne . ' ..'; + $re2 = 'На сегодня Вы можете обменять еще на ' . ($sm_lim - $sm['vals']) . ' екр.. (Примерно ' . round((($sm_lim - $sm['vals']) * $noc), 2) . ' кр.), текущий обмен на ' . $mne . ' екр..'; } else { - $re2 = ' . . (' . $sm_lim . ' .)'; + $re2 = 'На сегодня Вы исчерпали свой лимит обмена кр. на екр. (' . $sm_lim . ' екр.)'; } } elseif ($mn > 0 && $mne > 0 && $mn >= round((0.01 * ($noc * 1.03) + 5), 2)) { if ($u->bank['money1'] >= $mn) { @@ -254,153 +254,153 @@ if ($u->room['file'] == 'bank') { } else { mysql_query('UPDATE `actions` SET `vals` = "' . ($sm['vals'] + $mne) . '" WHERE `id` = "' . $sm['id'] . '" LIMIT 1'); } - $re2 = ' ' . $mn . ' . ' . $mne . ' .'; + $re2 = 'Вы успешно обменяли ' . $mn . ' кр. на ' . $mne . ' екр.'; $u->bank['money1'] -= $mn; $u->bank['money2'] += $mne; mysql_query('UPDATE `users` SET `catch` = `catch` + "' . round($mne, 2) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1']) . '", `money2` = "' . mysql_real_escape_string($u->bank['money2']) . '",`shara` = `shara` + "' . mysql_real_escape_string($mne) . '" WHERE `id` = "' . mysql_real_escape_string($u->bank['id']) . '" LIMIT 1'); - $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] ' . $mn . ' . ' . $mne . ' ., ' . $u->bank['id'] . '.'; + $log = '"' . $u->info['login'] . '" [' . $u->info['level'] . '] обменял ' . $mn . ' кр. на ' . $mne . ' екр., Банковский счет №' . $u->bank['id'] . '.'; $u->addDelo(1, $u->info['id'], $log, time(), $u->info['city'], 'Bank.System', 0, 0, ''); - $u->addDelo(3, $u->info['id'], ' ' . ceil((int)($_POST['convert_sum2'] * 100 / 100)) . ' . ' . $mne . ' ., ' . round((ceil((int)($_POST['convert_sum2'] * 100 / 100)) / 100 * 3 + 5), 2) . ' . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $u->addDelo(3, $u->info['id'], 'Вы успешно обменяли ' . ceil((int)($_POST['convert_sum2'] * 100 / 100)) . ' кр. на ' . $mne . ' екр., комиссия ' . round((ceil((int)($_POST['convert_sum2'] * 100 / 100)) / 100 * 3 + 5), 2) . ' кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' кр. на счете'; } } else { - $re2 = ' ' . round((0.01 * ($noc * 1.03) + 5), 2) . ' .'; + $re2 = 'Минимальная сумма для обмена составляет ' . round((0.01 * ($noc * 1.03) + 5), 2) . ' кр.'; } } else { - $re2 = ' .'; + $re2 = 'Вы должны пройти проверку на чистоту у Паладинов или Тарманов.'; } } elseif (isset($_POST['convert_ekredit'])) { - // . . + //обменять екр. на кр. $mn = ceil((int)($_POST['convert_sum'] * 100)); $mn = round(($mn / 100), 2); if ($u->bank['money2'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' '; + $re2 = 'Неверно указана сумма'; } else { $upd = mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1'] + ($mn * $con)) . '",`money2` = "' . mysql_real_escape_string($u->bank['money2'] - $mn) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] += $mn * $con; $u->bank['money2'] -= $mn; - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' . ' . ($mn * $con) . ' ., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn * $con), $u->bank['id']); - $re2 = ' ' . $mn . ' . ' . ($mn * $con) . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы обменяли ' . $mn . ' екр. на ' . ($mn * $con) . ' кр., комиссия 0 кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, mysql_real_escape_string($mn * $con), $u->bank['id']); + $re2 = 'Вы удачно обменяли ' . $mn . ' екр. на ' . ($mn * $con) . ' кр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' екр. на счете'; } } elseif (isset($_POST['get_kredit'])) { - // + //положить деньги на счет $mn = floor((int)($_POST['get_sum'] * 100)); $mn = round(($mn / 100), 2); if ($u->bank['money1'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' ( ' . ((int)$_POST['get_sum']) . ' .)'; + $re2 = 'Неверно указана сумма (Снять ' . ((int)$_POST['get_sum']) . ' кр.)'; } else { $upd = mysql_query('UPDATE `users` SET `money` = "' . mysql_real_escape_string($u->info['money'] + $mn) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] -= $mn; $u->info['money'] += $mn; mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' ., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); - $re2 = ' ' . $mn . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы сняли со счета ' . $mn . ' кр., комиссия 0 кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Вы удачно сняли со счета ' . $mn . ' кр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' кр. на счете'; } } elseif (isset($_POST['get_ekredit'])) { - // + //положить деньги на счет $mn = floor((int)($_POST['get_esum'] * 100)); $mn = round(($mn / 100), 2); if ($u->bank['money2'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' ( ' . ((int)$_POST['get_esum']) . ' .)'; + $re2 = 'Неверно указана сумма (Снять ' . ((int)$_POST['get_esum']) . ' Екр.)'; } else { $upd = mysql_query('UPDATE `users` SET `money2` = "' . mysql_real_escape_string($u->info['money2'] + $mn) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money2'] -= $mn; $u->info['money2'] += $mn; mysql_query('UPDATE `bank` SET `money2` = "' . mysql_real_escape_string($u->bank['money2']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' ., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); - $re2 = ' ' . $mn . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы сняли со счета ' . $mn . ' Екр., комиссия 0 Екр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Вы удачно сняли со счета ' . $mn . ' Екр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' . '; + $re2 = 'У вас нет ' . $mn . ' Екр. на счете'; } } elseif (isset($_POST['add_ekredit'])) { - // + //положить деньги на счет $mn = floor((int)($_POST['add_esum'] * 100)); $mn = round(($mn / 100), 2); if ($u->info['money2'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' ( )'; + $re2 = 'Неверно указана сумма (Пополнение счета)'; } else { $upd = mysql_query('UPDATE `users` SET `money2` = "' . mysql_real_escape_string($u->info['money2'] - $mn) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money2'] += $mn; $u->info['money2'] -= $mn; mysql_query('UPDATE `bank` SET `money2` = "' . mysql_real_escape_string($u->bank['money2']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' E., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); - $re2 = ' ' . $mn . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы положили на счет ' . $mn . ' Eкр., комиссия 0 Екр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Вы удачно положили на свой счет ' . $mn . ' Екр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' .'; + $re2 = 'У вас нет при себе ' . $mn . ' Екр.'; } } elseif (isset($_POST['add_kredit'])) { - // + //положить деньги на счет $mn = floor((int)($_POST['add_sum'] * 100)); $mn = round(($mn / 100), 2); if ($u->info['money'] >= $mn) { if ($mn < 0.01 || $mn > 1000000000) { - $re2 = ' ( )'; + $re2 = 'Неверно указана сумма (Пополнение счета)'; } else { $upd = mysql_query('UPDATE `users` SET `money` = "' . mysql_real_escape_string($u->info['money'] - $mn) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if ($upd) { $u->bank['money1'] += $mn; $u->info['money'] -= $mn; mysql_query('UPDATE `bank` SET `money1` = "' . mysql_real_escape_string($u->bank['money1']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); - $u->addDelo(3, $u->info['id'], ' ' . $mn . ' ., 0 . (: ' . $u->bank['money1'] . ' ., ' . $u->bank['money2'] . ' .)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); - $re2 = ' ' . $mn . ' .'; + $u->addDelo(3, $u->info['id'], 'Вы положили на счет ' . $mn . ' кр., комиссия 0 кр. (Итого: ' . $u->bank['money1'] . ' кр., ' . $u->bank['money2'] . ' екр.)', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Вы удачно положили на свой счет ' . $mn . ' кр.'; } else { - $re2 = ' '; + $re2 = 'Не удалось выполнить операцию'; } } } else { - $re2 = ' ' . $mn . ' .'; + $re2 = 'У вас нет при себе ' . $mn . ' кр.'; } } elseif (isset($_POST['change_psw2'])) { - // + //смена пароля счета $sm = $u->testAction('`uid` = "' . $u->info['id'] . '" AND `vals` = "id=' . $u->bank['id'] . '&new_pass=' . $u->bank['pass'] . '" AND `vars` = "bank_new_pass" AND `time` > "' . (time() - 24 * 60 * 60) . '" LIMIT 1', 1); if ($_POST['new_psw1'] != $_POST['new_psw2']) { - $re2 = ' '; + $re2 = 'Пароли не совпадают'; } elseif (iconv_strlen($_POST['new_psw1']) < 6 || iconv_strlen($_POST['new_psw1']) > 32) { - $re2 = ' 6 32 '; + $re2 = 'Пароль не может быть короче 6 или длинее 32 символов'; } elseif (isset($sm['id'])) { - $re2 = ' '; + $re2 = 'Нельзя менять пароль чаще одного раза в день'; } else { - // + //меняем $upd = mysql_query('UPDATE `bank` SET `pass` = "' . mysql_real_escape_string($_POST['new_psw1']) . '" WHERE `id` = "' . $u->bank['id'] . '" LIMIT 1'); if ($upd) { $u->addAction(time(), 'bank_new_pass', 'id=' . $u->bank['id'] . '&new_pass=' . $_POST['new_psw1'] . ''); $u->bank['pass'] = $_POST['new_psw1']; - $re2 = ' ' . getNum($u->bank['id']) . '
: ' . $u->bank['pass'] . ''; - $u->addDelo(3, $u->info['id'], ' .', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); + $re2 = 'Пароль от счета №' . getNum($u->bank['id']) . ' был успешно изменен
Новый пароль: ' . $u->bank['pass'] . ''; + $u->addDelo(3, $u->info['id'], 'Был изменен пароль от счета.', time(), $u->info['city'], 'Bank.System', 0, 0, $u->bank['id']); } else { - $re2 = ' '; + $re2 = 'Вам отказали в смене пароля'; } } } @@ -468,7 +468,7 @@ if ($u->room['file'] == 'bank') {
-


+

Банк

@@ -517,7 +517,7 @@ if ($u->room['file'] == 'bank') {
- +
@@ -527,12 +527,12 @@ if ($u->room['file'] == 'bank') { } if (!isset($u->bank['id'])) { ?> - : + Мы предоставляем следующие услуги:
    -
  1. -
  2. / / -
  3. / -
  4. . +
  5. Открытие счета +
  6. Возможность положить/снять кредиты/еврокредиты со счета +
  7. Перевести кредиты/еврокредиты с одного счета на другой +
  8. Обменный пункт. Обмен еврокредитов на кредиты
- ? : + Хотите открыть свой счет? Услуга платная: @@ -596,13 +596,13 @@ if ($u->room['file'] == 'bank') {
- + Управление счетом @@ -631,8 +631,8 @@ if ($u->room['file'] == 'bank') { >

- ? email, : + Забыли пароль? Можно его выслать на email, номер счета:
- + - + - +
Номер счета
Пароль
@@ -659,34 +659,34 @@ if ($u->room['file'] == 'bank') { .pay td:hover img { filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80); /* IE 5.5+*/ - -moz-opacity: 0.8; /* Mozilla 1.6 */ + -moz-opacity: 0.8; /* Mozilla 1.6 и ниже */ -khtml-opacity: 0.8; /* Konqueror 3.1, Safari 1.1 */ opacity: 0.8; /* CSS3 - Mozilla 1.7b +, Firefox 0.9 +, Safari 1.2+, Opera 9 */ cursor: pointer; } - +
- -

  - : bank['id']); ?> [x]
+

Управление счетом

  + Счёт №: bank['id']); ?> [x]
- + У вас на счете - + - + @@ -695,12 +695,12 @@ if ($u->room['file'] == 'bank') { - - + + - - + +
:Кредитов: round2($u->bank['money1']); ?>
:Еврокредитов: round2($u->bank['money2']); ?>
:round2($u->info['money']); ?> .При себе наличных:round2($u->info['money']); ?> кр.
:round2($u->info['money2']); ?> .При себе наличных:round2($u->info['money2']); ?> Екр.
@@ -709,8 +709,8 @@ if ($u->room['file'] == 'bank') {
! - , . + Внимание! Некоторые услуги банка + платные, о размере взымаемой комиссии написано в соответствующем разделе.
@@ -731,18 +731,18 @@ if ($u->room['file'] == 'bank') {
- - + Пополнить счет + Сумма - . - + кр. +
- + Сумма - . - + Екр. +
@@ -750,34 +750,34 @@ if ($u->room['file'] == 'bank') {
- - + Перевести кредиты на другой счет + Сумма - .
- + кр.
+ Номер счета куда перевести кредиты
+ value="Перевести кредиты на другой счет" + onclick="if(Math.round(document.getElementById('vl1')).value==0 || Math.round(document.getElementById('vl2').value)==0) {alert('Укажите сумму и номер счета'); return false;} else {return confirm('Вы хотите перевести со своего счета '+(Math.floor(document.getElementById('vl1').value*100)/100).toFixed(2)+' кр. на счет номер '+Math.floor(document.getElementById('vl2').value)+' ?')}"/>
- 3.00 % , 1.00 - . + Комиссия составляет 3.00 % от суммы, но не менее 1.00 + кр.
- - .
- 1 . = .00 .
- + Обменный пункт + Обменять еврокредиты на кредиты.
+ Курс 1 екр. = .00 кр.
+ Сумма - . + екр. /> + value="Обменять" ).toFixed(2)+' кр. ?');" */ ?> />
@@ -785,17 +785,17 @@ if ($u->room['file'] == 'bank') {
- - .
- . = 1.00 .
- + Обменный пункт + Обменять кредиты на еврокредиты.
+ Курс кр. = 1.00 екр.
+ Сумма - . + кр.
- 3.00 % , - 5.00 . - + Комиссия составляет 3.00 % от суммы, а так-же 5.00 кр. +
@@ -805,19 +805,19 @@ if ($u->room['file'] == 'bank') {
- - + Перевести еврокредиты на другой счет + Сумма - .
- + екр.
+ Номер счета куда перевести кредиты
+ value="Перевести еврокредиты на другой счет" + onclick="if(Math.round(document.getElementById('vl12')).value==0 || Math.round(document.getElementById('vl22').value)==0) {alert('Укажите сумму и номер счета'); return false;} else {return confirm('Вы хотите перевести со своего счета '+(Math.floor(document.getElementById('vl12').value*100)/100).toFixed(2)+' екр. на счет номер '+Math.floor(document.getElementById('vl22').value)+' ?')}"/>
- 0.00 % , 0.01 . + Комиссия составляет 0.00 % от суммы, но не менее 0.01 екр.
@@ -825,27 +825,27 @@ if ($u->room['file'] == 'bank') {
- - email. - email, , , - email. - email. - / , !
+ Настройки + У вас разрешена высылка номера счета и пароля на email. Если вы не уверены в + своем email, или убеждены, что не забудете свой номер счета и пароль к нему, то + можете запретить высылку пароля на email. Это убережет вас от кражи кредитов с + вашего счета в случае взлома вашего email. Но если вы сами забудете свой номер + счета и/или пароль, вам уже никто не поможет!
+ value="Запретить высылку пароля на email"/>
-
+ Сменить пароль
- + - +
Новый пароль
Введите новый пароль повторно
- +
@@ -861,18 +861,18 @@ if ($u->room['file'] == 'bank') {
- - + Снять со счета + Сумма - . - + кр. +
- + Сумма - E. - + Eкр. +
@@ -883,33 +883,33 @@ if ($u->room['file'] == 'bank') {
- + Курс еврокредита к мировой валюте - + - @@ -921,25 +921,25 @@ if ($u->room['file'] == 'bank') { @@ -950,7 +950,7 @@ if ($u->room['file'] == 'bank') {
- Данные на + без учета комиссий
1 . = 1 екр. =
10UAH = 1 -
+ Еврокредит
0.35USD = 1 -
+ Еврокредит
20RUB = 1 -
+ Еврокредит
0.29EUR = 1 -
+ Еврокредит
- + Последние операции info['id'] . '" AND `dop` = "' . $u->bank['id'] . '" AND `type` = "3" ORDER BY `time` DESC LIMIT 21'); @@ -974,7 +974,7 @@ if ($u->room['file'] == 'bank') {
- \ . + Сумма указанная в окне оповещения и суммы взымаемая\начисляемая могут различаться. '', 1 => 'angel', 2 => '', 3 => 'administration', 4 => '', 5 => '', 6 => '', 7 => '', 8 => '', 9 => '', 10 => '', 11 => '', 12 => ' ', 13 => '', 14 => '', 15 => '', 16 => '']; + $nologin = [0 => 'ангел', 1 => 'angel', 2 => 'администрация', 3 => 'administration', 4 => 'Комментатор', 5 => 'Мироздатель', 6 => 'Мусорщик', 7 => 'Падальщик', 8 => 'Повелитель', 9 => 'Архивариус', 10 => 'Пересмешник', 11 => 'Волынщик', 12 => 'Лорд Разрушитель', 13 => 'Милосердие', 14 => 'Справедливость', 15 => 'Искушение', 16 => 'Вознесение']; $i = 0; while ($i < count($nologin)) { if (preg_match("/" . $nologin[$i] . "/i", $str_u)) { - $error = ', , .'; + $error = 'Выберите, пожалуйста, другой ник.'; $i = count($nologin); } $i++; } - $sr = '_-1234567890'; $str_u = str_replace(' ', ' ', $str_u); - // 4 20 + //Логин от 4 до 20 символов if (strlen($str_u) > 20) { - $error = ' 20 .'; - $error = $error . '
: , , xalop.
: )))), kol)=-/.'; + $error = 'Логин должен содержать не более 20 символов.'; + $error = $error . '
Пример правильного никнейма: Петя Убиватор, Коля, xalop.
Пример неправильного никнейма: )))), kolя)=-/.'; } if (strlen($str_u) < 4) { - $error = ' 4 .'; - $error = $error . '
: , , xalop.
: )))), kol)=-/.'; + $error = 'Логин должен содержать не менее 4 символов.'; + $error = $error . '
Пример правильного никнейма: Петя Убиватор, Коля, xalop.
Пример неправильного никнейма: )))), kolя)=-/.'; } - // + //Один алфавит $er = en_ru($str_u); - if ($er == true) { - $error = ' . .'; - $error = $error . '
: , , xalop.
: )))), kol)=-/.'; + if ($er) { + $error = 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.'; + $error = $error . '
Пример правильного никнейма: Петя Убиватор, Коля, xalop.
Пример неправильного никнейма: )))), kolя)=-/.'; } - // - if (strpos($sr, $str_u)) { - $error = ' .'; - $error = $error . '
: , , xalop.
: )))), kol)=-/.'; - } - - // - $log = mysql_fetch_array(mysql_query('SELECT `id` from `users` where `login`="' . mysql_real_escape_string($str_u) . '" LIMIT 1')); - $log2 = mysql_fetch_array(mysql_query('SELECT `id` from `lastNames` where `login`="' . mysql_real_escape_string($str_u) . '" LIMIT 1')); - if (isset($log['id']) || isset($log2['id'])) { - $error = ' ' . $str_u . ' , .'; - } - // + //Разделители if (substr_count($str_u, ' ') + substr_count($str_u, '-') + substr_count($str_u, '_') > 2) { - $error = ' (, , ).'; - $error = $error . '
: , , xalop.
: )))), kol)=-/.'; + $error = 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).'; + $error = $error . '
Пример правильного никнейма: Петя Убиватор, Коля, xalop.
Пример неправильного никнейма: )))), kolя)=-/.'; + } + //Персонажи в базе + $q = mysql_query('SELECT `id` from `users` where `login`="' . mysql_real_escape_string($str_u) . '" LIMIT 1'); + if ($q) { + $log = mysql_fetch_array($q); + unset($q); + } + $q = mysql_query('SELECT `id` from `lastnames` where `login`="' . mysql_real_escape_string($str_u) . '" LIMIT 1'); + if ($q) { + $log2 = mysql_fetch_array($q); + unset($q); + } + if (isset($log['id']) || isset($log2['id'])) { + $error = 'Логин ' . $str_u . ' уже занят, выберите другой.'; } - } - if ($id == 2 && !empty($str_u)) // + if ($id == 2 && !empty($str_u)) //проверка емаила { if (strlen($str_u) < 6 || strlen($str_u) > 50) { - $error = 'E-mail 6- 50-.'; + $error = 'E-mail не может быть короче 6-х символов и длинее 50-ти.'; } else { $testEREm = mysql_fetch_array(mysql_query('SELECT `mail` FROM `users` WHERE `mail` LIKE "' . $str_u . '" LIMIT 1')); $emails = mysql_fetch_array(mysql_query('SELECT * FROM `ban_email` WHERE `email` LIKE "' . $str_u . '" LIMIT 1')); if (isset($testEREm['mail'])) { - $error = 'E-mail .'; + $error = 'E-mail уже занят.'; } if (isset($emails['email'])) { - $error = 'E-mail .'; + $error = 'E-mail заблокирован свяжитесь с Администрацией.'; } $x = 1; $i = 1; - $tx = '
:
'; + $tx = '
Возможно использовать только сервисы почты:
'; $sp = mysql_query('SELECT * FROM `trust_email`'); while ($pl = mysql_fetch_array($sp)) { $emailtest = $pl['email']; @@ -134,12 +142,12 @@ function error_check($id, $str_u, $name = 0) $x++; } if ($i == $x) { - $error = ' .' . $tx; + $error = 'Данный почтовый сервис использовать нельзя.' . $tx; } } if (!preg_match('#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$#si', $str_u)) { - $error = ' E-mail.
'; + $error = 'Вы указали явно ошибочный E-mail.
'; } if ($error != '') { $gd[4] = $error; @@ -149,50 +157,47 @@ function error_check($id, $str_u, $name = 0) } } - if ($id == 3 && !empty($str_u) && !empty($name)) // str_u -> mail name -> nickname + if ($id == 3 && !empty($str_u) && !empty($name)) //отсылка емаила при удачном емаиле str_u -> mail name -> nickname { $code = rand(10000000, 99999999); - mysql_query(sprintf("insert into secure_code (email, code, time) values (%s, %d, unix_timestamp())", $str_u, $code)); - $title = ' - ' . $name; - $txt = ' : ' . $code; - mails($str_u, $txt, $title); + mysql_query('INSERT INTO `secure_code`(`email`, `code`, `time`) VALUES ("' . $str_u . '","' . $code . '","' . time() . '");'); + mails($str_u, 'Секретный Код: ' . $code, 'Секретный Код - Новый Бойцовский Клуб ' . $name); } - if ($id == 4 && !empty($str_u) && !empty($name)) // str_u -> name -> email + if ($id == 4 && !empty($str_u) && !empty($name)) //проверка кода безопасности str_u -> введенный код name -> email { - $testcode = mysql_fetch_array(mysql_query('SELECT * FROM `secure_code` WHERE `email` = "' . $name . '" ORDER BY `secure_code`.`time` DESC LIMIT 1')); - if ($testcode['code'] <> $str_u) { - $error = ' ( )'; + $testcode = mysql_fetch_array(mysql_query('SELECT code FROM `secure_code` WHERE `email` = "' . $name . '" ORDER BY id DESC LIMIT 1')); + if ($testcode['code'] != $str_u) { + $error = 'Неверный код безопасности (Проверте пробелы и сам код в последнем емеиле)'; } } - if ($id == 5 && !empty($str_u) && !empty($name)) // str_u -> p1 name -> p2 + if ($id == 5 && !empty($str_u) && !empty($name)) //проверка пароля str_u -> p1 код name -> p2 { if (strlen($str_u) < 8 || strlen($str_u) > 30) { - $error = ' 8 30 .'; - $error = $error . '
: Parol228, Kotik111, Pswerd112.
: parol228, kotik.'; + $error = 'Длина пароля не может быть меньше 8 символов или более 30 символов.'; + $error = $error . '
Пример правильного пароля: Parol228, Kotik111, Pswerd112.
Пример неправильного пароля: parol228, kotik.'; } if ($str_u != $name) { - $error = ' , . , .'; - $error = $error . '
: Parol228, Kotik111, Pswerd112.
: parol228, kotik.'; + $error = 'В анкете пароль нужно ввести дважды, для проверки. Во второй раз вы его ввели неверно, будьте внимательнее.'; + $error = $error . '
Пример правильного пароля: Parol228, Kotik111, Pswerd112.
Пример неправильного пароля: parol228, kotik.'; } - if (!preg_match('/[a-z-]+/', $str_u)) { - $error = ' ../a..z.'; - $error = $error . '
: Parol228, Kotik111, Pswerd112.
: parol228, kotik.'; - } elseif (!preg_match('/[A-Z-]+/', $str_u)) { - $error = ' ../A..Z .'; - $error = $error . '
: Parol228, Kotik111, Pswerd112.
: parol228, kotik.'; + if (!preg_match('/[a-zа-я]+/', $str_u)) { + $error = 'Пароль не содержит букв нижнего регитра а..я/a..z.'; + $error = $error . '
Пример правильного пароля: Parol228, Kotik111, Pswerd112.
Пример неправильного пароля: parol228, kotik.'; + } elseif (!preg_match('/[A-ZА-Я]+/', $str_u)) { + $error = 'Пароль не содержит букв верхнего регитра А..Я/A..Z .'; + $error = $error . '
Пример правильного пароля: Parol228, Kotik111, Pswerd112.
Пример неправильного пароля: parol228, kotik.'; } else { if (!preg_match('/[0-9]+/', $str_u)) { - $error = ' .'; - $error = $error . '
: Parol228, Kotik111, Pswerd112.
: parol228, kotik.'; + $error = 'Пароль не содержит цифр.'; + $error = $error . '
Пример правильного пароля: Parol228, Kotik111, Pswerd112.
Пример неправильного пароля: parol228, kotik.'; } - } } //*************************************************** - return $error; + return $error ? '

' . $error . '

' : ''; } if ($_SERVER['HTTP_USER_AGENT'] != '' && @@ -204,23 +209,23 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && - - + Регистрация - создай персонажа в игре Новый «Бойцовский клуб» + content="Пройдите простую регистрацию и станьте участником ? браузерной онлайн игры-легенды БК. Боец, мы ждем тебя в наших рядах, поэтому заводи аккаунт скорей. "/>
- @@ -436,15 +440,15 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && ?>

-

+

Введите никнейм для Вашего персонажа

-

Введите никнейм для Вашего персонажа

@@ -452,7 +456,7 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && } else { ?>
-

(login): Имя вашего персонажа (login):

-

"Email"

+

Введите ваш действующий и настоящий "Email" адрес

-

! "Email" , , , - , .

+

Внимание! Не используйте несуществующие "Email" адреса, а так же проверяйте то, какой эмеил вы вводите, + ибо перед стартом игры, вам необходимо будет подтвердить ваш эмеил адрес.

-

"Email" , - , .

+

Ваш "Email" Адрес не будет использоваться нигде и служит исключительно для того, чтобы вы смогли + восстановить пароль от своего персонажа, а так же для получения новостной рассылки.

-

"Email"

Введите ваш действующий и настоящий "Email" адрес

@@ -496,8 +500,8 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && ?>

-

"Email": ,
- , :

Войдите на "Email": и проверьте почту,
вам пришло письмо с кодом + подтверждения, скопируйте его и вставьте сюда:

-

"Email": ,
- , :

Войдите на "Email": и проверьте почту,
вам пришло письмо с кодом + подтверждения, скопируйте его и вставьте сюда:

@@ -525,27 +529,27 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && ?>

-

+

Придумайте пароль для Вашего персонажа

-

Подтвердите придуманный пароль для Вашего персонажа


-

, , , - .

+

Пароль должен состоять с букв верхнего и нижнего регистра, а так же, помимо букв, необходимо добавить и + цифры для надёжности.

-

Придумайте пароль для Вашего персонажа

-

Подтвердите придуманный пароль для Вашего персонажа

-

, , , - .

+

Пароль должен состоять с букв верхнего и нижнего регистра, а так же, помимо букв, необходимо добавить и + цифры для надёжности.


-

:

+

Выберите пол вашего персонажа:

-

:

+

Укажите дату вашего рождения:

-

:

+

Выберите игровой класс для вашего персонажа:

-

! , - , , - .

+

Внимание! Выбор игрового класса не влияет на игру в целом и нигде не фиксируется или же используется, + это необходимо для того, чтобы ваш персонаж получил нужные предметы в начале игры, а так же нужные + баффы.

+ for="radio-1">Топорщик

-

+

-

+

-

+

-

+

-

+

-

+

-

+

-

!

+

Внимание! Выбрав класс персонажа вы автоматически соглашаетесь с правилами и законами игрового мира


0) { $ref = mysql_fetch_array(mysql_query('SELECT `id`,`login` FROM `users` WHERE `id` = "' . mysql_real_escape_string($_POST['ref']) . '" LIMIT 1')); if (isset($ref['id'])) { @@ -694,352 +698,98 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && if (isset($_COOKIE['from'])) { mysql_query('INSERT INTO `from` (`type`,`ip`,`uid`,`time`,`val`) VALUES ( "0", "' . getIp() . '","' . $uid . '", "' . time() . '", "' . mysql_real_escape_string($_COOKIE['from']) . '" ) '); } - // . + //Сообщения при регистрации от паладинов. $pal = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `align` > 1 AND `align` < 2 AND `online` > "' . (time() - 120) . '" ORDER BY `online` DESC LIMIT 1')); if (!isset($pal['id'])) { $pal = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `align` > 3 AND `align` < 4 AND `online` > "' . (time() - 120) . '" ORDER BY `online` DESC LIMIT 1')); } if (isset($pal['id'])) { - // $pal['login'] - $paltext = ' ' . $_POST['nick_u'] . '. , , , ! . '; + //отсылаем сообщение от $pal['login'] + $paltext = 'Приветствую ' . $_POST['nick_u'] . '. Отправляемся драться в хаоты, если нет заявок, создайте бой, дополнительно купите зверя и не забывайте выходить на центральную площать убивать Трупожора своего уровня!Приятной игры. '; mysql_query("INSERT INTO `chat` (`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`,`new`) VALUES ('capitalcity','0','" . $pal['login'] . "','" . $_POST['nick_u'] . "','" . $paltext . "','" . time() . "','3','0','1')"); } else { - // , :) - $text = ' ' . $_POST['nick_u'] . '. , , , ! .'; + //Не знаю что делать, пусть будет просто приветствие :) + $text = 'Приветствую ' . $_POST['nick_u'] . '. Отправляемся драться в хаоты, если нет заявок, создайте бой, дополнительно купите зверя и не забывайте выходить на центральную площать убивать Трупожора своего уровня!Приятной игры.'; mysql_query("INSERT INTO `chat` (`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`,`new`) VALUES ('capitalcity','0','','" . $_POST['nick_u'] . "','" . $text . "','" . time() . "','3','0','1')"); } - //$text = ' '.$_POST['nick_u'].'. https://new-combats.com/forum?read=5762&rnd=1 , , !'; + //$text = 'Приветствую '.$_POST['nick_u'].'. Крайне рекомендую прочесть мини гайд по ссылке https://new-combats.com/forum?read=5762&rnd=1 , если останутся вопросы,задавайте в общий чат!'; //mysql_query("INSERT INTO `chat` (`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`,`new`) VALUES ('capitalcity','0','','".$_POST['nick_u']."','".$text."','".time()."','6','0','1')"); - if ($_POST['class_u'] == 1) // + + /** Много однотипых запросов это боль. + * + * @param array $itemset + * @param double $itemscost + * @param string $stats + * + * @return void + */ + function sql_01(array $itemset, $itemscost, $stats) { - // - $us = add_effn($uid, 1); // - $us = add_effn($uid, 20); // + global $u, $uid; + array_unshift($itemset, null); + foreach ($itemset as $inodet => $itemId) { + if (empty($itemId)) { + continue; + } + mysql_query(sprintf('update items_users set + 1price = (select price_1 from items_shop where sid = 1 and item_id = %d), + inOdet = %d + where id = %d', + $itemId, $inodet, $u->addItem($itemId, $uid))); + } + mysql_query(sprintf('update users set money = money - %f where id = %d', $itemscost, $uid)); + mysql_query(sprintf('insert into stats (id, stats, ability, skills, exp) + values (%d, %s, -75, -9, 100000)', $uid, $stats)); + } - mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=62|s2=3|s3=3|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=9|a3=0|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',-75,-9,100000)"); - $re = $u->addItem(528, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 1 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "528" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(540, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 2 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "540" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(552, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 3 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "552" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(552, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 14 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "552" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(291, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 4 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "291" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(543, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 5 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "543" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(627, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 7 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "627" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(653, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "653" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(681, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 9 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "681" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(687, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 10 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "687" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(687, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 11 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "687" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(687, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 12 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "687" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(320, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 13 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "320" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(709, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 16 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "709" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(716, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 17 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "716" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - mysql_query('UPDATE `users` SET `money` = `money`-2101 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 2101 - } elseif ($_POST['class_u'] == 2) // + if ($_POST['class_u'] == 1) //топор { - // - $us = add_effn($uid, 8); // - $us = add_effn($uid, 20); // + //кастим эфекты + $us = add_effn($uid, 1); // сила + $us = add_effn($uid, 20); // сокрушение - mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=21|s2=31|s3=16|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=9|a2=0|a3=0|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0',-75,-9,100000)"); - $re = $u->addItem(525, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 1 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "525" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); + $wear = [528, 540, 552, 291, 543, null, 627, 653, 681, 687, 687, 687, 320, 552, null, 709, 716]; + $itemcost = 2101; + $stats = 's1=62|s2=3|s3=3|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=9|a3=0|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0'; - $re = $u->addItem(539, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 2 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "539" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(523, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 3 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "523" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(523, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 14 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "523" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(290, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 4 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "290" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(541, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 5 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "541" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(633, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 7 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "633" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(647, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "647" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(680, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 9 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "680" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(685, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 10 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "685" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(685, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 11 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "685" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(685, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 12 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "685" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(1151, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 13 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "1151" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(707, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 16 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "707" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(712, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 17 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "712" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - mysql_query('UPDATE `users` SET `money` = `money`-1972 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 1972 - - } elseif ($_POST['class_u'] == 3)// + } elseif ($_POST['class_u'] == 2) //уворот { - // - $us = add_effn($uid, 1); // - $us = add_effn($uid, 20); // + //кастим эфекты + $us = add_effn($uid, 8); // ловка + $us = add_effn($uid, 20); // сокрушение - mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=42|s2=3|s3=3|s4=50|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=9|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',-75,-9,100000)"); - $re = $u->addItem(533, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 1 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "533" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); + $wear = [525, 539, 523, 290, 541, null, 633, 647, 680, 685, 685, 685, 1151, 523, null, 707, 712]; + $itemcost = 1972; + $stats = 's1=21|s2=31|s3=16|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=9|a2=0|a3=0|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0'; - $re = $u->addItem(536, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 2 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "536" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(558, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 3 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "558" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(722, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 14 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "722" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(291, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 4 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "291" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(545, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 5 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "545" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(628, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 7 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "628" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(654, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "654" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(684, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 9 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "684" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(689, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 10 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "689" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(689, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 11 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "689" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(689, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 12 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "689" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(700, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 13 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "700" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(710, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 16 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "710" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(718, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 17 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "718" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - mysql_query('UPDATE `users` SET `money` = `money`-2101 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 2101 - } elseif ($_POST['class_u'] == 4)// + } elseif ($_POST['class_u'] == 3)//танк { - // - $us = add_effn($uid, 7); // - $us = add_effn($uid, 20); // + //кастим эфекты + $us = add_effn($uid, 1); // сила + $us = add_effn($uid, 20); // сокрушение - mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=24|s2=20|s3=24|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=9|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',-75,-9,100000)"); - $re = $u->addItem(527, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 1 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "527" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); + $wear = [533, 536, 558, 291, 545, null, 628, 654, 684, 689, 689, 689, 700, 722, null, 710, 718]; + $itemcost = 2101; + $stats = 's1=42|s2=3|s3=3|s4=50|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=9|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0'; - $re = $u->addItem(537, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 2 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "537" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(567, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 3 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "567" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(723, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 14 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "723" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(291, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 4 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "291" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(544, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 5 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "544" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(626, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 7 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "626" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(651, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "651" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(683, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 9 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "683" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(686, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 10 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "686" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(686, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 11 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "686" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - $re = $u->addItem(686, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 12 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "686" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(706, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 13 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "706" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(708, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 16 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "708" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - $re = $u->addItem(717, $uid); - mysql_query('UPDATE `items_users` SET `inodet` = 17 WHERE `id` = "' . $re . '" LIMIT 1'); - $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "717" AND `sid`=1 LIMIT 1')); - mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - - mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 1988 - } elseif ($_POST['class_u'] == 5)// + } elseif ($_POST['class_u'] == 4)//крит { - // - $us = add_effn($uid, 9); // - $us = add_effn($uid, 32); // - $us = add_effn($uid, 53); // - $us = add_effn($uid, 439); // + //кастим эфекты + $us = add_effn($uid, 7); // инта + $us = add_effn($uid, 20); // сокрушение + + $wear = [527, 537, 567, 291, 544, null, 626, 651, 683, 686, 686, 686, 706, 723, null, 708, 717]; + $itemcost = 1988; + $stats = 's1=24|s2=20|s3=24|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=9|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0'; + + } elseif ($_POST['class_u'] == 5)//воздух + { + //кастим эфекты + $us = add_effn($uid, 9); // интелект + $us = add_effn($uid, 32); // Холодный разум + $us = add_effn($uid, 53); // Маг уселок воздух + $us = add_effn($uid, 439); // Маг уселок mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=0|mg2=6|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',-75,-9,100000)"); @@ -1087,7 +837,7 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && mysql_query('UPDATE `items_users` SET `inodet` = 17 WHERE `id` = "' . $re . '" LIMIT 1'); $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "714" AND `sid`=1 LIMIT 1')); mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - ///------- + ///------- юва $re = $u->addItem(658, $uid); mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "658" AND `sid`=1 LIMIT 1')); @@ -1111,14 +861,14 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "693" AND `sid`=1 LIMIT 1')); mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); ///---- - mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 1988 - } elseif ($_POST['class_u'] == 6)// + mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');//коректировка денег 2244 - 1988 + } elseif ($_POST['class_u'] == 6)//огонь { - // - $us = add_effn($uid, 9); // - $us = add_effn($uid, 32); // - $us = add_effn($uid, 51); // - $us = add_effn($uid, 439); // + //кастим эфекты + $us = add_effn($uid, 9); // интелект + $us = add_effn($uid, 32); // Холодный разум + $us = add_effn($uid, 51); // Маг уселок огонь + $us = add_effn($uid, 439); // Маг уселок mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=6|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',-75,-9,100000)"); $re = $u->addItem(531, $uid); @@ -1166,7 +916,7 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "714" AND `sid`=1 LIMIT 1')); mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - ///------- + ///------- юва $re = $u->addItem(655, $uid); mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "655" AND `sid`=1 LIMIT 1')); @@ -1191,16 +941,16 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); ///---- - mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 1988 - } elseif ($_POST['class_u'] == 7)// + mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');//коректировка денег 2244 - 1988 + } elseif ($_POST['class_u'] == 7)//земля { - // - $us = add_effn($uid, 9); // - $us = add_effn($uid, 32); // - $us = add_effn($uid, 54); // - $us = add_effn($uid, 439); // + //кастим эфекты + $us = add_effn($uid, 9); // интелект + $us = add_effn($uid, 32); // Холодный разум + $us = add_effn($uid, 54); // Маг уселок земля + $us = add_effn($uid, 439); // Маг уселок mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=0|mg2=0|mg3=0|mg4=6|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',-75,-9,100000)"); $re = $u->addItem(531, $uid); @@ -1248,7 +998,7 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "714" AND `sid`=1 LIMIT 1')); mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - ///------- + ///------- юва $re = $u->addItem(657, $uid); mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "657" AND `sid`=1 LIMIT 1')); @@ -1273,14 +1023,14 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); ///---- - mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 1988 - } elseif ($_POST['class_u'] == 8)// + mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');//коректировка денег 2244 - 1988 + } elseif ($_POST['class_u'] == 8)//вода { - // - $us = add_effn($uid, 9); // - $us = add_effn($uid, 32); // - $us = add_effn($uid, 52); // - $us = add_effn($uid, 439); // + //кастим эфекты + $us = add_effn($uid, 9); // интелект + $us = add_effn($uid, 32); // Холодный разум + $us = add_effn($uid, 52); // Маг уселок вода + $us = add_effn($uid, 439); // Маг уселок mysql_query("INSERT INTO `stats` (`id`,`stats`,`ability`,`skills`,exp) VALUES ('" . $uid . "','s1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=0|mg2=0|mg3=6|mg4=0|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',-75,-9,100000)"); $re = $u->addItem(531, $uid); mysql_query('UPDATE `items_users` SET `inodet` = 1 WHERE `id` = "' . $re . '" LIMIT 1'); @@ -1327,7 +1077,7 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "714" AND `sid`=1 LIMIT 1')); mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); - ///------- + ///------- юва $re = $u->addItem(660, $uid); mysql_query('UPDATE `items_users` SET `inodet` = 8 WHERE `id` = "' . $re . '" LIMIT 1'); $price = mysql_fetch_array(mysql_query('SELECT `price_1` FROM `items_shop` WHERE `item_id` = "660" AND `sid`=1 LIMIT 1')); @@ -1352,13 +1102,19 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && mysql_query('UPDATE `items_users` SET `1price` = "' . $price['price_1'] . '" WHERE `id` = "' . $re . '" LIMIT 1'); ///---- - mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');// 2244 - 1988 + mysql_query('UPDATE `users` SET `money` = `money`-1988 WHERE `id` = "' . $uid . '" LIMIT 1');//коректировка денег 2244 - 1988 } + + if (!empty($wear) && !empty($itemcost) && !empty($stats)) { + sql_01($wear, $itemcost, $stats); + unset($wear, $itemcost, $stats); + } + if ($_POST['ref'] > 0) { $re = $u->addItem(6417, $uid); } - // + //катим эфекты // // $us = add_effn($uid, 37); @@ -1368,73 +1124,72 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && $us = add_effn($uid, 296); $us = add_effn($uid, 472); - // + //Магическое усиление mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (4942, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'oneType=72|onlyOne=1|musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, '', '', '', 1, 2, '439', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // + (4942, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'oneType=72|onlyOne=1|musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, 'Администрация', '', '', 1, 2, '439', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Защита от оружия mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (1001, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'onlyOne=1|oneType=7|noremont=1|musor=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, '', '', '', 1, 2, '25', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // + (1001, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'onlyOne=1|oneType=7|noremont=1|musor=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, 'Администрация', '', '', 1, 2, '25', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Защита от магии mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (4941, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'oneType=71|onlyOne=1|musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, '', '', '', 1, 2, '438', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // +6 + (4941, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'oneType=71|onlyOne=1|musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, 'Администрация', '', '', 1, 2, '438', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Жажда жизни +6 mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (3101, 50, 0.00, 0.00, 0.00, " . $uid . ", 0, 'onlyOne=1|noremont=1|oneType=33|musor=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 2, '296', 'capitalcity', " . time() . ", 0, 33, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // ( ) + (3101, 50, 0.00, 0.00, 0.00, " . $uid . ", 0, 'onlyOne=1|noremont=1|oneType=33|musor=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 2, '296', 'capitalcity', " . time() . ", 0, 33, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Аптечка (Исцеляет легкие травмы) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (4412, 7, 0.00, 0.00, 0.00, " . $uid . ", 0, 'tr_lvl=1|useOnLogin=1|musor=1|noremont=1', 0, 0, 0, 0, 0.00, 2, '', '', '', 1, 2, 'lech_free_1', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // ( ) + (4412, 7, 0.00, 0.00, 0.00, " . $uid . ", 0, 'tr_lvl=1|useOnLogin=1|musor=1|noremont=1', 0, 0, 0, 0, 0.00, 2, 'Администрация', '', '', 1, 2, 'lech_free_1', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Аптечка (Исцеляет средние травмы) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (4413, 14, 0.00, 0.00, 0.00, " . $uid . ", 0, 'tr_lvl=1|useOnLogin=1|musor=1|noremont=1', 0, 0, 0, 0, 0.00, 2, '', '', '', 1, 2, 'lech_free_2', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // ( ) + (4413, 14, 0.00, 0.00, 0.00, " . $uid . ", 0, 'tr_lvl=1|useOnLogin=1|musor=1|noremont=1', 0, 0, 0, 0, 0.00, 2, 'Администрация', '', '', 1, 2, 'lech_free_2', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Аптечка (Исцеляет тяжелые травмы) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (4414, 21, 0.00, 0.00, 0.00, " . $uid . ", 0, 'tr_lvl=1|useOnLogin=1|musor=1|noremont=1', 0, 0, 0, 0, 0.00, 2, '', '', '', 1, 2, 'lech_free_3', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // + (4414, 21, 0.00, 0.00, 0.00, " . $uid . ", 0, 'tr_lvl=1|useOnLogin=1|musor=1|noremont=1', 0, 0, 0, 0, 0.00, 2, 'Администрация', '', '', 1, 2, 'lech_free_3', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Холодный разум mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (1460, 15, 0.00, 0.00, 0.00, " . $uid . ", 0, 'musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 5, '32', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // + (1460, 15, 0.00, 0.00, 0.00, " . $uid . ", 0, 'musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 5, '32', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Сокрушение mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (994, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'onlyOne=1|oneType=44|noremont=1|musor=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, '', '', '', 1, 4, '20', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // ( +500 ) + (994, 40, 0.00, 0.00, 0.00, " . $uid . ", 0, 'onlyOne=1|oneType=44|noremont=1|musor=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 4, 'Администрация', '', '', 1, 4, '20', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Эликсир жизни (восстанавливает +500 хп) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (4736, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'moment=1|moment_hp=500|nohaos=1|musor=2|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 10, '', '', '', 1, 4, 'elicsir_hp -w500', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // ( +200 ) + (4736, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'moment=1|moment_hp=500|nohaos=1|musor=2|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 10, 'Администрация', '', '', 1, 4, 'elicsir_hp -w500', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Зелье жизни (восстанавливает +200 хп) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (724, 2, 0.00, 0.00, 0.00, " . $uid . ", 0, 'moment=1|moment_hp=200|nohaos=1|musor=2|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 10, '', '', '', 1, 4, 'elicsir_hp -w200', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // (+10 ) + (724, 2, 0.00, 0.00, 0.00, " . $uid . ", 0, 'moment=1|moment_hp=200|nohaos=1|musor=2|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 10, 'Администрация', '', '', 1, 4, 'elicsir_hp -w200', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Зелье могущества (+10 силы) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (870, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s1=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 4, '1', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // (+10 ) + (870, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s1=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 4, '1', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Зелье стремительности (+10 ловкости) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (872, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s2=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 4, '8', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // (+10 ) + (872, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s2=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 4, '8', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Зелье прозрения(+10 интуиции) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (871, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s3=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 4, '7', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // (+10 ) + (871, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s3=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 4, '7', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Зелье разума(+10 интеллекта) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (873, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s5=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 4, '9', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // (+160 ) + (873, 5, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=1|musor=2|noremont=1|nohaos=1|onlyOne=1|oneType=1|noremont=1|add_s5=15|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 4, '9', 'capitalcity', " . time() . ", 0, 1, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Нектар Отрицания(+160 защиты от магии) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (2140, 30, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=8|musor=2|noremont=1|add_zm=160|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 4, '38', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // (+160 ) + (2140, 30, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=8|musor=2|noremont=1|add_zm=160|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 4, '38', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Нектар уязвимости(+160 защиты от урона) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (2139, 30, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=8|musor=2|noremont=1|add_za=160|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, '', '', '', 1, 4, '37', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); - // (+180 ) + (2139, 30, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=8|musor=2|noremont=1|add_za=160|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 5, 'Администрация', '', '', 1, 4, '37', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + //Бутер (+180 хп) mysql_query("INSERT INTO `items_users` (`item_id`, `1price`, `2price`, `3price`, `4price`, `uid`, `use_text`, `data`, `inOdet`, `inShop`, `inGroup`, `delete`, `iznosNOW`, `iznosMAX`, `gift`, `gtxt1`, `gtxt2`, `kolvo`, `geniration`, `magic_inc`, `maidin`, `lastUPD`, `timeOver`, `overType`, `secret_id`, `time_create`, `time_sleep`, `dn_delete`, `inTransfer`, `post_delivery`, `lbtl_`, `bexp`, `so`, `blvl`, `pok_itm`, `btl_zd`) VALUES - (3075, 10, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=4|musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 10, '', '', '', 1, 4, '283', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); + (3075, 10, 0.00, 0.00, 0.00, " . $uid . ", 0, 'nohaos=1|onlyOne=1|oneType=4|musor=1|noremont=1|sudba=1|nosale=1', 0, 0, 0, 0, 0.00, 10, 'Администрация', '', '', 1, 4, '283', 'capitalcity', " . time() . ", 0, 0, '', " . time() . ", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);"); mysql_query('UPDATE `users` SET `online` = "' . time() . '" WHERE `id` = "' . $uid . '" LIMIT 1'); - // + //Создаем статы персонажа mysql_query("INSERT INTO `online` (`uid`,`timeStart`) VALUES ('" . $uid . "','" . time() . "')"); - // 1 + //добовляем благодать ангела 1н день $ttime = time(); mysql_query("INSERT INTO `eff_users`(`id_eff`, `uid`, `name`, `data`, `overType`, `timeUse`, `timeAce`, `user_use`, `delete`, `v1`, `v2`, `img2`, `x`, `hod`, `bj`, `sleeptime`, `no_Ace`, `file_finish`, `tr_life_user`, `deactiveTime`, `deactiveLast`, `mark`, `bs`) VALUES - (412,'" . $uid . "',' [1]','add_gold=1|add_speedhp=35|add_speedmp=35|add_exp=35|add_repair_discount=25|add_speed_dungeon=10|add_hpVinos=5|add_m10=5|add_m11=5|add_za=25|add_zma=25',52," . $ttime . ",0,'',0,0,0,'',1,-1,0,0,1,'',0,0,0,0,0)"); - - - // + (412,'" . $uid . "','Благодать Ангела [1]','add_gold=1|add_speedhp=35|add_speedmp=35|add_exp=35|add_repair_discount=25|add_speed_dungeon=10|add_hpVinos=5|add_m10=5|add_m11=5|add_za=25|add_zma=25',52," . $ttime . ",0,'',0,0,0,'',1,-1,0,0,1,'',0,0,0,0,0)"); + + //мульты $ipm1 = mysql_fetch_array(mysql_query('SELECT * FROM `logs_auth` WHERE `uid` = "' . mysql_real_escape_string($uid) . '" AND `ip`!="' . mysql_real_escape_string(getIp()) . '" ORDER BY `id` ASC LIMIT 1')); $ppl = mysql_query('SELECT * FROM `logs_auth` WHERE `ip`!="" AND (`ip` = "' . mysql_real_escape_string(getIp()) . '" OR `ip`="' . mysql_real_escape_string($ipm1['ip']) . '" OR `ip`="' . mysql_real_escape_string($_COOKIE['ip']) . '")'); while ($spl = mysql_fetch_array($ppl)) { @@ -1445,15 +1200,15 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && } mysql_query("INSERT INTO `logs_auth` (`uid`,`ip`,`browser`,`type`,`time`,`depass`) VALUES ('" . $uid . "','" . mysql_real_escape_string(getIp()) . "','" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']) . "','1','" . time() . "','')"); - // + //Обновяем таблицы mysql_query("UPDATE `users` SET `online`='" . time() . "',`ip` = '" . mysql_real_escape_string(getIp()) . "' WHERE `uid` = '" . $uid . "' LIMIT 1"); if (!setcookie('login', $_POST['nick_u'], (time() + 60 * 60 * 24 * 7), '', '.new-combats.com') || !setcookie('pass', md5($_POST['pass1_u']), (time() + 60 * 60 * 24 * 7), '', '.new-combats.com')) { - die(' cookie.'); + die('Ошибка сохранения cookie.'); } else { - die(' , . - , !
'); + die('Спасибо за регистрацию в игровом мире Бойцовского Клуба, желаем вам побед и долгой игры. +В случае вопросов по игре, Вам будет доступен общий чат!
'); } @@ -1464,7 +1219,6 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && header('location: https://new-combats.com/bk'); - //=================================================================== } //================================ @@ -1477,7 +1231,4 @@ if ($_SERVER['HTTP_USER_AGENT'] != '' && +} \ No newline at end of file diff --git a/repass.php b/repass.php index 678d0430..24db37a3 100644 --- a/repass.php +++ b/repass.php @@ -34,12 +34,12 @@ if (isset($_POST['relogin'])) { if ($usr['admin'] == 0 && $usr['banned'] == 0) { $step = 2; if (isset($_POST['redate'])) { - // + //Третий шаг $lst_psw = mysql_fetch_array(mysql_query('SELECT * FROM `repass` WHERE `uid` = "' . $usr['id'] . '" AND `time` > ' . (time() - 24 * 60 * 60) . ' AND `type` = "1" LIMIT 1')); if (isset($lst_psw['id'])) { - $error = ' .'; + $error = 'Высылать пароль можно не более одного раза в сутки.'; } elseif (str_replace('0', '', $_POST['redate']) == str_replace('0', '', $usr['bithday']) && ($_POST['reanswer'] == $usr['q1'] || $usr['q1'] == '')) { - $error = '


"' . $usr['login'] . '" E-mail !


'; + $error = '


Пароль от персонажа "' . $usr['login'] . '" был успешно выслан на E-mail указанный при регистрации!


'; $re = mysql_fetch_array(mysql_query('SELECT * FROM `logs_auth` WHERE `uid` = "' . $usr['id'] . '" AND `type` = "0" AND `depass` != "" ORDER BY `id` DESC LIMIT 1')); if ($u['securetime'] < $c['securetime']) { unset($re); @@ -48,14 +48,14 @@ if (isset($_POST['relogin'])) { $sm = ['a', 'b', 'c', 'd', 'e', 'f', 'x', 'd', 'f', 'X', 'e', 'ER', 'XX', 'X']; $re['depass'] = $sm[rand(0, 12)] . rand(0, 9) . $sm[rand(0, 12)] . rand(0, 9) . $sm[rand(0, 12)] . rand(0, 9) . $sm[rand(0, 12)] . rand(0, 9) . $sm[rand(0, 12)] . rand(0, 9); } - $title = ' "' . $usr['login'] . '".'; - $txt = ' .
'; - $txt .= ' IP- - ' . IP . ', .
, .

'; - $txt .= ' : ' . $usr['login'] . '
'; - $txt .= ' : ' . $re['depass'] . '

'; - $txt .= ' .

'; - $txt .= ' ,
'; - $txt .= ' '; + $title = 'Восстановление пароля от "' . $usr['login'] . '".'; + $txt = 'Добрый день.
'; + $txt .= 'С IP-адреса - ' . IP . ', был запрошен пароль для вашего персонажа.
Если это не Вы, просто удалите это письмо.

'; + $txt .= 'Ваш логин: ' . $usr['login'] . '
'; + $txt .= 'Ваш пароль: ' . $re['depass'] . '

'; + $txt .= 'Отвечать на данное письмо не нужно.

'; + $txt .= 'С уважением,
'; + $txt .= 'Администрация Бойцовского Клуба'; $mail = mails($usr['mail'], $txt, $title); if ($mail === 1) { @@ -67,14 +67,14 @@ if (isset($_POST['relogin'])) { } unset($mail); } else { - $error = ' .'; + $error = 'Неверный ответ на секретный вопрос или неверно указан день рождения.'; } } } else { - $error = ' "' . $_POST['relogin'] . '" !'; + $error = 'Персонажу "' . $_POST['relogin'] . '" запрещена высылка пароля!'; } } else { - $error = ' "' . htmlspecialchars($_POST['relogin'], null, 'cp1251') . '" .'; + $error = 'Логин "' . htmlspecialchars($_POST['relogin'], null, 'cp1251') . '" не найден в базе.'; } } @@ -83,11 +83,11 @@ if (isset($_POST['relogin'])) { - + Восстановление пароля от персонажа Бойцовский Клуб + content="бойцовский клуб игра, бойцовский клуб играть, игра бойцовский клуб, старый бойцовский Клуб, бойцовский клуб онлайн игра, бойцовский клуб браузерная игра, играть в бойцовский клуб, игра бк, бк игра, старый бк, играть в бк, бк онлайн игра, новый бк, Легендарный Бойцовский Клуб, легендарный бк, combats, комбатс, combats ru, combats com, OldBK, oldbk ru, oldbk com, олдбк, old bk, олд бк, mycombats, rebk, recombats, oldcombats, obk2"> + content="На этой страничке игроки могут восстановить свой игровой пароль в браузерной игре Новый Бойцовский Клуб"/> @@ -121,7 +121,7 @@ if (isset($_POST['relogin'])) {
@@ -192,7 +192,7 @@ if (isset($_POST['relogin'])) { « »     2018- © + class="testro">«Старый Бойцовский Клуб»     2018- © Браузерная онлайн игра