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

Qunis

Проверенные
  • Постов

    131
  • Зарегистрирован

  • Посещение

  • Победитель дней

    15

Сообщения, опубликованные Qunis

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

    В данном случае на карте "poring_w01" выставлены рейты на базовый опыт = 5х, на джоб опыт = 4х.

    poring_w01    mapflag    bexp    500
    poring_w01 mapflag jexp 400

    • Upvote 4
  2. - src\map\atcommand.c

    /*========================================== 
    * @whosell [Item_ID]
    *=========================================*/


    int atcommand_whosell(const int fd, struct map_session_data* sd, const char* command, const char* message)
    {
    struct map_session_data *pl_sd, **pl_allsd;
    char item_name[100], output[255];
    int item_id, map_id = 0, users, i, j, count = 0;
    unsigned int MinPrize = battle_config.vending_max_value, MaxPrize = 0;
    struct item_data *item_data;

    memset(item_name, '\', sizeof(item_name));
    memset(output, '\', sizeof(output));

    if (!message || !*message || sscanf(message, "%99[^\n]", item_name) < 1) {
    clif_displaymessage(fd, "Использовать: @whosell [Item_Name] или [Item_ID].");
    return -1;
    }

    if ((item_data = itemdb_searchname(item_name)) == NULL &&
    (item_data = itemdb_exists(atoi(item_name))) == NULL)
    {
    clif_displaymessage(fd, msg_txt(19));
    return -1;
    }

    item_id = item_data->nameid;
    map_id = sd->bl.m;

    pl_allsd = map_getallusers(&users);

    for (i = 0; i < users; i++) {
    if ((pl_sd = pl_allsd[i]) && (pl_sd->vender_id)) {
    for (j = 0; j < pl_sd->vend_num; j++) {
    if (pl_sd->status.cart[pl_sd->vending[j].index].nameid == item_id) {

    if (pl_sd->vending[j].value < MinPrize)
    MinPrize = pl_sd->vending[j].value;

    if (pl_sd->vending[j].value > MaxPrize)
    MaxPrize = pl_sd->vending[j].value;

    if (pl_sd->bl.m == map_id)
    clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, count, 0xFFFFFF);

    sprintf(output, "Продавец: %s | Количество: %d | Цена: %d | Локация: %s(%d,%d)", pl_sd->status.name, pl_sd->vending[j].amount, pl_sd->vending[j].value, map[pl_sd->bl.m].name, pl_sd->bl.x, pl_sd->bl.y);
    clif_displaymessage(fd, output);

    count++;
    }
    }
    }
    }

    if(count > 0) {
    sprintf(output, "Найдено продавцов: %d. Цены: %d ~ %d.", count, MinPrize, MaxPrize);
    clif_displaymessage(fd, output);
    } else
    clif_displaymessage(fd, "Предмет не продают.");

    return 0;
    }

    {"whosell",            1,1, atcommand_whosell },

    - conf\atcommand_athena.conf

    whosell: 0,40

  3. - src\map\atcommand.c

    /*==========================================
    * @whobuy [Item_ID]
    *==========================================*/
    int atcommand_whobuy(const int fd, struct map_session_data* sd, const char* command, const char* message)
    {
    char item_name[100];
    int item_id, j, count = 0, sat_num = 0;
    bool flag = 0;
    struct map_session_data* pl_sd;
    struct s_mapiterator* iter;
    unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0;
    struct item_data *item_data;

    nullpo_retr(-1, sd);
    memset(item_name, '\0', sizeof(item_name));

    if (!message || !*message || sscanf(message, "%99[^\n]", item_name) < 1) {
    clif_displaymessage(fd, "Использовать: @whobuy [Item_Name] или [Item_ID].");
    return -1;
    }
    if ((item_data = itemdb_searchname(item_name)) == NULL &&
    (item_data = itemdb_exists(atoi(item_name))) == NULL)
    {
    clif_displaymessage(fd, msg_txt(19));
    return -1;
    }

    item_id = item_data->nameid;

    iter = mapit_getallusers();
    for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
    {
    if( pl_sd->autobuy_num )
    {
    for (j = 0; j < pl_sd->autobuy_num; j++) {
    if(pl_sd->autobuy[j].id == item_id) {
    snprintf(atcmd_output, CHAT_SIZE_MAX, "Покупатель: %s | Количество: %d | Цена: %d | Локация: %s(%d,%d)",pl_sd->status.name,pl_sd->autobuy[j].amount,pl_sd->autobuy[j].price,mapindex_id2name(pl_sd->mapindex),pl_sd->bl.x, pl_sd->bl.y);
    if(pl_sd->autobuy[j].price < MinPrice) MinPrice = pl_sd->autobuy[j].price;
    if(pl_sd->autobuy[j].price > MaxPrice) MaxPrice = pl_sd->autobuy[j].price;
    clif_displaymessage(fd, atcmd_output);
    count++;
    flag = 1;
    }
    }
    if(flag && pl_sd->mapindex == sd->mapindex){
    clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, ++sat_num, 0xFFFFFF);
    flag = 0;
    }
    }
    }
    mapit_free(iter);

    if(count > 0) {
    snprintf(atcmd_output,CHAT_SIZE_MAX, "Найдено покупателей: %d. Цены: %dz ~ %dz.", count, MinPrice, MaxPrice);
    clif_displaymessage(fd, atcmd_output);
    } else
    clif_displaymessage(fd, "Предмет не покупают.");

    return 0;
    }

    {"whobuy",            1,1, atcommand_whobuy },

    - conf\atcommand_athena.conf

    whobuy: 0,40

    • Upvote 2
  4. eAthena Revision < r14477

    - src\map\atcommand.c

    /*==========================================
    * @detach
    *==========================================*/
    int atcommand_detach( const int fd, struct map_session_data* sd, const char* command, const char* message)
    {
    nullpo_retr(-1, sd);
    sd->state.monster_ignore = 0;
    sd->state.autotrade = 1;
    clif_authfail_fd(fd, 15);
    return 0;
    }

    { "detach", 1,1, atcommand_detach },

    - conf\atcommand_athena.conf

    detach: 0,40

    eAthena Revision >= r14477

    /*==========================================
    * @detach
    *==========================================*/
    ACMD_FUNC(detach)
    {
    nullpo_retr(-1, sd);
    sd->state.monster_ignore = 0;
    sd->state.autotrade = 1;
    clif_authfail_fd(fd, 15);
    return 0;
    }

    { "detach", 1,1, atcommand_detach },

  5. Что за защита Harmony, как она вообще, и кто нибудь работал с ней?

    П.С: Сори если не там создал тему, не нашел более подходящий раздел.

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