Меню
Меню сайта

На правах рекламы


Вход на сайт
Забыл пароль · Регистрация

Поиск

Наш опрос
Самый легендарный сталкер
Всего ответов: 585

Мини-чат

Статистика

Друзья
Моды,патчи,бильды,книги,скрипты,шаблоны,ролевая ЗДЕСЬ!

Реклама

Деньги с возможностью снятия/прибавления - Сталкер форум.Место общения сталкеров.
Активный и развитый форум сайта по игре сталкер.
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Сталкер форум.Место общения сталкеров. » Web Раздел » Скрипты сталкер для Ucoz » Деньги с возможностью снятия/прибавления ((счетчики не используются))
Деньги с возможностью снятия/прибавления
volazar Дата: Суббота, 12.10.2013, 19:39 | Сообщение # 1
Группа

Информация

Сообщений: 10
Награды: 3
Репутация: 31

Персонаж

Номер счета(ID): 4460


Специализация:
Титул
1 уровень
Буквально пару часов назад делал для своего сайта и решил выложить тут.
Что имеем: скрипт денег с начислениями за определенные действия, а также снятия/прибавления денег без использования стандартных модулей и счетчиков пользователя.

Для начала в ПСП вставим следующие ф-ии:
Код
<script type="text/javascript" src="http://stalker-gamers.ru/PSP/styles_and_scripts/edit.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var statestring = '$_STATE$';
statearray = statestring.split(',');
var a = $_COM_ENTRIES$*2; // комментарии
var b = $_LOAD_ENTRIES$*2; // файлы        
var c = $_FORUM_ENTRIES$*2; // форум
var d = $_PUBL_ENTRIES$*2; // статьи
var e = $_VIDEO_ENTRIES$*2; // видео
var f = $_REPUTATION$*1; // репутация
var g = $AWARDS$*1; // награды
var h = 150; // регистрация
var p = statearray[0]; //+
var m = statearray[1]; //-

var presubtotal = a+b+c+d+e+f+g+h;
var subtotal = +p+presubtotal;
var total = subtotal-m;
               
output = '<fieldset><legend>Деньги за активность:</legend>Комментарии (<a href="$_COM_ACTIVITY_URL$">$_COM_ENTRIES$</a>): <b>'+ a +' руб.</b><hr>Файлы (<a href="$_LOAD_ACTIVITY_URL$">$_LOAD_ENTRIES$</a>): <b>'+ b +' руб.</b><hr>Сообщения на форуме (<a href="$_FORUM_ACTIVITY_URL$">$_FORUM_ENTRIES$</a>): <b>'+ c +' руб.</b><hr>Статьи в библиотеке (<a href="$_PUBL_ACTIVITY_URL$">$_PUBL_ENTRIES$</a>): <b>'+ d +' руб.</b><hr>Видеозаписи (<a href="$_VIDEO_ACTIVITY_URL$">$_VIDEO_ENTRIES$</a>): <b>'+ e +' руб.</b><hr>Уважение ($_REPUTATION$): <b>'+ f +' руб.</b><hr>Награды ($AWARDS$): <b>'+ g +' руб.</b><hr>Получено при регистрации: <b>'+ h +' руб.</b></fieldset><fieldset><legend>Денежные операции:</legend>Начисления: <b>'+ p +' руб.</b><hr>Снятия: <b>'+ m +' руб.</b></fieldset><fieldset><legend>Итоги:</legend>Всего денег: <b>'+ total +' руб.</b></fieldset>';        
$("#money").html(total);
});
function info_money(){        
        new _uWnd('info_money', 'Информация', 330, 100, {align: 0}, '<fieldset><legend>Как заработать:</legend>Деньги можно получить при регистрации (единовременная выплата 150 рублей), за написание сообщений на форуме, добавление файлов/статей/видеозаписей, за репутацию и награды, а также как премию от администрации сайта.</fieldset><fieldset><legend>Расценки:</legend>1 комментарий = 2 рубля<br>1 файл = 2 рубля<br>1 сообщение на форуме = 2 рубля<br>1 статья = 2 рубля<br>1 видеозапись = 2 рубля<br>1 ед. уважения = 1 рубль<br>1 награда = 1 рубль</fieldset>');        
};
function money_edit(arg) {
        userData.edit({state:arg},'$_USER_ID$','$_USER_ID$');
        tips();
};
</script>


Что мы тут имеем: нужные переменные, которые будем использовать в ф-ях, справки, редактирование.
(файл со скриптами можно залить к себе на сайт, а также картинку из самого файла).

В нужном месте вставляем следующее:
Код
<font color="#00FF00"><b>Деньги:</b></font> <b><a href="#" id="money" onclick="new _uWnd('money', 'Деньги', 390, 200, {customButtons:{'4533': [true, function (){info_money()}]},align:0},output);return false;">(...)</a></b><?if($GROUP_ID$="4")?>[<a href="javascript://" onclick="money('$_USER_ID$');">±</a>]<?endif?>
<div id="money_inv" style="display:none;">$_STATE$</div>


Здесь непосредственно выводится баланс пользователя (при щелчке на него открывается справка с информацией о заработке), а также группа с ID=4 получает доступ к его редактированию.
Плюс в аякс окне появляется кнопка "?" рядом с кнопкой закрытия окна, которая также выводит справку.
Скрин:


Мы не зря писали чуть выше следующее:
Код
var statestring = '$_STATE$';
statearray = statestring.split(',');
.......
.......
var p = statearray[0]; //+
var m = statearray[1]; //-
.......
.......

$_STATE$ - это поле с личной информацией (называется штат). Вмещает в себя до 35 знаков. Его мы и используем для прибавления/отнятия денег.
В нашем случае пишется 2 значения через запятую (она разделитель). 1 значение прибавляет (statearray[0]), 2 значение отнимает (statearray[1]).
Просто так сложить statearray[0] и statearray[1] - нельзя. Если 1 значение будет 100, а второе 200 - получим 100200.
Для этого достаточно поставить + перед переменной, который преобразует строку в число:
Код
var subtotal = +p+presubtotal;
.

С этим все ясно, но неудобно же - постоянно лезть в редактирование личных данных пользователя, менять значения и вводить капчу. А выход есть: будем редактировать в ajax окне!

Все нужное для этого - мы уже написали (ф-ия money_edit, money и файл edit.js).
Опишу подробнее:
В файле edit.js ф-ии отправки формы на сервер, ф-ии получения текущего значения поля "Штат" (нужно для того, чтобы появившаяся форма, в которой будем редактировать "Штат" появлялась не пустой, а уже заполненной теми значениями, которые были сохранены ранее), а также подсказки.

Ф-ия money (в которую мы передаем ID пользователя) вытягивает с помощью get запроса значение поля "Штат" и вставляет его в нашу форму для редактирования, а также создает ajax окно с этой самой формой.
С вытягиванием через get я "схитрил". Создал невидимый блок, где вывел $_STATE$, и уже его значениями заполнял форму.
Вытянуть напрямую с формы на странице редактирования данных - не получилось. Либо я кривой, либо get не тянет информацию с input'a.
ID пользователя нужен для того, чтобы на каждой странице загружались данные того пользователя, профиль которого открыт (иначе всегда профиль человека, который просматривает).

Ф-ия money_edit передает значение value нашей формы (русским языком - текст, который мы ввели) в файл edit.js для функции userData.edit.
Также вызывается подсказка при появлении окна с кодом безопасности.
Тут мы также передаем в ф-ию ID юзверей. Это нужно для того, чтобы после редактирования, изменения применялись к тому профилю, откуда было вызвано редактирование (Вася зашел к Пете и поменял ему город. В результате у Пети ничего не поменялось, а вот у Васи изменилось).

Вроде все описал.
На скрине выше, видно рядом с суммой "+/-". Жмем на него, откроется окошко с формой, меняем значения, жмем на кнопку "Изменить". Появляется капча, вводим ее, страница обновляется. Profit!


