Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TOP5 скидки + лотерея
Runpad/GameClass Forums > RunpadPro/Runpad, (Shell/Rollback) > Плагины, расширения шелла, API (Runpad / Runpad Pro)
Страницы: 1, 2
covox
Как-то давно я решил привнести немного азарта в жизнь клуба. Написал скрипт для скидок топ5 клиентов, потративших больше всего денег в клубе. Выручка заметно выросла, т.к. люди стали пытаться вытеснить друг друга из топа. Где-то полгода этот скрипт провисел у меня в клубе в автозагрузке ранпада, народ был доволен. А сейчас возникла новая идея о проведении еженедельной лотереи. Скрипт был почти полностью переписан и переделан дизайн.

Скрипт прописывается в автозагрузку ранпада. Например вот так:
Код
$bodywb -simple http://192.168.1.48/index.php




Нажмите для просмотра прикрепленного файла

При изменении дизайна просьба копирайты не удалять.
noob
Цитата(covox @ 14.01.2011 - 05:36) *
Написал скрипт для скидок топ5 клиентов, потративших больше всего денег в клубе.
где сорцы?
covox
Цитата(noob @ 14.01.2011 - 07:24) *
Цитата(covox @ 14.01.2011 - 05:36) *
Написал скрипт для скидок топ5 клиентов, потративших больше всего денег в клубе.
где сорцы?

я ж говорю пару косяков есть. дизайнер мне фон неправильный дал. сегодня жду от него исправлений, и еще одну штуку исправлю. аа то вылюжу, а потом перекладывать с исправлениями. вам лишняя работа.
covox
обновил первый пост. добавил ссылку на скрипт.
covox
Бумероид нашел один глюк при выводе информации. Исправил. В шапке обновленная версия.
dedka
добрый день!объясните какой айпишник прописывать и где(адрес сервера или клиентской машины)и куда ложить сам скрипт?
covox
Цитата(dedka @ 18.01.2011 - 14:05) *
добрый день!объясните какой айпишник прописывать и где(адрес сервера или клиентской машины)и куда ложить сам скрипт?

скрипт работает напрямую с базой данных асты. плюс для работы ему нужна своя бд. ее можно импортировать из папки sql.
собственно и адреса должны быть сконфигурены под ти базы.
dedka
Цитата(covox @ 19.01.2011 - 14:57) *
Цитата(dedka @ 18.01.2011 - 14:05) *
добрый день!объясните какой айпишник прописывать и где(адрес сервера или клиентской машины)и куда ложить сам скрипт?

скрипт работает напрямую с базой данных асты. плюс для работы ему нужна своя бд. ее можно импортировать из папки sql.
собственно и адреса должны быть сконфигурены под ти базы.

а под гейм класс можно сделать? буду признателен...
covox
Новая версия 0.3
+ добавил показ фото победителя

Нажмите для просмотра прикрепленного файла
dedka
а под гейм класс можно сделать? буду признателен...
covox
Цитата(dedka @ 20.01.2011 - 10:20) *
а под гейм класс можно сделать? буду признателен...

он не использует базу mysql
если вдруг когда-нибудь они допилят поддержку мускуля, то сделаю.
John Doe
Сovox, спасибо, что делишься наработками.
В случае Win2008 R2, можно обойтись встроенным вэбсервером? Не в курсе?
covox
Цитата(John Doe @ 21.01.2011 - 14:20) *
Сovox, спасибо, что делишься наработками.

Вообще это не единственная наработка под асту. У меня и зарплаты считаются автоматом, а отчеты в форум отсылаются и из книги жалоб тоже в форум все жалобы автоматом сыпятся. Просто для этих наработок нужен свой форум, а он редко у кого есть.

Цитата(John Doe @ 21.01.2011 - 14:20) *
В случае Win2008 R2, можно обойтись встроенным вэбсервером? Не в курсе?

Скрипт тестировался под апач, но думаю, что должен работать. Я в виндовых серверах абсолютно не разбираюсь. Мне легче было фрю освоить, чем разбираться с кучей окошек и непонятными ошибками.
bilanich
А вот и мой вариантик. http://integralclub.net/top5/ regular_smile.gif Отдельное огромное спасибо covox present.gif
STALKERUA
Конкретикой поделились бы кто юзает, после нововденения у меня выручка выросла на 10% к примеру).
John Doe
bilanich, а чего "Top 5" состоит из 3-х человек?
bilanich
Цитата(John Doe @ 22.01.2011 - 21:08) *
bilanich, а чего "Top 5" состоит из 3-х человек?


Скрипт поставлен совсем недавно, регистрированых клиентов пока мало, в основном сидят без акаунтов, но думаю это все устаканится с временем.
covox
Был найден серьезный баг. Скрипт всегда зачисляет +100 независимо от конфига. Чтобы исправить его, нужно найти строчку:

Код
$ASTA->query("UPDATE `clients` SET Credit=Credit+100 WHERE id=?", $winner['winner_id']);


и заменить ее на:
Код
$ASTA->query("UPDATE `clients` SET Credit=Credit+? WHERE id=?",$BonusSumm, $winner['winner_id']);


Выкладываю исправленную версию.
Нажмите для просмотра прикрепленного файла
covox
Сегодня состоялся очередной розыгрыш, и я заметил, что выиграл тот же самый клиент, что и в прошлый раз. У него были все шансы, но мне показалось, что это скучновато. Поэтому я внес изменения, чтобы была возможность опционально запретить победителю участвовать в лотерее.

Если вы включили эту опцию, то не афишируйте. А то у победителя пропадет желание играть.

Мне пришлось немного отрехтовать базу. Если у кого-то она уже установлена, введите в консоли мускуля:
Код
ALTER TABLE `lottery_winner` ADD `id` INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, DROP PRIMARY KEY, ADD PRIMARY KEY(`id`);


Ниже выкладываю полную версию скрипта с новой базой.
Нажмите для просмотра прикрепленного файла
bumeroid
использую в таком виде:
bilanich
Цитата(covox @ 24.01.2011 - 22:20) *
Сегодня состоялся очередной розыгрыш, и я заметил, что выиграл тот же самый клиент, что и в прошлый раз. У него были все шансы, но мне показалось, что это скучновато. Поэтому я внес изменения, чтобы была возможность опционально запретить победителю участвовать в лотерее.

Если вы включили эту опцию, то не афишируйте. А то у победителя пропадет желание играть.

Мне пришлось немного отрехтовать базу. Если у кого-то она уже установлена, введите в консоли мускуля:
Код
ALTER TABLE `lottery_winner` ADD `id` INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, DROP PRIMARY KEY, ADD PRIMARY KEY(`id`);


Ниже выкладываю полную версию скрипта с новой базой.
Нажмите для просмотра прикрепленного файла


Ну я думаю для того лотерея придумана и есть, если человек выиграл прошлый раз - то что он не может выиграть 2-ой раз подряд? - Может! Может и 3 раз подряд если попрет red_smile.gif
covox
Цитата(bilanich @ 25.01.2011 - 11:20) *
Цитата(covox @ 24.01.2011 - 22:20) *
Сегодня состоялся очередной розыгрыш, и я заметил, что выиграл тот же самый клиент, что и в прошлый раз. У него были все шансы, но мне показалось, что это скучновато. Поэтому я внес изменения, чтобы была возможность опционально запретить победителю участвовать в лотерее.

Если вы включили эту опцию, то не афишируйте. А то у победителя пропадет желание играть.

Мне пришлось немного отрехтовать базу. Если у кого-то она уже установлена, введите в консоли мускуля:
Код
ALTER TABLE `lottery_winner` ADD `id` INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, DROP PRIMARY KEY, ADD PRIMARY KEY(`id`);


Ниже выкладываю полную версию скрипта с новой базой.
Нажмите для просмотра прикрепленного файла


Ну я думаю для того лотерея придумана и есть, если человек выиграл прошлый раз - то что он не может выиграть 2-ой раз подряд? - Может! Может и 3 раз подряд если попрет red_smile.gif

Поэтому я опционально и сделал. Просто для того, чтобы людям было интересно, нужна ротация победителей. А то визуально получается, что одна и та же морда висит, и как будто приз не был разыгран. Придется всем объяснять, что человек два раза подряд выиграл.
John Doe
covox, может генератор случайных чисел не совершенен (до кода ещё не добрался)? Или слишком жёсткий критерий отбора участников лотереи, их слишком мало?
covox
Цитата(John Doe @ 27.01.2011 - 21:46) *
covox, может генератор случайных чисел не совершенен (до кода ещё не добрался)? Или слишком жёсткий критерий отбора участников лотереи, их слишком мало?

а я и не генерирую случайные числа. выбор победителя делает мускуль. там есть процедура рандомной сортировки. а количество лотерейных билетов довольно большое. сейчас покажу за неделю:
Код
+----------+---------+
| clientid | CashAdd |
+----------+---------+
|       17 |     100 |
|       27 |     100 |
|       27 |     100 |
|       27 |     100 |
|       27 |     100 |
|       27 |     100 |
|       27 |     100 |
|       39 |     100 |
|       47 |     100 |
|       52 |     100 |
|       52 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       65 |     100 |
|       66 |     100 |
|       66 |     100 |
|      111 |     100 |
|      111 |     100 |
|      111 |     100 |
|      114 |     100 |
|      115 |     100 |
|      115 |     100 |
|      115 |     100 |
|      120 |     100 |
|      127 |     100 |
|      131 |     100 |
|      140 |     100 |
|      161 |     100 |
|      170 |     100 |
|      170 |     100 |
|      170 |     100 |
|      170 |     100 |
|      175 |     100 |
|      144 |     101 |
|      152 |     108 |
|       76 |     110 |
|      111 |     110 |
|      161 |     110 |
|      161 |     110 |
|      172 |     110 |
|       17 |     120 |
|      172 |     120 |
|      172 |     127 |
|       17 |     130 |
|       17 |     130 |
|       17 |     130 |
|       39 |     130 |
|       39 |     130 |
|       39 |     130 |
|       48 |     130 |
|      115 |     130 |
|      123 |     130 |
|      156 |     130 |
|      161 |     130 |
|      161 |     130 |
|      172 |     130 |
|      172 |     130 |
|      172 |     130 |
|      172 |     130 |
|       17 |     135 |
|      172 |     135 |
|       17 |     137 |
|       17 |     140 |
|       28 |     140 |
|       28 |     140 |
|       32 |     140 |
|      104 |     140 |
|      172 |     140 |
|      172 |     140 |
|        6 |     150 |
|        6 |     150 |
|       39 |     150 |
|       39 |     150 |
|      123 |     150 |
|      104 |     180 |
|       45 |     200 |
|      111 |     200 |
|      161 |     200 |
|      161 |     200 |
+----------+---------+
86 rows in set (0.01 sec)

John Doe
Тогда, получается, победитель заслуженный...
covox
Цитата(John Doe @ 28.01.2011 - 14:11) *
Тогда, получается, победитель заслуженный...

я говорю о психологии. если лицо в понедельник не изменится, то все будут думать, что лотерея не состоялась.
John Doe
Нет, я понял. Решает каждый сам.
Сейчас подумал, что твой вариант нельзя считать нечестным, при условии, что шансов у "забаненного" победителя не больше 50%.
Пуля - дура...
covox
Еще одна ошибка. В последнем обновлении не правильно отображается дата последней лотереи.

Для исправления ошибки, надо найти код:
Код
$date = $TOP->selectCell("SELECT (UNIX_TIMESTAMP(win_time))+604800 FROM lottery_winner");

и заменить на:
Код
$date = $TOP->selectCell("SELECT (UNIX_TIMESTAMP(win_time))+604800 FROM lottery_winner ORDER BY win_time DESC LIMIT 1");


Нажмите для просмотра прикрепленного файла
bilanich
В топ5 на последнее место не попадает клиент (даже если оно свободно) если у него такая же сумма пополнений за неделю как и у человека на 4 месте, его просто скрипт игнорирует. Думаю чо это не правильно. red_smile.gif
covox
Цитата(bilanich @ 4.02.2011 - 10:22) *
В топ5 на последнее место не попадает клиент (даже если оно свободно) если у него такая же сумма пополнений за неделю как и у человека на 4 месте, его просто скрипт игнорирует. Думаю чо это не правильно. red_smile.gif

