Перейти к содержанию

Автобай. ерор


unknown

Рекомендуемые сообщения

Поставил данную команду и начало лететь это: dbe5959e10f9.png

Сори за тему. Не добавил скл таблицы. + еще нашел ошибку.

Изменено пользователем Іван Смеречак
Ссылка на комментарий
Поделиться на другие сайты

vending.c:362: error: too many arguments to function 'pc_delitem'

ошибка...

ругается на это

	pc_delitem(vsd, tcg_inv_id, (int)z, 1,6);

В чем трабл??

Решил ошибку. Но не знаю к чему она приведет.

	pc_delitem(vsd, tcg_inv_id, (int)z, 6);

Сделал так. У кого какие идеи?

Изменено пользователем Іван Смеречак
Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...

что бы не создавать много тем.

проблема

ругается на эти 2 строчки, при компиле.

Аб брал отсюда http://mmo.timelessr.../topic/2107-ab/

vending.c

 pc_additem(vsd, &sd->status.inventory[idx], qty); // Добавили данную позицию покупателю
pc_delitem(sd,idx,qty,0,0); // Удалили позицию у продавца

сама ошибка

6>..\src\map\vending.c(423): error C2198: pc_additem: слишком мало аргументов для вызова
6>..\src\map\vending.c(424): error C2198: pc_delitem: слишком мало аргументов для вызова

eamod

Изменено пользователем ggRo
Ссылка на комментарий
Поделиться на другие сайты

сделал так. думаю что не правильно.

 pc_additem(vsd, &sd->status.inventory[idx],0,LOG_TYPE_STEAL); // Добавили данную позицию покупателю
pc_delitem(sd,idx,qty,0,0,LOG_TYPE_STEAL); // Удалили позицию у продавца

с итемом все норм а вот с зенями беда.

тот кто скупает зени не отнимаются но получает итем

тот кто продает получает ту сумму на которую продает. итем отнимается.

ps

добавляю в базу

