Назад

[release] Buying Store

Автор: Starrk: Дата: 01.17.2011

Подробнее про данную систему можно почитать на iRO Wiki (англ): .

[SIZE=3]Скачать:[/SIZE][LIST]
[*]
[*]
[*]
[*]
[*]
[*] от [/LIST]Требования:[LIST]
[*]kRO RE клиент от 20-04-2010 или более поздний.[/LIST][SIZE=2]Changelog:[/SIZE][LIST]
[*]v1.0 - Начальная.
[*]v2.0 - Содержит исправления от , оптимизированный патч от и прочие оптимизации кода.
[*]v2.1 - Некоторые исправления и оптимизация кода.
[*]v2.2 - Добавлен пропущенный код в clif.c.
[*]v2.3 - Исправлена ошибка при которой клиент удалял из инвентаря удвоенное количество проданных вещей. Фикс от .[/LIST][SIZE=2]TODO:[/SIZE][LIST]
[*]Проверка на повторяющиеся id при открытии магазина.
[*]Добавление/фиксы информационных сообщений.
[*]Скриптовые функции и at-команды.
[*]Оптимизация кода, исправление ошибок.[/LIST]Спасибо за предоставленный список пакетов и их структур.

Автор: Starrk: Дата: 01.24.2011

Как только, так сразу. В принципе, не смотря на всю кривоту скопипастеных функций, все работает. Таких функций всего 2, но они самые основные, просто ужасает количество различных проверок которые желательно бы не упустить. Сейчас удалю свои заметки, скачаю чистую еА, сделаю дифф, через час-полтора выложу сюда и в на eathena.ws.

Автор: MaXi: Дата: 01.24.2011

Круто круто!!!!)

Автор: Jarek: Дата: 01.24.2011

//Buying Store Skill quest npc and Shabby License Seller
que_job01,90,90,5 script Black Marketeer#BSsq 456,{
mes "[Black Marketeer]";
mes "Псс.";
mes "Привет.";
mes "Действующие лицензии";
mes "на открытие магазина";
mes "для скупки интересуют?";
if(select("Да, конечно.:Нет, не интересует.")==2){
mes "[Black Marketeer]";
mes "Уверен, что ты передумаешь.";
close;
}
mes "[Black Marketeer]";
mes "^0000FF500 z^000000. за штуку,";
mes "и лицензии твои.";
mes "В целях безопасности";
mes "я не продаю больше 10 за раз.";
next;
mes "[Black Marketeer]";
mes "Итак, сколько ты хочешь?";
mes "Введи 0, если ты не будешь покупать.";
do {
input @SLcount;
} while ((@SLcount<0) || (@SLcount>10));
if(!@SLcount){
mes "[Black Marketeer]";
mes "Уверен, что ты передумаешь.";
close;
}
if(Zeny<500*@SLcount){
mes "[Black Marketeer]";
mes "Кажется, тебе не хватает наличных.";
close;
}
if(!checkweight(12548,@SLcount)){
mes "[Black Marketeer]";
mes "Ха, да ты забит под завязку. Избавься от ненужного хлама.";
close;
}
mes "[Black Marketeer]";
mes "По рукам.";
set Zeny, Zeny-500*@SLcount;
getitem 12548,@SLcount;
close;
}