вы код переписали как-то по своему. я не могу на расстоянии понять что у вас. топ высчитывается при помощи mysql запроса:
Код
SELECT clientid, SUM(CashAdd) as sum
            FROM mainlog
            WHERE CashAdd IS NOT NULL
            AND clientid IS NOT NULL
            AND UNIX_TIMESTAMP(RecordDTime) > UNIX_TIMESTAMP(NOW()) - 604800
            GROUP BY clientid;


я сто раз просил выполнить его напрямую из консоли мускуля и посмотреть результаты. потом этот список сортируется по суммам, урезается до пяти строчек и записывается в базу как новый топ. все это делает сам мускуль. ошибок быть не может.
bilanich
Цитата(covox @ 5.02.2011 - 02:02) *
Цитата(bilanich @ 4.02.2011 - 10:22) *
В топ5 на последнее место не попадает клиент (даже если оно свободно) если у него такая же сумма пополнений за неделю как и у человека на 4 месте, его просто скрипт игнорирует. Думаю чо это не правильно. red_smile.gif

вы код переписали как-то по своему. я не могу на расстоянии понять что у вас. топ высчитывается при помощи mysql запроса:
Код
SELECT clientid, SUM(CashAdd) as sum
            FROM mainlog
            WHERE CashAdd IS NOT NULL
            AND clientid IS NOT NULL
            AND UNIX_TIMESTAMP(RecordDTime) > UNIX_TIMESTAMP(NOW()) - 604800
            GROUP BY clientid;


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


Всё таки нашлось 2 ошибки в скрипте, в результате которых не верно отображался TOP5 клиентов, если суммы оставленные за неделю клиентами совпадали. На днях выложат исправленный скрипт lightbulb.gif Большой респект и уважуха covox за уделённое мне время. thumbs_up.gif
John Doe
Ещё раз попытаю счастье: у кого-нибудь на PHP 5 скрипт работает?
covox
исправленная версия
Нажмите для просмотра прикрепленного файла
covox
Цитата(John Doe @ 15.05.2011 - 18:35) *
Ещё раз попытаю счастье: у кого-нибудь на PHP 5 скрипт работает?

он под php5 и писан
John Doe
Цитата(covox @ 4.06.2011 - 14:16) *
Цитата(John Doe @ 15.05.2011 - 18:35) *
Ещё раз попытаю счастье: у кого-нибудь на PHP 5 скрипт работает?

он под php5 и писан

Гм... А почему тогда родные функции работы с MySQL не использовались?
covox
Цитата(John Doe @ 4.06.2011 - 21:29) *
Цитата(covox @ 4.06.2011 - 14:16) *
Цитата(John Doe @ 15.05.2011 - 18:35) *
Ещё раз попытаю счастье: у кого-нибудь на PHP 5 скрипт работает?

он под php5 и писан

Гм... А почему тогда родные функции работы с MySQL не использовались?

ну мне с классом котерова более приятно работается.
John Doe
Цитата(covox @ 5.06.2011 - 22:56) *
Цитата(John Doe @ 4.06.2011 - 21:29) *
Цитата(covox @ 4.06.2011 - 14:16) *
Цитата(John Doe @ 15.05.2011 - 18:35) *
Ещё раз попытаю счастье: у кого-нибудь на PHP 5 скрипт работает?

он под php5 и писан

Гм... А почему тогда родные функции работы с MySQL не использовались?

ну мне с классом котерова более приятно работается.


О! Я до MySQL ещё не дочитал, но заглядывал, в том числе в примеры - там используется родная библиотека.
Кроме того Ваш вариант, у меня выдаёт кучу ошибок, запустить не удалось. Потому я подумал, что написано под более ранние версии PHP.
covox
вроде под 5.3 даже тестил. возможно вы в конфиге не прописали доступ к базе.
John Doe
Цитата(covox @ 9.06.2011 - 22:40) *
вроде под 5.3 даже тестил. возможно вы в конфиге не прописали доступ к базе.

Там не БД ошибки. Ещё попробую, приведу здесь ошибки.
John Doe
covox, куча таких ошибок:

Код
PHP Notice: Use of undefined constant clientid - assumed 'clientid' in Х:\ххххх\ххххх\хххххххх\index.php on line 65

Причём, на сколько я заметил, все касаются "clientid".
bilanich
Цитата(John Doe @ 10.06.2011 - 18:08) *
covox, куча таких ошибок:

Код
PHP Notice: Use of undefined constant clientid - assumed 'clientid' in Х:\ххххх\ххххх\хххххххх\index.php on line 65

Причём, на сколько я заметил, все касаются "clientid".



Если это ошибки, то поправьте пожалуйста и выложите поправленый скрипт.
John Doe
Цитата(bilanich @ 10.06.2011 - 21:24) *
Если это ошибки, то поправьте пожалуйста и выложите поправленый скрипт.

Без паники!
Это у меня не работает. Возможно, что-то не то с настройками PHP.
John Doe
Ё-моё!
Разбудил сервер, загружаю страницу - работает!

Единственное - фото победителя лотереи не отображается. В чём может быть проблема?
John Doe
Цитата(John Doe @ 10.06.2011 - 22:12) *
Единственное - фото победителя лотереи не отображается. В чём может быть проблема?


Тоже заработало. - Включил расширение php_gd2.
covox
Цитата(John Doe @ 10.06.2011 - 19:08) *
covox, куча таких ошибок:

Код
PHP Notice: Use of undefined constant clientid - assumed 'clientid' in Х:\ххххх\ххххх\хххххххх\index.php on line 65

Причём, на сколько я заметил, все касаются "clientid".

это нотис. не имеет значения. просто я забыл кавычки внутри скобок в массиве поставить. пхп их сам вставляет, но пишет нотисы.
John Doe
covox, скажите, пожалуйста, по какой причине решили устанавливать скидки для Top5 методом перевода клиентов в другую категорию, а не простым изменением значения скидки. Смотрю - поле "discount" в Вашей таблице имеется, но не используется.

Хочу себе cделать втрой вариант, но может Вы наткнулись на какие-то подводные камни, и потому поле "discount" не используется?

И ещё: подскажите, пожалуйста, как решить проблему отображения русских ников в Top5?
covox
Цитата(John Doe @ 16.06.2011 - 04:08) *
covox, скажите, пожалуйста, по какой причине решили устанавливать скидки для Top5 методом перевода клиентов в другую категорию, а не простым изменением значения скидки. Смотрю - поле "discount" в Вашей таблице имеется, но не используется.

Хочу себе cделать втрой вариант, но может Вы наткнулись на какие-то подводные камни, и потому поле "discount" не используется?

Я побоялся что в результате случайного глюка скидки могут накрутиться беспредельно. а так, как сейчас, у меня всегда только 5 человек в группе скидок т.к. сначала все скидки сбрасываются, а потом пишутся пяти человекам.

Цитата(John Doe @ 16.06.2011 - 04:08) *
И ещё: подскажите, пожалуйста, как решить проблему отображения русских ников в Top5?

этот нюанс не тестировался. имхо где-то виктор не рекомендовал юзать русские ники. мои операторы просто не заводят таких юзеров.
John Doe
Благодарю, covox!
С русскими никами помогло это:
Код
iconv('cp1251', 'UTF-8', ...)
bilanich
Цитата(John Doe @ 17.06.2011 - 01:12) *
Благодарю, covox!
С русскими никами помогло это:
Код
iconv('cp1251', 'UTF-8', ...)


Кодировку куда вставить?
John Doe
Цитата(bilanich @ 17.06.2011 - 13:34) *
Цитата(John Doe @ 17.06.2011 - 01:12) *
Благодарю, covox!
С русскими никами помогло это:
Код
iconv('cp1251', 'UTF-8', ...)


Кодировку куда вставить?


Я всё расставил. На месте многоточия - строка.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2021 IPS, Inc.