Александр89 Опубликовано 6 февраля, 2015 Жалоба Поделиться Опубликовано 6 февраля, 2015 Может кто подсказать как создать команду для админа дополнительную?Суть команды в том, чтобы обычный игрок мог просмотреть какое кол-во на сервере определенной вещи.К примеру:@howmuch "Ghostring Card" - показывает сколько на сервере карт Гостринга@howmuch 2199 - показывает солько на сервере Ahura Mazdah.Данная команда должна быть на каждом сервере, чтобы игрок был уверен в честности Администрации. Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 6 февраля, 2015 Жалоба Поделиться Опубликовано 6 февраля, 2015 Можно сделать через bindatcmd. Если у тебя rAthena.Задать команду, и через базу вытаскивать кол-во вещей.Только помни что стандартно в массив помещается 128 элементов. Можно изменить, гайд где-то был. Ссылка на комментарий Поделиться на другие сайты Поделиться
Nurkz Опубликовано 6 февраля, 2015 Жалоба Поделиться Опубликовано 6 февраля, 2015 (изменено) Открываем (папка с эмулятором)/src/map/pc.h Ищем: int npc_timer_id; //For player attached npc timers. [Skotlex] unsigned int chatID; time_t idletime; Добавляем: int npc_timer_id; //For player attached npc timers. [Skotlex] unsigned int chatID; time_t idletime; time_t howmuch_tick; Далее. Открываем (папка с эмулятором)/src/map/atcommand.c Ищем: static const char* atcommand_help_string(const char* command){ ...} Добавляем после: ACMD_FUNC(howmuch){ char item[100]; int i, j, cardnum, item_count = 0; char* data; struct item_data *id; const char* tables[] = { "inventory", "storage", "cart_inventory" }; nullpo_retr(-1, sd); if (DIFF_TICK(sd->howmuch_tick, gettick()) > 0) { sprintf(atcmd_output, "You can use @howmuch after %d seconds.", DIFF_TICK(sd->howmuch_tick, gettick()) / 1000); clif_displaymessage(fd, atcmd_output); return -1; } if (!message || !*message || (sscanf(message, "\"%99[^\"]\"", item) < 1 && sscanf(message, "%99s", item) < 1)) { clif_displaymessage(fd, "Please, enter an item name/id (usage: @howmuch <item name or ID>)."); return -1; } if ((id = itemdb_searchname(item)) == NULL && (id = itemdb_exists(atoi(item))) == NULL) { clif_displaymessage(fd, "Invalid item ID or name."); return -1; } for (i = 0, j = 0; i < ARRAYLENGTH(tables); j = 0) { if (itemdb_type(id->nameid) == IT_CARD) { for (cardnum = 0; cardnum < 4; cardnum++) { if ((Sql_Query(mmysql_handle, "SELECT * FROM `%s` WHERE `card%d` = %d;", tables[i], cardnum, id->nameid) != SQL_SUCCESS)) { Sql_ShowDebug(mmysql_handle); return 0; } item_count += (int)Sql_NumRows(mmysql_handle); } } if ((Sql_Query(mmysql_handle, "SELECT `amount` FROM `%s` WHERE `nameid` = %d;", tables[i++], id->nameid) != SQL_SUCCESS)) { Sql_ShowDebug(mmysql_handle); return 0; } while (SQL_SUCCESS == Sql_NextRow(mmysql_handle) && j < Sql_NumRows(mmysql_handle)) { Sql_GetData(mmysql_handle, 0, &data, NULL); item_count += atoi(data); j++; } } sd->howmuch_tick = 30000 + gettick(); sprintf(atcmd_output, "Total count : %d | Item id : %d ('%s'[%d])", item_count, id->nameid, id->jname, id->slot); clif_displaymessage(fd, atcmd_output); return 0;} Ищем ниже: ... ACMD_DEF(clonestat),};... Добавляем: ... ACMD_DEF(clonestat), ACMD_DEF(howmuch),};... Думаю как-то так. Изменено 1 апреля, 2015 пользователем Nurkz 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 6 февраля, 2015 Жалоба Поделиться Опубликовано 6 февраля, 2015 Думаю как-то так. А как же сторэйдж, сторейдж 2 (если rA или еАмод) и телеги? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Nurkz Опубликовано 6 февраля, 2015 Жалоба Поделиться Опубликовано 6 февраля, 2015 А как же сторэйдж, сторейдж 2 (если rA или еАмод) и телеги? Обновил пост. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Александр89 Опубликовано 7 февраля, 2015 Автор Жалоба Поделиться Опубликовано 7 февраля, 2015 А куда и в какие файлы кидать скрипт то?)Плюсики обоим за отзывчивость) Ссылка на комментарий Поделиться на другие сайты Поделиться
INSTIGATOR Опубликовано 7 февраля, 2015 Жалоба Поделиться Опубликовано 7 февраля, 2015 (изменено) А куда и в какие файлы кидать скрипт то?)Плюсики обоим за отзывчивость)src/map/atcommand.cБольшой кусок вбивай по примеру остальных.Последний мелкий ACMD_DEF(howmuch) в AtCommandInfo atcommand_base[] = { так же как и остальные.Ещё не забудь в conf/groups.txt выставить чтоб обычным игрокам было юзабельно. Изменено 7 февраля, 2015 пользователем INSTIGATOR Ссылка на комментарий Поделиться на другие сайты Поделиться
Nurkz Опубликовано 7 февраля, 2015 Жалоба Поделиться Опубликовано 7 февраля, 2015 Обновил пост, добавил timetick на 30 секунд, чтобы не нагружали сервер запросами в базу. Но ставить на сервера с большим онлайном всё равно не советую, хотя ваше дело. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения