Назад

Покраска головных уборов со меной спрайта

Автор: GreatMan: Дата: 03.22.2011

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

prontera,144,167,5	script	Покраска вещей	465,{
mes "[Покраска]";
mes "Привет, я могу покрасить вашы вещи.";
next;
mes "[Покраска]";
mes "Что вы хотите покрасить?.";
switch(select("Одноцветные LKH","Двухцветные LKH","Санисы","Закрыть.")){
case 1:
if (countitem(23074) < 1) goto noitem;
set .id,23074;
goto lkh;
case 2:
if (countitem(23074) < 1) goto noitem;
set .id,23074;
goto lkh2;
case 3:
if (countitem(32155) < 1) goto noitem;
set .id,32155;
goto sunn;
case 4:
close;
noitem:
mes "У вас нету вещи...";
close;
lkh:
switch(select("Ультра Чёрные","Синие","Зелёные","Красные","Белые","Розовые","Коричневые","Фиолетовые","Чёрные","Простые","Нет, я передумал")){
case 1:
set .view,780;
goto do;
case 2:
set .view,721;
goto do;
case 3:
set .view,722;
goto do;
case 4:
set .view,723;
goto do;
case 5:
set .view,724;
goto do;
case 6:
set .view,775;
goto do;
case 7:
set .view,778;
goto do;
case 8:
set .view,779;
goto do;
case 9:
set .view,720;
goto do;
case 10:
set .view,99;
goto do;
case 11:
close;
}
lkh2:
switch(select("Чёрносиние","Чёрнозолотые","Чёрнозелёные","Чёрнорозовые","Чёрнокрасные","Чёрнобелые","Чёрножёлтые","Белочёрные","Белосиние","Белозелёные","Белоголубые","Белорозовые","Белофиолетовые","Белокрасные","Беложёлтые","Нет, я передумал")){
case 1:
set .view,773;
goto do;
case 2:
set .view,772;
goto do;
case 3:
set .view,771;
goto do;
case 4:
set .view,774;
goto do;
case 5:
set .view,770;
goto do;
case 6:
set .view,776;
goto do;
case 7:
set .view,777;
goto do;
case 8:
set .view,781;
goto do;
case 9:
set .view,782;
goto do;
case 10:
set .view,783;
goto do;
case 11:
set .view,784;
goto do;
case 12:
set .view,785;
goto do;
case 13:
set .view,786;
goto do;
case 14:
set .view,787;
goto do;
case 15:
set .view,788;
goto do;
case 16:
close;
}
sunn:
switch(select("Синие","Зелёные","Чёрные","Розовые","Фиолетовые","Белые","Нет, я передумал")){
case 1:
set .view,590;
goto do;
case 2:
set .view,591;
goto do;
case 3:
set .view,593;
goto do;
case 4:
set .view,594;
goto do;
case 5:
set .view,595;
goto do;
case 6:
set .view,596;
goto do;
case 7:
close;
}
}
do:
switch(getiteminfo(.id,5))
{
case 256:
case 257:
case 769:
case 768:
set .slot,4;
break;
case 512:
case 513:
set .slot,5;
break;
case 1:
set .slot,3;
break;

}
query_sql("SELECT `item_id` FROM `change_sprite` WHERE `account_id` = '"+getcharid(3)+"' AND `item_id` = '"+.id+"'",.item_id);
if(.item_id)
query_sql("UPDATE `change_sprite` SET `view_id` = '"+.view+"' WHERE `account_id` = '"+getcharid(3)+"' AND `item_id` = '"+.id+"'");
else
query_sql("INSERT INTO change_sprite (`account_id`,`item_id`,`view_id`) VALUES ('"+getcharid(3)+"','"+.id+"','"+.view+"')");
if(isequipped(.id))
setlook .slot,.view;
close;
}


function script change {
switch(getarg(1,0))
{
case 0:
query_sql("SELECT `view_id` FROM `change_sprite` WHERE `account_id` = '"+getcharid(3)+"' AND `item_id` = '"+getarg(0)+"'",.@view);
if(.@view)
return .@view;
else
return getiteminfo(getarg(0),11);
case 1:
switch(getiteminfo(getarg(0),5))
{
case 256:
case 257:
case 769:
case 768:
set .@slot,4;
break;
case 512:
case 513:
set .@slot,5;
break;
case 1:
set .@slot,3;
break;
}
return .@slot;
}
}