alberta_in,30,28,6 script Purchasing Team#BSsq 48,{
if(BaseJob!=Job_Merchant){
mes "[Kevin]";
mes "Добрый день.";
close;
}
if(getskilllv("ALL_BUYING_STORE")){
mes "[Kevin]";
mes "Рад видеть тебя, друг.";
mes "Хочешь купить лицензии на скупку по ^0000FF200 z^000000. за штуку?";
if(select("Да:Нет")==2){
mes "[Kevin]";
mes "Удачи!";
close;
}
mes "[Kevin]";
mes "Ты можешь купить за один раз до 50 штук.";
mes "Введи 0, если ты не будешь покупать.";
do {
input @SLcount;
} while ((@SLcount<0) || (@SLcount>50));
if(!@SLcount){
mes "[Kevin]";
mes "Как хочешь. Удачи!";
close;
}
if(Zeny<200*@SLcount){
mes "[Kevin]";
mes "Друг, тебе не хватает денег.";
close;
}
if(!checkweight(12548,@SLcount)){
mes "[Kevin]";
mes "Тебе в карман столько лицензий не поместится, освободи его немного.";
close;
}
set Zeny, Zeny-200*@SLcount;
getitem 6377,@SLcount;
mes "[Kevin]";
mes "Удачи!";
close;
}
mes "[Kevin]";
mes "Рад видеть тебя, друг.";
next;
mes "[Kevin]";
mes "В нашу эпоху время - это деньги. Согласись, жалко тратить драгоценное время на поиск нужных тебе материалов.";
next;
mes "[Kevin]";
mes "Пусть лучше продавцы будут искать тебя для сбычи своего товара.";
mes "Ты согласен?";
if(select("Полностью согласен:Хм.. не совсем")==2){
mes "[Kevin]";
mes "Если изменишь свою точку зрения - обращайся, я смогу помочь в этом.";
close;
}
if(!getskilllv("MC_VENDING")){
mes "[Kevin]";
mes "Я рад, что ты согласен со мной, но я не думаю, что у тебя получиться скупать вещи, если ты их даже продавать не умеешь.";
next;
mes "^0000FF*Вам нужно обучиться умению ^FF0000Vending ^0000FF1lvl.*^000000";
close;
}
mes "[Kevin]";
mes "Я так и думал, что ты согласишься со мной!";
mes "Смотри, я могу обучить тебя новому умению, c помощью которого ты сможешь открыть магазин для скупки предметов.";
next;
mes "[Kevin]";
mes "Обучение составит ^0000FF10 000 z^000000.";
mes "Согласен?";
if(select("Да:Нет")==2){
mes "[Kevin]";
mes "Если изменишь свою точку зрения - ты знаешь, где меня найти.";
close;
}
if(Zeny<10000){
mes "[Kevin]";
mes "Тебе не хватает наличных.";
close;
}
set Zeny, Zeny-10000;
skill "ALL_BUYING_STORE",2,0;
getitem 6377,5;
mes "[Kevin]";
mes "Вот держи, для легального бизнеса нужно разрешение, если у тебя кончатся лицензии - ты можешь обратиться в любое время.";
next;
mes "[Kevin]";
mes "Позволь, напоследок объяснить несколько простых правил:";
mes "1. За раз ты сможешь скупать 5 разных предметов.";
mes "2. У тебя в инвентаре должен быть хотя бы один экземпляр каждого предмета.";
next;
mes "[Kevin]";
mes "3. На скупку можно ставать только ^0000FFлут^000000(etc) и 0000FFрасход^000000(item), ^FF0000но кроме потов^000000!";
mes "4. Каждый раз за открытие магазина ты будешь тратить одну лицензию.";
next;
mes "[Kevin]";
mes "Поздравляю тебя с новыми способностями и желаю удачи!";
close;
}

Автор: Alort: Дата: 01.24.2011

mes "2. У тебя в инвентаре должен быть хотя бы один экземпляр каждого предмета.";

Зачем, это ведь неудобно, если чел захочет скупать какие то редки вещи\карты, которых у него нет вналичии, как тогда быть?

Автор: LucifeRUS: Дата: 01.24.2011

Может, потому что на скупку можно ставить только лут и расход?не?

Автор: Alort: Дата: 01.24.2011

Цитата LucifeRUS;31264:
Может, потому что на скупку можно ставить только лут и расход?не?


Если так, то тогда я недоглядел этот момент, но ведь одними лутами и расходкой ограничиваться не тру, значит наверняка в планах и все остальное.

Автор: LucifeRUS: Дата: 01.24.2011

Хм, может ты первый пост не читал я хз, но данная авто скупка полностью идентична авто скупке на иро. Даже Jarek скрипт похожий написал.

Автор: Alort: Дата: 01.24.2011

Цитата LucifeRUS;31269:
Хм, может ты первый пост не читал я хз, но данная авто скупка полностью идентична авто скупке на иро. Даже Jarek скрипт похожий написал.


Ты прав, этот момент я упустил из виду:
Etc. Items
Non-Brewed Consumable Items

Автор: Starrk: Дата: 01.24.2011

Ты не сможешь скупать эквип с помощью этой системы, потому что как минимум клиент не будет его отображать в окне выбора. С серверной стороны, пожалуйста, поменять пару строк, но чтобы реализовать поддержку этого в клиенте, придется менять структуру пакетов, так как, допустим, информация о вещи в обычном Vending Shop описывается 22 байтами, тут же всего 6.

------
На данный момент нужно активно пытаться 'хакнуть' процесс открытия магазина и процесс продажи вещей, чтобы залатать дыры, если они имеются, пытайтесь подменять значения в пакетах, продавать несуществующий товар и тд...

Автор: Gremlin: Дата: 01.24.2011

имхо на данный момени @ab лучше
Starrk порадовал! + тебе!

Автор: Alort: Дата: 01.24.2011

Цитата Gremlin;31285:
имхо на данный момени @ab лучше
Starrk порадовал! + тебе!


И я об этом же думал, автобайшоп конечно красивее и нагляднее, но по функционалу в данный момент значительно уступает @ab :(
Но а старрик всё равно молодец да.:)

Автор: Мяфк: Дата: 01.25.2011

Круто, не знал что по пакетам можно стырить сорц.

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

Цитата Мяфк;31305:
Круто, не знал что по пакетам можно стырить сорц.


Хаха лол. Зная пакеты можно написать исходник. А не украсть :)

Автор: Starrk: Дата: 01.25.2011

[COLOR=Red]Внимание! Владельцам всех серверов необходимо обновить еА до ревизии 14682, либо вручную внести изменения сделанные в ней, так как исправляется довольно таки серьезный баг с магазинами мерчантов.

[COLOR=Black]UPD: Добавлена v2 + NPC от Jarek.

UPD: v2.1

UPD: v2.2 Теперь все должно работать корректно. Проверяйте.

UPD: v2.3 Проверяйте.
[/COLOR] [/COLOR]