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

Nurkz

Donators
  • Постов

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

  • Посещение

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

    24

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

  1. Возможные причины:

    - В (папка с эмулятором)/conf/char_athena.conf отключено создание персонажей.


    // Enable or disable creation of new characters.
    // Now it is actually supported [Kevin]
    char_new: 1

    - В (папка с эмулятором)/conf/char_athena.conf имеются ошибки с "возможными символами" для создания персонажей.


    // Set the letters/symbols that you want use with the 'char_name_option' option.
    // Note: Don't add spaces unless you mean to add 'space' to the list.
    char_name_letters: abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890

    - В используемой вами db установлена неверная кодировка. (Используйте UTF8_bin)

    А так же возможно у вас нет соединения char_server'a с db или установлены неверные версии.

    На всякий случай проверьте дату своего клиента, PACKETVER в ../src/common/mmo.h, packet_db_ver в ../db/packet_db.txt и clientinfo.xml

    • Upvote 1
  2. Что это за 3 предупреждения? (не считая s1/p1)

    Отключение "фич", а именно auction и banking, в следствии того, что ваш клиент малость устарел.

    Чтобы избавиться от предупреждений, следует в (папка с эмулятором)/conf/feature.conf отключить данные "фичи"


    // Auction (Note 1)
    // Feature became unstable on clients 2012 onwards (exact date not known),
    // it has been fixed on clients 2013-05-15 onwards however.
    feature.auction: off

    ...

    // Banking (Note 1)
    // Requires: 2013-07-24aRagexe or later
    feature.banking: off

    • Upvote 2
  3. Правильное название скрипта "Анти-Онлайн" :)


    - script anti-bot2 -1,{

    OnPCLoginEvent:

    set checkbot, 0;
    if( botter >= 1 )
    doevent "anti-bot::Oncheckb";

    }


    - script anti-bot -1,{

    OnNPCKillEvent:
    set mob, mob +1;
    if( mob < 300 ) end;

    Oncheckb:

    function GetString;
    //if (getgmlevel() >= 3) { goto end;} /* Uncomment if you want to Ignore this by GM */
    if( checkbot >= 1 ) end;

    atcommand "@jail "+strcharinfo(0)+"";
    set botter, 1;
    set mob, 0;
    sleep2 3000;

    On2nd:

    set .@String$,GetString( 15,rand(3,7) );
    mes "Здравствуйте";
    mes "У нас возникло подозрение что вы БОТ";
    mes "Вы назодитесь в Тюрьме";
    mes "Вы можете избежать наказания !";
    mes "Введите, только то, что выделено ^FF0000Красным Цветом:^000000";
    mes "Будте внимательнее !";
    mes "^0000FF"+GetString( 15,rand(5,10) )+"^FF0000"+.@String$+"^0000FF"+GetString( 15,rand(3,10) )+"^000000";
    input .@Input$;
    if( .@Input$ != .@String$ )
    {
    if (botter >= 3)
    {
    atcommand "@unjail "+strcharinfo(0)+"";
    sleep2 1000;
    atcommand "@jailfor 10d "+strcharinfo(0)+"";
    announce "[Anti-BOT]: Игрок [" +strcharinfo(0) +"] был пойман в Ботоводтве, Джайл 10 дней.",0,0xe80f0f;

    set botter,0;
    close;
    }

    mes "Проверка...";
    set botter, botter +1;
    next;
    goto On2nd;
    }

    atcommand "@unjail "+strcharinfo(0)+"";
    set botter,0;
    set checkbot,1;
    end;

    function GetString {

    if( getarg(0) & 1 ) setarray .@List$[ getarraysize( .@List$ ) ],"1","2","3","4","5","6","7","8","9";
    if( getarg(0) & 2 ) setarray .@List$[ getarraysize( .@List$ ) ],"A","B","C","D","E","F","G","H","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z";
    if( getarg(0) & 4 ) setarray .@List$[ getarraysize( .@List$ ) ],"a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","v","w","x","y","z";
    //if( getarg(0) & 8 ) setarray .@List$[ getarraysize( .@List$ ) ],"!","@","#","$","%","^","&","*","(",")","-","=","/","+";

    set .@Str$,"";
    while( getstrlen( .@Str$ ) < getarg(1) )
    set .@Str$,.@Str$ + .@List$[ rand( getarraysize( .@List$ ) ) ];
    return .@Str$;

    }

    }

    sec_pri mapflag pvp off

    • Upvote 2
  4. Зайди в (папка с эмулятором)/src/config/renewal.h и закомментируй:


    /// renewal ASPD [malufett]
    /// (disable by commenting the line)
    ///
    /// leave this line to enable renewal ASPD
    /// - shield penalty is applied
    /// - AGI has a greater factor in ASPD increase
    /// - there is a change in how skills/items give ASPD
    /// - some skill/item ASPD bonuses won't stack
    #define RENEWAL_ASPD

  5. А как это сделать?

    1. Заходим в папку conf, находим файл grf-files.txt и прописываем в нем путь к grf с твоими картами.

    2. Заходим в папку db (если rAthena -> pre-re и re папки соответственно, в зависимости что мы используем) и удаляем файл map_cache.dat

    3. Заходим в корневую папку с эмулятором и тыкаем два раза по mapcache.exe

    Ждем и всё готово.

  6. Попробуй так что ли..


    if( map[sd->bl.m].index == mapindex_name2id("payon") && (battle_config.bone_drop==2 || (battle_config.bone_drop==1 && map[sd->bl.m].flag.pvp)))
    {
    struct item item_tmp;
    memset(&item_tmp,0,sizeof(item_tmp));
    item_tmp.nameid=ITEMID_SKULL_;
    item_tmp.identify=1;
    item_tmp.card[0]=CARD0_CREATE;
    item_tmp.card[1]=0;
    item_tmp.card[2]=GetWord(sd->status.char_id,0); // CharId
    item_tmp.card[3]=GetWord(sd->status.char_id,1);
    map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
    }

    • Upvote 1

  7. prontera,156,102,0 script mobster -1,5,5,{
    end;

    OnTouch:
    if(.mobster) end;
    announce "Mobster : Monster Spawned",bc_map,"0xFFFF00";
    monster "prontera",154,102,"Mobster",1869,1;
    monster "prontera",154,102,"Mobster",1291,1;
    monster "prontera",154,102,"Mobster",1292,1;
    monster "prontera",154,102,"Mobster",1291,1;
    monster "prontera",154,102,"Mobster",1869,1;
    monster "prontera",154,102,"Mobster",1291,1;
    monster "prontera",154,102,"Mobster",1117,1;
    monster "prontera",154,102,"Mobster",1869,1;
    monster "prontera",154,102,"Mobster",1117,1;
    monster "prontera",154,102,"Mobster",1132,1;
    monster "prontera",154,102,"Mobster",1117,1;
    monster "prontera",154,102,"Mobster",1132,1;
    monster "prontera",154,102,"Mobster",1292,1;
    monster "prontera",154,102,"Mobster",1132,1;
    monster "prontera",154,102,"Mobster",18102,1;
    monster "prontera",154,102,"Mobster",1292,1;
    set .mobster, 1;
    initnpctimer;
    end;

    OnTimer60000:
    set .mobster, 0;
    stopnpctimer;
    end;
    }

    • Upvote 1
  8. а где поменять этот череп на что то иное?

    В (папка с игрой)/src/map/pc.c находишь:


    if(battle_config.bone_drop==2 || (battle_config.bone_drop==1 && map[sd->bl.m].flag.pvp))
    {
    struct item item_tmp;
    memset(&item_tmp,0,sizeof(item_tmp));
    item_tmp.nameid=ITEMID_SKULL_;
    item_tmp.identify=1;
    item_tmp.card[0]=CARD0_CREATE;
    item_tmp.card[1]=0;
    item_tmp.card[2]=GetWord(sd->status.char_id,0); // CharId
    item_tmp.card[3]=GetWord(sd->status.char_id,1);
    map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
    }

    И меняешь ITEMID_SKULL_ на ID нужного тебе предмета.

    • Upvote 1
  9. дроп итема идет 100% даже при значение 1

    Извиняюсь, не досмотрел. =)


    if( sd == mvp_sd && night_flag && rnd()%10000 >= 500 )
    {
    ditem = mob_setdropitem(7227, 1);
    mob_item_drop(md, dlist, ditem, 0, 500, homkillonly);
    }

    Соответственно rnd() на eAmod'e это rand() и homkillonly это aikillonly.

    Процент дропа умножается на 100 (5% = 500).

    • Upvote 1
  10. Зайди в (папка с эмулятором)/src/map/mob.c и найди строчку:


    // Ore Discovery [Celest]

    И добавь после этого:


    if( sd == mvp_sd && night_flag )
    {
    ditem = mob_setdropitem([ID Вещи], 1);
    mob_item_drop(md, dlist, ditem, 0, [Шанс Дропа], homkillonly);
    }

    PS! В eAmod'e вместо homkillonly нужно вписать aikillonly

    • Upvote 1
  11. Открываем (папка с эмулятором)/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),
    };
    ...

    Думаю как-то так. :)

    • Upvote 2
  12. Добрый день!

    Во-первых спасибо! Мне очень понравился ваш скрипт.

    Немогли бы вы помочь пожалуиста переделать его с кэша на ТЦГ? ID7227. Я учусь скриптить но этот скрипт слишком сложный для меня пока что.

    Благодарю!


    prontera,146,166,6 script Premium Account 634,{
    // Settings: -----------------------------
    set .@Cost, 10; // TCG required
    set .@Time, 4 * 7 * 24 * 60 * 60; // Time in Seconds = 4 weeks, 7 days per week, 24 hours per day, 60 minutes per day, 60 seconds per minute. = 1 month in this sample. in this sample.
    set .@Time$, "1 month";
    // ---------------------------------------
    mes "[Premium Account]";
    mes "I am the Premium Account seller.";
    if( #PremiumUser > gettimetick(2) )
    mes "Your Premium Account expires in ^FF0000" + callfunc("Time2Str",#PremiumUser) + "^000000.";
    mes "What can I do for you?";
    next;
    // isPremium() returns 1 if the current user account is premium and it have not expired.
    // It works together with #Premium_Tick, which is a account Var set with a Unix Time value, representing when the premium account expires.
    // isPremium() is the same as #Premium_Tick > gettimetick(2)
    switch( select("Pay for Premium Time:About Premium Account") )
    {
    case 1:
    mes "[Premium Account]";
    if( #PremiumUser > gettimetick(2) )
    mes "Do you really want to extend your Premium Time?";
    else
    mes "You do really want to convert your account to premium?";
    mes "Premium Time is ^FF0000" + .@Time$ + "^000000";
    mes "Value is ^FF0000" + .@Cost + "^000000 TCG.";
    next;
    if( select("Yes:No") == 2 )
    {
    mes "[Premium Account]";
    mes "Come back if you change your mind.";
    close;
    }
    if( countitem(7227) < .@Cost )
    {
    mes "[Premium Account]";
    mes "You don't have enough TCG.";
    close;
    }
    if( #PremiumUser > gettimetick(2) )
    set #PremiumUser, #PremiumUser + .@Time; // Time Extension
    else
    set #PremiumUser, gettimetick(2) + .@Time; // New premium Account
    query_sql "UPDATE `login` SET level = '1' WHERE account_id = "+getcharid(3)+"";
    delitem 7227, .@Cost;
    mes "[Premium Account]";
    mes "Congratulations!!..";
    mes "Remember your Premium Account expires in ^FF0000" + callfunc("Time2Str",#PremiumUser) + "^000000.";
    next;
    mes "To change the status to take effect, please reenter the game.";
    close;
    case 2:
    // Edit this messages to explain your Users about the premium account in your server.
    // ----------------------------------------------------------------------------------
    mes "[Premium Account]";
    mes "With Premium Account you can:";
    mes "Use the commands: @mobsearch,";
    mes "@cast,@exp,@petrename,@where,";
    mes "@changeleader, @packetfilter,";
    mes "@autorefresh and other...";
    mes " ";
    close;
    }

    OnPCLoginEvent:
    if( #PremiumUser > gettimetick(2)) {
    // sc_start SC_ITEMBOOST,( #PremiumUser - gettimetick(2) ),50;
    // sc_start SC_EXPBOOST,( #PremiumUser - gettimetick(2) ),50;
    dispbottom "Remember your Premium Account expires in " + callfunc("Time2Str",#PremiumUser) + "";
    }
    if( #PremiumUser <= gettimetick(2) ) {
    dispbottom "Time of Premium Account was ended or you don't pay for this.";
    query_sql "UPDATE `login` SET level = '0' WHERE account_id = "+getcharid(3)+"";
    }
    end;
    }

    Стыдно должно быть, 2 строчки не заменить.

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