P.S. Помогите ребят оч надо:(
Вообшем я в базе в таблице удалил все сохранённые цвета и теперь перестало сохраняться...
А вот кста таблица ещё....
CREATE TABLE IF NOT EXISTS `change_sprite` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`account_id` int(11) unsigned NOT NULL,
`item_id` int(11) unsigned NOT NULL,
`view_id` int(4) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=25 ;

Автор: GreatMan: Дата: 03.25.2011

Цитата Гробовщик;36427:
А не легче сделать просто замену предмета, то бишь удаляешь один, даешь другой, с нужным цветом?


Нет не легче т.к. можно красить 1 раз... А с этой покраской одну шмотку можно красить безконечно...

И что на таком форуме нет людей, которые смогут мне помочь чтоли?(

Автор: Cole McCormick: Дата: 03.25.2011

См пример, слот карты.

Автор: GreatMan: Дата: 03.26.2011

Цитата Naota;36735:
См пример, слот карты.


Эти слова мне ничего не дали(

Автор: GreatMan: Дата: 03.28.2011

Ну ребят выручите пож( Неужели никто незнает в чём трабла??*

Автор: GreatMan: Дата: 03.29.2011

Цитата Tori;37224][url]http://rus-ea.ru/showthread.php?t=1539&highlight=%F1%EB%EE%F2+%EA%E0%F0%F2%FB[/url:


Вы не поняли..... Тут не в этом проблема совсем.....Вы хотябы скрипт нпц прочитали???... У меня в инветаре всё норм....

Кхм... смысл скрипта в том что мы берём допустим LKH подходим к нпц он меняет стандартный спрайт на тот который мы хотим(у меня это работает отлично так что ваша ссыль вообще ничем не помогает) и потом сохраняет в базе данных (сохраняет криво). ...Короче иногда снимаеш, одеваеш остаётся новый спрайт, т.е. сохраняется, а у некоторых персонажэй возвращается на стандарт не сохраняясь в бд и санисы(очки) не сохряняет ни у кого!... Проблема в сохранении в базу данных, а не в клиенте...

Автор: Renegade: Дата: 03.29.2011

в какой нафик базе данных.

Все спрайты у игрока в клиенте.

Неужели так хочется изобрести свой собственный велосипед с квадратными колёмами?

Всегда удивлялся таким людям.

Автор: S2pidsMan: Дата: 03.29.2011

Определенные цвета не сохраняются, или все?

Автор: Renegade: Дата: 03.29.2011

почему нельзя раскопировать шмотку с разными спрайтами?

зелёная мегашапка - id 99990
синяя мегашапка - id 99991
чёрная мегашапка - id 99992

при "перекраске" забираем одну, даём другую.

Автор: GreatMan: Дата: 03.29.2011

Цитата Renegade;37280:
почему нельзя раскопировать шмотку с разными спрайтами?

зелёная мегашапка - id 99990
синяя мегашапка - id 99991
чёрная мегашапка - id 99992

при "перекраске" забираем одну, даём другую.


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

Автор: Renegade: Дата: 03.29.2011

почему в этом случае нельзя безконечно красить?

если есть 99990 или 99991 или 99992 то > диалог "покраски", не?

Автор: GreatMan: Дата: 03.29.2011

Смотри у ках 50 покрасок и сам посчитай сколько комбинаций надо чтобы их перекрасить + пропадают карты когда красиш таким способом

Автор: Гробовщик: Дата: 03.29.2011

Цитата Renegade;37291:
почему в этом случае нельзя безконечно красить?

если есть 99990 или 99991 или 99992 то > диалог "покраски", не?

Собственно это я с самого начала и имел в виду. Красить при этом ты сможешь сколько хочешь. Просто скажи, что не хочется переписывать весь скрипт. И еще скажи на хрена тебе столько покрасок?

Автор: Кеник: Дата: 03.29.2011

Отображения то один хер добавляешь, не?) setlook откуда-то же берет картингу?

Автор: GreatMan: Дата: 03.29.2011

Цитата Кеник;37318:
Отображения то один хер добавляешь, не?) setlook откуда-то же берет картингу?


Ваш способ удаляет карты и заточку!!! Он мне не подходит так как заточка на моём серве даёт неплохие бонусы!!!!

Автор: Кеник: Дата: 03.29.2011

Что мешает переносить заточку?

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

кривые руки :D

Автор: Кеник: Дата: 03.29.2011

* getequiprefinerycnt ;

Returns the current number of plusses for the item in the specified equipment
slot. For a list of equipment slots see 'getequipid'.

Can be used to check if you have reached a maximum refine value, default for
this is +10:

if(getequiprefinerycnt(1) < 10) goto L_Refine_HeadGear;
mes "Sorry, it's not possible to refine hats better than +10";
close;
L_Refine_HeadGear:
mes "I will now upgrade your "+getequipname(1);

Смотришь заточку, меняешь шапку на шапку другого цвета с предыдущей заточкой. Так же и с картами

Автор: GreatMan: Дата: 03.29.2011

Ну а как решаить проблему с перекраской ках у меня их штук 30 я непойму как можно сделать компактно... Чтобы можно было их безконца перекрашивать...

Автор: Кеник: Дата: 03.29.2011

Запомнил заточку, сетлуком выбрал цвет, который подходит и заменил. Удалил старую шапку - дал новую, в зависимости от выбранного цвета..

Автор: GreatMan: Дата: 03.29.2011

Цитата Кеник;37350:
Запомнил заточку, сетлуком выбрал цвет, который подходит и заменил. Удалил старую шапку - дал новую, в зависимости от выбранного цвета..


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

Автор: Кеник: Дата: 03.29.2011

Замену шмотки сделать отдельной функцией и как параметр передавать нужные цифры. То бишь после выбора вызывается функция с параметром выбранной шапки, а дальше функция уже проверяет наличие и заточку.

Автор: GreatMan: Дата: 03.29.2011

Цитата Кеник;37353:
Замену шмотки сделать отдельной функцией и как параметр передавать нужные цифры. То бишь после выбора вызывается функция с параметром выбранной шапки, а дальше функция уже проверяет наличие и заточку.


Можеш показать как пример покраску хотябы 3xLKH к примеру с такими айди и спрайтами пож?:
Id,Vew,Color
2074,708,Black
2075,709,White
2076,710,Blue

Автор: Кеник: Дата: 03.29.2011

setarray @lkh[0],708,709,710;
setarray @lkhid[0],2074,2075,2076;
set @i,0;
set @last,getequipid(1);
while ( @i<3 ) {
setlook 4,@lkh[@i];
mes "Нравится?";
if (select("Да","Нет")==1) callsub "do",@lkhid[@i];
mes "Следующую?";
if (select("Да","Нет")==2) goto exit;
set @i,@i+1;
}
exit:
close;
do:
if (getequipid(1)==@last) {
set @tochka,getequiprefinerycnt(getequipid(1));
delitem @last,1;
getitem2 getartg(0),1,@tochka,1,0,0,0,0,0;
mes "Ну типа вот..";
close;
} else {
mes "Куда дел? Оо";
close;
}
end;


Не лучший вариант, но в 4 утра голова слабо варит... Для примера покатит, просто логику понять

Автор: GreatMan: Дата: 03.29.2011

Ошибочки исправил добавил проверку на карты и всё тру спасиб)

Автор: Кеник: Дата: 03.30.2011

кнопочку жми :D

Автор: GreatMan: Дата: 03.30.2011

Как бы ещё проверочку в начале покмпактней на наличие вещи а то у меня такая фигня

if (getequipid(EQI_HEAD_TOP) == 5013) || (getequipid(EQI_HEAD_TOP) == 23020) || (getequipid(EQI_HEAD_TOP) == 23021) || (getequipid(EQI_HEAD_TOP) == 23022) || (getequipid(EQI_HEAD_TOP) == 23023) || (getequipid(EQI_HEAD_TOP) == 23024) || (getequipid(EQI_HEAD_TOP) == 23074) {
setarray @lkh[0],708,709,710;
setarray @lkhid[0],2074,2075,2076;

Просто в твоей версии сетлук срабатывает дажэ тогда когда вещи нет и вид остаётся когда уходиш от нпц(