Назад

Премиум нпц

Автор: champ: Дата: 11.19.2009

писал не я ( что видно по копирайтам)


//===== eAthena Script =====================================
//= Premium Maker
//===== By
//= AmsTaFF
//===== Current Version: =====================================
//= 1.2 (2009-10-14)
//===== Compatible With: ====================================
//= eAthena SVN Trunk 13368
//===== Description: ========================================
//= 1.0 - Сделан и написан сам код [AmsTaFF]
//= 1.1 - Дополнен и немного исправлен [AmsTaFF]
//= 1.2 - Полностью переписан, унифицирован. Появилась
//= возможность продавать айтемы за любую переменную
//= и за любой предмет. [AmsTaFF] (2009-10-14)
//===== Требования: =======================================
//= - ф-ция unix2date (by AmsTaFF)
//= - файл DEFINES.txt
//= - файл DEBUG.txt
//= - Создать в БД такую таблицу:
/*
CREATE TABLE `premium_accounts` (
`account_id` int(10) unsigned NOT NULL,
`unixstamp_start` int(10) unsigned NOT NULL,
`unixstamp_end` int(10) unsigned NOT NULL,
`level` int(10) unsigned NOT NULL,
PRIMARY KEY (`account_id`) USING BTREE
) ENGINE=MyISAM;
*/
//===========================================================
- script Premium Maker -1,{
function is_premium {
return callfunc("is_premium");
}
function set_premium {
return callfunc("set_premium",getarg(0),getarg(1));
}
function get_premium_enddate {
return callfunc("get_premium_enddate");
}
function get_premium_startdate {
return callfunc("get_premium_startdate");
}
function del_premium {
return callfunc("del_premium");
}
function debug { return callfunc("Debug",$@PREM_DBG,getarg(0)); }
set .@name$,"[ ^0000ffPremium Maker^000000 ]";
if (@premium_level) {
set .@prolong,1;
mes .@name$;
mes "Здравствуйте, что вы хотите сделать?";
set .@prolong_exit,1; // флаг выхода из продления премиума
set .@script_exit,0; // флаг выхода из скрипта
while (.@prolong_exit) {
switch(select("- Продлить премиум:- Информация:- Обнулить премиум:- Ничего не хочу")) {
case 1:
set .@prolong_exit,0;
set .@index,is_premium()-1;
break;
case 2:
next;
mes .@name$;
mes "Информация по Премиум аккаунту:";
set .@index,(is_premium() - 1);
mes "^0000ff"+$@rus_names$[.@index]+"^000000";
mes "Дата покупки:";
debug("Стартовая дата: "+get_premium_startdate());
mes "^0000ff"+unix2date(get_premium_startdate(),"%Y-%m-%d %H:%M:%S",21)+"^000000";
mes "Истекает: ";
debug("конечная дата: "+get_premium_enddate());
mes "^0000ff"+unix2date(get_premium_enddate(),"%Y-%m-%d %H:%M:%S",21)+"^000000";
switch(select("- Вернутся в Меню:Выйти")) {
case 2: set .@script_exit,1; break;
default: break;
}
break;
case 3:
next;
mes .@name$;
mes "Вы уверены, что хотите обнулить премиум аккаунт?";
switch(select("- Да:- Нет")) {
case 1: del_premium(); set .@script_exit,1; break;
default: break;
}
break;
default: set .@script_exit,1; break;
}
}
if (.@script_exit)
close;
}
if (!.@prolong) {
mes .@name$;
mes "Здравствуйте. Я могу сделать вам ^0000ffПремиум^000000 аккаунт";
if( select("- ^0000ffПродолжайте^000000:- Не интересует") == 2 ) close;
}
next;
mes .@name$;
mes "Я вам могу предложить:";
set .@j,0;
for (set .@i,0; .@i // заодно создаем временный массив для более понятного меню
if (.@prolong == 0) { // заказываем премиум в первый раз
set .@tmp_names$[.@j],"- ^0000ff"+$@rus_names$[.@i]+"^000000 (^ff0000"+$@prem_valute_$[.@i]+"^000000)";
set .@tmp_indexes[.@j],.@i;
mes .@tmp_names$[.@j];
set .@j,.@j+1;
} else if (.@prolong == 1 && $@prem_lvls[.@i] == @premium_level) { // даем возможность повысить один и тот же вид премиума разными валютами
set .@tmp_names$[.@j],"- ^0000ff"+$@rus_names$[.@i]+"^000000 (^ff0000"+$@prem_valute_$[.@i]+"^000000)";
set .@tmp_indexes[.@j],.@i;
mes .@tmp_names$[.@j];
set .@j,.@j+1;
}

}
debug("Размер массива .@tmp_names$: "+getarraysize(.@tmp_names$));
if (!.@prolong) {
mes "...";
mes "О привелегиях, которые они дают вы можете прочитать на сайте ^0000ff"+$@SERVER_URL$+"^000000";
}
next;
mes .@name$;
mes "Вы уже выбрали какой хотите?";
set .@tmp_menu$,"- "+implode(.@tmp_names$,":- ")+":- Нет, спасибо";
set .@index,(.@tmp_indexes[select(.@tmp_menu$) - 1]);

if (.@index == getarraysize(.@tmp_names$))
close;

// удаляем временные данные
set .@tmp_menu$,"";
deletearray .@tmp_names$[0],getarraysize(.@tmp_names$);
debug("Временные переменные удалены");
//
next;
mes .@name$;
if (.@prolong) {
debug("Работает на продление");
set .@word_one$,"продлить";
} else {
debug("Работает в обычном режиме");
mes "Отлиный выбор.";
set .@word_one$,"заказать";
}
mes "Прейскурант:";
set .@i,0; // счетчик
set .@tmp_menu$,"";
// пожерствовал кол-вом кода ради его понятности
for (set .@j,3;.@j<(getarraysize($@ENG_DATAS$)-1);set .@j,.@j+1) {
if (getd("$@prem_"+$@ENG_DATAS$[.@j]+"["+.@index+"]") != 0) {
mes "1 "+callfunc ("get_right_word",$@RUS_DATAS$[.@j],1)+" ^ff0000"+getd("$@prem_"+$@ENG_DATAS$[.@j]+"["+.@index+"]")+" ^0000ff"+$@prem_valute_$[.@index]+"^000000";
if (.@i > 0)
set .@tmp_menu$,.@tmp_menu$ + ":";
set .@tmp_menu$,.@tmp_menu$+"- "+callfunc ("get_right_word",$@RUS_DATAS$[.@j],1);
set .@tmp_type[.@i],.@j;
set .@i,.@i+1;
}
}
mes "При покупке 6/12 месяцев - скидка";
// обработка меню и ответа
set .@datatype,select(.@tmp_menu$+": Выйти")-1;
if (.@datatype == .@i)
close;
debug(".@datatype = "+.@datatype+"; .@tmp_type[.@datatype]="+.@tmp_type[.@datatype]);
next; mes .@name$;
// пользователь заказывает кол-во отрезков времени
mes "На сколько "+callfunc ("get_right_word",$@RUS_DATAS$[.@tmp_type[.@datatype]],5)+" вы хотите "+.@word_one$+" себе ^0000ff"+$@rus_names$[.@index]+"^000000?";
input .@amount;
next;
// обработка введенных данных
if (.@amount <= 0)
set .@amount,1;
else if (.@amount > $@pr_limits[.@tmp_type[.@datatype]])
set .@amount,$@pr_limits[.@tmp_type[.@datatype]];
mes .@name$;
set .@cost,getd("$@prem_"+$@ENG_DATAS$[.@tmp_type[.@datatype]]+"["+.@index+"]")*.@amount;
debug("Цена равна - "+.@cost);
// рассчет скидки
if ($@prem_price_type[.@index] == 0) {
if (.@tmp_type[.@datatype] == 5 && .@amount >= 6 && .@amount < 12) {
set .@cost,.@cost-$@prem_diskount[.@index];
} else if (.@tmp_type[.@datatype] == 5 && .@amount == 12) {
set .@cost,.@cost-(($@prem_diskount[.@index]*250)/100);
}
debug("Цена после скидки равна - "+.@cost);
}
// информатизация пользователя
mes .@amount+" "+callfunc ("get_right_word",$@RUS_DATAS$[.@tmp_type[.@datatype]],.@amount)+" будет стоить ^ff0000"+.@cost+"^000000 ^0000ff"+$@prem_valute_$[.@index]+"^000000.";
mes "Вы согласны?";
if(select("- Да:- Нет") == 2) close;
// кол-во секунд
set .@sec_to_incr,$@UNIX_STAMPS[.@tmp_type[.@datatype]]*.@amount;
debug("Кол-во секунд для добавляения: "+.@sec_to_incr);
if ($@prem_price_type[.@index] == 0) {
debug("Кол-во валюты "+$@prem_valute_var$[.@index]+" = "+getd($@prem_valute_var$[.@index]));
if ( getd($@prem_valute_var$[.@index]) < .@cost) {
next;
mes .@name$;
mes "Простите, но у вас не хватает ^ff0000"+(.@cost - getd("$@prem_valute_var$["+.@index+"]"))+" ^0000ff"+getd("$@prem_valute_$["+.@index+"]")+"^000000";
close;
} else {
setd $@prem_valute_var$[.@index],getd($@prem_valute_var$[.@index]) - .@cost;
}
} else if ($@prem_price_type[.@index] == 1) {
debug("Кол-во предметов '"+getitemname(atoi($@prem_valute_var$[.@index]))+"' = "+countitem(atoi($@prem_valute_var$[.@index])));
if (countitem(atoi($@prem_valute_var$[.@index])) < .@cost) {
next;
mes .@name$;
mes "Простите, но у вас не хватает ^ff0000"+(.@cost - countitem(atoi($@prem_valute_var$[.@index])))+" ^0000ff"+getitemname(atoi($@prem_valute_var$[.@index]))+"^000000";
close;
} else {
delitem atoi($@prem_valute_var$[.@index]),.@cost;
}
}
// .....
// раздел обработки данных
// .....
if (.@prolong == 0) {
set_premium(.@sec_to_incr,$@prem_lvls[.@index]);

if ($@prem_give_items)
getitem $@prem_items[.@index],1;

next;
mes .@name$;
mes "Теперь вы обладатель ^0000ff"+$@rus_names$[.@index]+"^000000 аккаунта";
mes "действителен до: ";
mes "^0000ff"+unix2date(get_premium_enddate(),"%Y-%m-%d %H:%M:%S",21)+"^000000";
mes "Для завершения операции - перезайдите.";
} else if (.@prolong == 1) {
set_premium(.@sec_to_incr,$@prem_lvls[.@index]); // продление
next;
mes .@name$;
mes "Премиум продлен до ";
mes "^0000ff"+unix2date(get_premium_enddate(),"%Y-%m-%d %H:%M:%S",21)+"^000000";
}
close;
}

Core

//===== eAthena Script =======================================
//= Premium Maker Core (BackEnd)
//===== By: ==================================================
//= AmsTaFF
//===== Current Version: =====================================
//= 1.0 (2009-10-14)
//===== Compatible With: =====================================
//= eAthena SVN Trunk 13368
//===== Description: =========================================
//= 1.0 - полностью переделана старая версия ядра, новый
//= метод использования ф-ций. Ф-ции разбиты на много
//= мелких ф-ций.
//============================================================
// Проверка наличия купленного премиума
function script is_premium {
// проверка на наличие непросроченного аккаунта
query_sql "SELECT `level` FROM `premium_accounts` WHERE `account_id` = "+getcharid(3),.@return;
return .@return;
}
// ф-ция обработки данных на загрузке перса
function script OnMapLoadCheck {
if (playerattached()) {
set @premium_level,callfunc("is_premium");
set .@tmp_enddate,callfunc("get_premium_enddate");
if ( @premium_level != 0 ) {
if(.@tmp_enddate <= gettimetick(2)) {
announce "У вас истек премиум - через 5 секунд вам понадобится перезайти",bc_self;
sleep2 5000;
callfunc("del_premium");
}
announce "Статус: "+$@rus_names$[@premium_level-1]+" | Заканчивается: "+unix2date(.@tmp_enddate,"%Y-%m-%d %H:%M:%S",21)+".",bc_self;
if ($@prem_give_items)
if (countitem($@prem_items[@premium_level-1]) == 0)
getitem $@prem_items[@premium_level-1],1;

}
return 1;
} else return 0;
}
// ф-ция установки премиума
function script set_premium {
// getarg(0) = +unix time stamp // сколько добавить секунд
// getarg(1) = lvl
set .@tmp_dateend,callfunc("get_premium_enddate");
if (getarg(0) < 0)
return 0;
if (.@tmp_dateend < gettimetick(2)) {
if (getarg(1) < 1)
return 0;
query_sql "REPLACE INTO `premium_accounts` VALUES("+getcharid(3)+","+gettimetick(2)+","+( gettimetick(2)+getarg(0) )+","+getarg(1)+")",.@bla;
query_sql "UPDATE `login` SET `level` = "+getarg(1)+" WHERE `account_id`= "+getcharid(3);
callfunc("OnMapLoadCheck"); // обновляем данные
} else { // продливаем премиум
query_sql "UPDATE `premium_accounts` SET `unixstamp_end` = `unixstamp_end` + "+getarg(0)+" WHERE `account_id` = "+getcharid(3)+"";
}

return 1;
}
// ф-ция удаления премиума
function script del_premium {
query_sql "DELETE FROM `premium_accounts` WHERE `account_id` = "+getcharid(3);
query_sql "UPDATE `login` SET `level` = 0 WHERE `account_id` = "+getcharid(3);
if ($@prem_give_items)
if (countitem($@prem_items[@premium_level-1]) == 1)
delitem $@prem_items[@premium_level-1],countitem($@prem_items[@premium_level-1]);
atcommand "@kick "+strcharinfo(0);
return 1;
}
// приобретаем дату окончания премиума
function script get_premium_enddate {
query_sql "SELECT `unixstamp_end` FROM `premium_accounts` WHERE `account_id`="+getcharid(3),.@return;
return .@return;
}
// приобретаем дату приобретения премиума
function script get_premium_startdate {
query_sql "SELECT `unixstamp_start` FROM `premium_accounts` WHERE `account_id`="+getcharid(3),.@return;
return .@return;
}
// Настройки и Эвенты
- script PREM_conf -1,{
OnInit:
// тип оплаты премиумов
setarray $@prem_price_type[0],0, 0, 0, 1;
// уровни премиумов
setarray $@prem_lvls[0], 1, 2, 2, 1;
// cтоимость обычного премиума
setarray $@prem_day[0], 5, 50, 15, 0;
setarray $@prem_week[0], 30, 300, 70, 0;
setarray $@prem_month[0], 100,1000, 200,1;
// скидка за покупку према >= 6 мес.
setarray $@prem_diskount[0], 100,500, 100,2;
// предметы, которые выдаются каждому премиуму при получении оного
set $@prem_give_items,1;
setarray $@prem_items[0], 17028,17029,17029, 17028;
// массивы с названиями валют и их var'ами
setarray $@prem_valute_var$[0],"Zeny","e_zeny","#CASHPOINTS",617;
setarray $@prem_valute_$[0],"zeny","e-zeny","CashPoints","TCG";
// массив с названиями
setarray $@rus_names$[0],"Премиум","Супер Премиум","Супер Премиум","Премиум";
// лимит на кол-во купленных отрезков времени (не более 30 дней, не более 60 секунду и т.п.)
setarray $@pr_limits[0],60,60,60,30,4,12;
// DEBUG
set $@PREM_DBG,1;
// Switcher
set $@PREM_SWITCHER,1;
end;
OnPCLoginEvent:
callfunc("OnMapLoadCheck");
}


скрипт взят с ea-scripts.ru

Автор: champ: Дата: 11.19.2009

я с коре удалил а с первого сил нехватило ! чуть позже отредактирую если нужно.. :)

Автор: Sanasol: Дата: 11.19.2009

Окей. ссылку на оригинал кинь тогда. а-ля копирайт. еа скриптс или как там я непомню

Автор: champ: Дата: 11.19.2009

исправил.