Надеюсь пост окажется полезным.
Авторство - мое, за исключением отправки формы на сервер (взята из "Смена ICQ в ajax окне") и немного переделана: баг с вводом капчи (была ошибка в скрипте и проверялось 4 знака, а не 5), добавлена передача ID пользователя при обращении к странице редактирования данных (/index/11), и автообновление после ввода кода.

UPD: Добавлена ф-ия уведомления пользователя в ЛС о изменении баланса.
UPD2: В уведомления добавлены расчеты.
В связи с обновлением скриптов, ничего работать после всех действий описанных выше - не будет.
Что нужно сделать, чтобы все работало:

Во первых: обновить у себя файл edit.js (если перекачан к себе на сайт (ссылка вверху), иначе - ничего с ним делать не надо).
(Добавлена форма ввода причины изменения, ф-ия отправки ЛС пользователю).

Во вторых: заменить ф-ию money_edit на следующую:
Код

function money_edit(arg,msg) {
  userData.edit({state:arg},'$_USER_ID$','$_USER_ID$');
  tips();
  var argarray = arg.split(',');
  var mp = argarray[0]-statearray[0];
  var mm = argarray[1]-statearray[1];
  var money = (mp+total)-mm;
      
  edit_pm('$_USERNAME$',msg,total,money,mp,mm);
};

(Добавлен вызов ф-ии отправки ЛС и передача нужных аргументов. А также расчеты. Подробнее:
Берется прошлое числовое значение (которое было до изменения), от него минусуется текущее значение (которое было введено при изменении). Для чего это нужно? Для того, чтобы рассчитать разницу между прошлым снятием и текущим.
Например: прошлое значение было 1000. Нам надо выдать пользователю 500. Складываем 1000 и 500 - получаем то значение, которое нужно записать в окно. Если просто вывести текущее значение, оно будет в себя включать и предыдущее. С помощью нехитрых расчетов мы как раз и находим разницу между значениями прошлыми и текущими, и которую выводим в уведомлении в ЛС.)

Во третьих: сделать переменную total глобальной, для этого найти:
Код
var total = subtotal-m;

И заменить на:
Код
total = subtotal-m;


Как это работает:
Все также открываем окно редактирования баланса и наблюдаем новую форму "Причины изменения".
Изменяем все что нужно, записываем причину, жмем на кнопку "Изменить", вводим капчу.

В ЛС к пользователю, у которого вы изменяли - придет сообщение с уведомлением о изменении, с причиной (если она была указана) и небольшими расчетами.
В расчетах показывается баланс пользователя до изменения, снятия, начисления и текущий баланс (после всех снятий/начислений).


Сообщение отредактировал volazar - Воскресенье, 13.10.2013, 18:44
 
Arlekin_Moloko Дата: Суббота, 12.10.2013, 19:54 | Сообщение # 2
Группа

Информация

Сообщений: 180
Награды: 0
Репутация: 36

Персонаж

Номер счета(ID): 17135


Специализация:
Титул
Зам.Гл GameMaster
Самостоятельно написанные баллы... неплохо... но баян

 
Politic Дата: Воскресенье, 13.10.2013, 13:57 | Сообщение # 3
Группа

Информация

Сообщений: 7621
Награды: 12
Репутация: 1511

Персонаж

Номер счета(ID): 230


Специализация:
Титул
10 уровень
В начале подумал, что самые обычные сплагиаченные деньги. Потом понял, что выведена система ресохранения и умело использовано поле штат. Спасибо, вижу, что умельцы еще не вымерли)
+ Однозначный, за креатив.
 
volazar Дата: Воскресенье, 13.10.2013, 14:41 | Сообщение # 4
Группа

Информация

Сообщений: 10
Награды: 3
Репутация: 31

Персонаж

Номер счета(ID): 4460


Специализация:
Титул
1 уровень
Politic, Спасибо за отзыв.

Обновил шапку темы, добавил обновление.
 
Оригами13 Дата: Воскресенье, 13.10.2013, 17:25 | Сообщение # 5
Группа

Информация

Сообщений: 1276
Награды: 4
Репутация: 323

Персонаж

Номер счета(ID): 1953


Специализация:
Титул
Очень занятно.. очень.
Лично мне пригодится, за это + и ставлю chad01018

[b1] go [cpas]![/cpas][/b1]

Давно я на эту кнопочку не нажимал :3



Все люди изначально плохие. Хорошими они могут быть в меру своего желания и возможности. ©
Плохое образование - залог демократии. ©
 
StraNNik Дата: Понедельник, 23.12.2013, 13:21 | Сообщение # 6
Группа

Информация

Сообщений: 3
Награды: 0
Репутация: 0

Персонаж

Номер счета(ID): 17317


Специализация:
Титул
1 уровень
Здравствуйте, у меня после установки скрипта по вашему написанному получилось вот что errm

Прикрепления: 4323412.jpg (107.1 Kb)
 
volazar Дата: Вторник, 24.12.2013, 20:55 | Сообщение # 7
Группа

Информация

Сообщений: 10
Награды: 3
Репутация: 31

Персонаж

Номер счета(ID): 4460


Специализация:
Титул
1 уровень
StraNNik, В редактировании личных данных найди поле штат и поставь там значения 0,0. Само поле естественно должно быть активировано.
ЗЫ: Подправил ссылку на файл в шапке.
ЗЗЫ: Решение для новых пользователей (поле будет заполнятся стандартными значениями (0,0) без участия юзера при регистрации).
В шаблон с формой регистрации (форма регистрации локальных пользователей) поместить следующее:
Код
$(document).ready(function() {
     $('input[name=state]').each(function() {
         if($(this).val()=="") {
           $(this).val("0,0");
         };
     });
});

Соотв. NaN не будет.
Тот же самый код можно поместить и в форму редактирования личных инфо. Затем попросить пользователей зайти в свои данные и не изменяя их, нажать на кнопку "Сохранить".
ЗЗЫ: Само поле штат, поидее (так сделано у меня), должно быть скрыто от глаз простых пользователей. Как в форме регистрации, так и в редактировании личных данных. Однако в личных данных надо скрыть "умело". Т.е с помощью условных операторов - если группа админов, то показываем. Иначе скрываем через display:none.
Если так не сделать, то значения в поле будут каждый раз исчезать, после того, как пользователь что то изменит на странице.
Если все еще непонятно, приведу пример:
Код
<?if($GROUP_ID$ == '4'||$GROUP_ID$="5")?>
<?if($STATE_FL$)?>
<tr id="siM21"><td class="manTd1" id="siM22">$STATE_SIGN$</td><td class="manTd2" id="siM23">$STATE_FL$</td></tr><tr><td height="10" class="manTdSep" colspan="2"><hr class="manHr" /></td></tr>
<?endif?>
<?else?>
<div style="display:none"><?if($STATE_FL$)?>$STATE_FL$<?endif?></div>
<?endif?>
.

Добавлено (24.12.2013, 20:55)
---------------------------------------------
Хм, не подправил. Просьба тому, кто может изменить:

Код
<script type="text/javascript" src="http://stalker-gamers.ru/PSP/styles_and_scripts/edit.js"></script>

На
Код
<script type="text/javascript" src="http://stalker-gamers.ru/PSP/styles_and_scripts/js/edit.js"></script>
 
Сталкер форум.Место общения сталкеров. » Web Раздел » Скрипты сталкер для Ucoz » Деньги с возможностью снятия/прибавления ((счетчики не используются))
  • Страница 1 из 1
  • 1
Поиск:

Портал MyStalkers.ru является собственностью его владельца.
Любое использование материалов сайта возможно только с разрешения его администрации и гиперссылки на наш портал.
Дизайн сделал Александр Пюссе. В дизайне использованы части графики различных модификаций по сталкеру.
MyStalkers.ru © 2010 - 2015