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

Nurkz

Donators
  • Постов

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

  • Посещение

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

    24

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


  1. instance.c: In function 'instance_mapname2mapid':
    instance.c:389:5: warning: format '%s' expects argument of type 'char *', but argument 4 has type 'int' [-Wformat]
    instance.c:389:5: warning: too many arguments for format [-Wformat-extra-args]
    instance.c:389:5: warning: format '%s' expects argument of type 'char *', but argument 4 has type 'int' [-Wformat]
    instance.c:389:5: warning: too many arguments for format [-Wformat-extra-args]

    Не нравится компилятору мои изменения :) В принципе понимаю что это. Меня больше интересуют другие ворнинги.

    Чтоб не создавать тему:


    skill.c: In function 'skill_unitsetting':
    skill.c:12079:18: warning: array subscript is above array bounds [-Warray-bounds]

    Вот кусок кода, который там:


    {
    struct skill_condition req = skill_get_requirement(sd,skill_id,skill_lv);
    ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY));
    [b][12079] >> на это ругается[/b] if( req.itemid[i] )
    req_item = req.itemid[i];
    if( map_flag_gvg(src->m) || map[src->m].flag.battleground )
    limit *= 4; // longer trap times in WOE [celest]
    if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )
    target = BCT_ALL;
    }

    насчет instance_mapname2mapid, убери instance_id в передаваемых значениях на строку :

    snprintf(alt_name, sizeof(alt_name),"%s", instance_id, iname);

    насчет skill.c

    у тебя i может вылезти за рамки максимального значения массива


    if( i < MAX_SKILL_ITEM_REQUIRE && req.itemid[i] )
    req_item = req.itemid[i];

    Поменял карту с bossnia_01 на 1@uns. Проблема осталась ):

    В db/map_index.txt и conf/maps_athena.conf добавил? Mapcache пересобирал?

    • Upvote 1
  2. В ../src/map/instance.c функция instance_mapname2mapid переписывает название карты в вид ("%d#%s", instance_id, iname) - в вашем случае "13#bossnia_01" так как не может найти символ @ в названии карты. В следствии чего, функция pc_setpos не может найти mapindex карты 13#bossnia_01 и отсылает вас на 1 в списке, а это у нас alb_ship :)

    Либо создаем копии карт bossnia_01 вида 1@bossnia_01, либо 13#bossnia_01, либо меняем эту строку :


    snprintf(alt_name, sizeof(alt_name),"%d#%s", instance_id, iname);

    на


    snprintf(alt_name, sizeof(alt_name),"%s", iname);

    • Upvote 1

  3. 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
  4. хотя остался интерес как же открыть чат после распределение скил поинтов

    Заходим в ../src/map/pc.c и в функции pc_skillup в самом конце добавляем:


    if( (sd->class_&MAPID_UPPERMASK) == MAPID_NOVICE && sd->status.job_level == 10 && sd->status.skill_point == 0 )
    npc_event(sd,"<npc name>::<npc event>",0);

    • Upvote 1
  5. работает но, чат с нпц не появляется как прокачевашь скилы. приходится перезаходить. что бы появился чат.

    Логично, срабатывает только при OnPCLoginEvent.

    после получение профессии персонаж виснет)

    Попробуй сменить end; на close;

  6. - script jobs -1,{

    OnPCLoginEvent:

    // проверка на Job Id

    if(Class > 0 && Class < 4049)

    end;

    //проверака на lvl Job

    if(JobLevel < 10) goto case 1;

    if(JobLevel > 9) goto case 2;

    case 1:

    switch(Class){

    switch(select("swordman")) // меню выбора профессии

    next;

    atcommand "@job 1"; //Job Swordman id 1

    dispbottom "Вы получили профессию Swordman.";

    close;

    case 2:

    mes "извините вы ещё не достигни необходимого джоб уровня

    close;

    }

    }

    я неуверен что без ошибок но должно помочь

    unichtozhenie.gif

  7. чем плох переход по лейбел?


    int a = rand()%100;
    if (a>50) goto LOL;
    int b=rand()%100;
    LOL:
    std::cout << a << b << std::endl;

    Каким образом при выборке из чисел <= 100(101) ты получаешь число выше границы?

    Или что это за число и как оно считается

    суть картинки отображение максимальных и минимальныйх отклонений от желаемого значения (в нашем случае 30% от 10000 запросов)

  8. Сам себе противоречишь.

    Давай по пальцам: rand()%10 вернет нам 10 возможных результатов, включая 0.


    1 результат : 0
    2 результат : 1
    3 результат : 2
    4 результат : 3
    5 результат : 4
    6 результат : 5
    7 результат : 6
    8 результат : 7
    9 результат : 8
    10 результат : 9

    И естественно по той же схеме rand()%101 вернет нам 101 возможный результат.

    Математик хренов.. <_<

  9. При использовании 'rand(101)' в итоге мы получаем 101 возможный результат, если при 10000 эту 1 ты и не заметишь, то при значении 100 это уже играет роль.

    Хотя какая разница, может это задумка автора, чтоб шансов поболее было. =)

    • Upvote 1
    • Downvote 1
  10. Есть ли такая возможность менять спрайт вещи при заточке ?

    вполне..

    добавить в item_data новый state, и выдать наш state нужному предмету.

    A дальше условие в pc_equipitem : если у предмета есть наш state, меняем ему look на который хотим..

    В вашем случае :



    if(id->state.changelook_state)

    {

    switch(id->refine)

    {

    case 1: id->look = XXX; break;

    case 2: ...

    }

    }

    Где XXX нужный вам View ID. :)

    • Upvote 1
  11. Проще. Сила привычки она такая, да х)

    P.S. А чем временные переменные, которые после разговора с НПЦ уничтожатся вдруг помешали? О.о

    В принципе ни чем не мешают, опять же, сила привычки. :)

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

    Как говорится, "Оптимизация превыше всего".

  12. OnPCLoadMapEvent:
    getmapxy(.@map$, .@x, .@y, 0);
    if ( .@map$ != "prontera") {
    if (countitem(601) > 0)
    delitem 601, countitem(601);
    }
    end;

    При смене карты проверяет название текущей карты у игрока. Если карта - НЕ пронтера, проверяет количество предметов с айди 601 в инвентаре. Если их больше 0, то забирает все, что есть. Если мне память не изменяет, для использования OnPCLoadMapEvent должен на всех картах стоять мапфлаг loadevent или как-то так.

    А не проще использовать strcharinfo(3) ? Зачем лишние переменные?


  13. prontera,146,83,5 script Хилер -1,7,7,{
    end;

    OnTouch:

    if( HD > gettimetick(2) )
    end;

    set HD, gettimetick(2)+180;
    while(getbrokenid(1))
    repair(1);

    percentheal 100,100;
    specialeffect2 42;
    sc_start SC_BLESSING,300000,10;
    specialeffect2 37;
    sc_start SC_INCREASEAGI,300000,10;
    sc_start SC_MAGNIFICAT,300000,5;
    sc_end sc_stone;
    sc_end sc_freeze;
    sc_end sc_sleep;
    sc_end sc_curse;
    sc_end sc_silence;
    sc_end sc_confusion;
    sc_end sc_blind;
    sc_end sc_bleeding;
    emotion 21;
    getinventorylist;
    for(set .@i,0; .@i<@inventorylist_count; set .@i,.@i+1)
    {
    if(@inventorylist_identify[.@i]==1)
    continue;

    delitem2 @inventorylist_id[.@i],1,0,0,0,0,0,0,0;
    getitem @inventorylist_id[.@i],1;
    }
    end;
    }

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