CREATE TABLE `autobuy` (
`char_id` int(11) NOT NULL,
`index` tinyint(3) NOT NULL,
`nameid` int(11) unsigned NOT NULL,
`amount` int(11) unsigned NOT NULL,
`price` bigint(20) unsigned NOT NULL,
KEY `char_id` (`char_id`)

выдает

 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7

Изменено пользователем ggRo
Ссылка на комментарий
Поделиться на другие сайты

сделал так. думаю что не правильно.

 pc_additem(vsd, &sd->status.inventory[idx],0,LOG_TYPE_STEAL); // Добавили данную позицию покупателю
pc_delitem(sd,idx,qty,0,0,LOG_TYPE_STEAL); // Удалили позицию у продавца

с итемом все норм а вот с зенями беда.

тот кто скупает зени не отнимаются но получает итем

тот кто продает получает ту сумму на которую продает. итем отнимается.

ps

добавляю в базу

CREATE TABLE `autobuy` (
`char_id` int(11) NOT NULL,
`index` tinyint(3) NOT NULL,
`nameid` int(11) unsigned NOT NULL,
`amount` int(11) unsigned NOT NULL,
`price` bigint(20) unsigned NOT NULL,
KEY `char_id` (`char_id`)

выдает

 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7

Скобка открывается, но не закрывается

Структуру pc_additem и pc_delitem можешь посмотреть в pc.c

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Спасибо, там и смотрел структуру. Не очень шарю в срц.

int pc_delitem(struct map_session_data *sd,int n,int amount,int type, short reason, e_log_pick_type log_type)
{
nullpo_retr(1, sd);

if(sd->status.inventory[n].nameid==0 || amount <= 0 || sd->status.inventory[n].amountinventory_data[n] == NULL)
return 1;

log_pick(&sd->bl,log_type,sd->status.inventory[n].nameid,-amount,&sd->status.inventory[n]);

sd->status.inventory[n].amount -= amount;
sd->weight -= sd->inventory_data[n]->weight*amount ;
if(sd->status.inventory[n].amount<=0){
if(sd->status.inventory[n].equip)
pc_unequipitem(sd,n,3);
memset(&sd->status.inventory[n],0,sizeof(sd->status.inventory[0]));
sd->inventory_data[n] = NULL;
}
if(!(type&1))
clif_delitem(sd,n,amount,reason);
if(!(type&2))
pc_onstatuschanged(sd,SP_WEIGHT);

return 0;
}

int pc_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type)
{
struct item_data *data;
int i;
unsigned int w;

nullpo_retr(1, sd);
nullpo_retr(1, item_data);

if( item_data->nameid <= 0 || amount <= 0 )
return 1;
if( amount > MAX_AMOUNT )
return 5;

data = itemdb_search(item_data->nameid);
w = data->weight*amount;
if(sd->weight + w > sd->max_weight)
return 2;

i = MAX_INVENTORY;

if( itemdb_isstackable2(data) && item_data->serial == 0 && item_data->expire_time == 0 )
{ // Stackable | Non Serialized (non unique) | Non Rental
for( i = 0; i < MAX_INVENTORY; i++ )
{
if( sd->status.inventory[i].nameid == item_data->nameid && sd->status.inventory[i].bound == item_data->bound && memcmp(&sd->status.inventory[i].card, &item_data->card, sizeof(item_data->card)) == 0 )
{
if( amount > MAX_AMOUNT - sd->status.inventory[i].amount )
return 5;
sd->status.inventory[i].amount += amount;
clif_additem(sd,i,amount,0);
break;
}
}
}

if( i >= MAX_INVENTORY )
{
i = pc_search_inventory(sd,0);
if( i < 0 )
return 4;

memcpy(&sd->status.inventory[i], item_data, sizeof(sd->status.inventory[0]));
// clear equips field first, just in case
if( item_data->equip )
sd->status.inventory[i].equip = 0;

sd->status.inventory[i].amount = amount;
sd->inventory_data[i] = data;
clif_additem(sd,i,amount,0);
}

if( i < MAX_INVENTORY ) achievement_validate_item(sd,AT_ITEM_HAVE,sd->status.inventory[i].nameid,sd->status.inventory[i].amount);

if( !itemdb_isstackable2(data) && sd->status.inventory[i].serial == 0 )
sd->status.inventory[i].serial = itemdb_getserial(data); // First Time Serialize Item

log_pick(&sd->bl,log_type,item_data->nameid,amount,&sd->status.inventory[i]);

sd->weight += w;
pc_onstatuschanged(sd,SP_WEIGHT);
return 0;
}

Изменено пользователем ggRo
Ссылка на комментарий
Поделиться на другие сайты

Поменяй эти строки :


+ pc_getzeny(sd,(int)z);
+ pc_getzeny(vsd,-((int)z));


pc_additem(vsd, &sd->status.inventory[idx],0,LOG_TYPE_STEAL); // Добавили данную позицию покупателю
pc_delitem(sd,idx,qty,0,0,LOG_TYPE_STEAL); // Удалили позицию у продавца

Это то верно?

Ссылка на комментарий
Поделиться на другие сайты


pc_additem(vsd, &sd->status.inventory[idx],0,LOG_TYPE_STEAL); // Добавили данную позицию покупателю
pc_delitem(sd,idx,qty,0,0,LOG_TYPE_STEAL); // Удалили позицию у продавца

Это то верно?


pc_additem(vsd, &sd->status.inventory[idx], qty, 0); // Добавили данную позицию покупателю
pc_delitem(sd, idx, qty, 0, 6, 0); // Удалили позицию у продавца

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты


pc_additem(vsd, &sd->status.inventory[idx],0,LOG_TYPE_STEAL); // Добавили данную позицию покупателю
pc_delitem(sd,idx,qty,0,0,LOG_TYPE_STEAL); // Удалили позицию у продавца

Это то верно?


pc_additem(vsd, &sd->status.inventory[idx], qty, 0); // Добавили данную позицию покупателю
pc_delitem(sd, idx, qty, 0, 6, 0); // Удалили позицию у продавца

хотя скомпилил сервер без ошибок.

 1 IntelliSense: аргумент типа "int" несовместим с параметром типа "e_log_pick_type" d:\1_ggro eamod\eamod\eathena оригинал\eathena @ab\src\map\vending.c 423
2 IntelliSense: аргумент типа "int" несовместим с параметром типа "e_log_pick_type" d:\1_ggro eamod\eamod\eathena оригинал\eathena @ab\src\map\vending.c 423

Изменено пользователем ggRo
Ссылка на комментарий
Поделиться на другие сайты


pc_additem(vsd, &sd->status.inventory[idx],0,LOG_TYPE_STEAL); // Добавили данную позицию покупателю
pc_delitem(sd,idx,qty,0,0,LOG_TYPE_STEAL); // Удалили позицию у продавца

Это то верно?


pc_additem(vsd, &sd->status.inventory[idx], qty, 0); // Добавили данную позицию покупателю
pc_delitem(sd, idx, qty, 0, 6, 0); // Удалили позицию у продавца

Шило на мыло :D


pc_additem(vsd, &sd->status.inventory[idx], qty, LOG_TYPE_STEAL); // Добавили данную позицию покупателю
pc_delitem(sd, idx, qty, 0, 6, LOG_TYPE_STEAL); // Удалили позицию у продавца

Ссылка на комментарий
Поделиться на другие сайты

+ pc_additem(vsd, &sd->status.inventory[idx], qty, LOG_TYPE_NONE); // Добавили данную позицию покупателю
+ pc_delitem(sd, idx, qty, 0, 6, LOG_TYPE_NONE); // Удалили позицию у продавца

+ pc_getzeny(sd,(int)z);
+ pc_payzeny(vsd,(int)z);

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...
2 часа назад, Sago сказал:

ругается на 

[Error]: pc_getzeny: Obtaining negative Zeny (zeny=-500000, account_id=2000000, char_id=150000).
 

подскажите в чем трабл

Там же пишет, даешь негативное число -5000000 оО

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика