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

Nurkz

Donators
  • Постов

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

  • Посещение

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

    24

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

  1. заходим в skill_db.txt и ищем:

    Цитата

    2204,0,8,4,1,0x2,5:6:7:8:9,5,-5,yes,0,0,0,magic,0,0x0,    WL_JACKFROST,Jack Frost

    меняем на:

    Цитата

    2204,0,8,4,1,0x2,5:6:7:8:9,5,-5,yes,0,0,0,misc,0,0x0,    WL_JACKFROST,Jack Frost

    Далее идем в skill_cast_db.txt и ищем:

    Цитата

    //-- WL_JACKFROST
    2204,2000:2500:3000:3500:4000,1000,0,10000:15000:20000:25000:30000,0,0

    меняем на:

    Цитата

    //-- WL_JACKFROST
    2204,2000:2500:3000:3500:4000,1000,0,10000:15000:20000:25000:30000,60000,0

    Теперь осталось дело за малым =)

    Идем в src/map/battle.c и ищем строки:

    Цитата

    /*==========================================
     * Calculate "misc"-type attacks and skills
     *------------------------------------------
     * Credits:
     *    Original coder Skotlex
     *    Refined and optimized by helvetica
     */
    struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *target,uint16 skill_id,uint16 skill_lv,int mflag)
    {

    листаем чуть ниже и видим:

    Цитата

        switch (skill_id) {
            case NC_MAGMA_ERUPTION: // 'Eruption' damage
                md.damage = 800 + 200 * skill_lv;
                break;

    добавляем после:

    Цитата

                case WL_JACKFROST:
                    md.damage = 50000 * skill_lv;
                    break;

    Далее идем в src/map/skill.c и ищем строки:

    Цитата

    /*==========================================
     * Add effect to skill when hit succesfully target
     *------------------------------------------*/
    int skill_additional_effect(struct block_list* src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int attack_type, enum damage_lv dmg_lv, unsigned int tick)
    {

    Мотаем ниже пока не находим:

    Цитата

        case WL_JACKFROST:
            sc_start(src,bl,SC_FREEZE,200,skill_lv,skill_get_time(skill_id,skill_lv));
            break;

    Меняем на:

    Цитата

        case WL_JACKFROST:
            status_change_start(src, bl, SC_BLEEDING, 10000, skill_lv, src->id, 0, 0, skill_get_time2(skill_id, skill_lv), SCSTART_NOAVOID);
            break;

    10000 это 100% шанс наложения статуса =)

    Далее заходим в src/map/status.c и ищем:

    Цитата

    add_sc( WL_JACKFROST        , SC_FREEZE          );

    Добавляем после:

    Цитата

    add_sc( WL_JACKFROST        , SC_BLEEDING        );

    Вот и всё =)

    А насчет Devo, он вроде и так по дефолту работает так как ты хочешь О_О

    • Upvote 1
  2. Заходим в mob.c и находим строки :

    } else if( mvp_sd && !md->state.npc_killmonster ) {
    	pc_setparam(mvp_sd, SP_KILLEDRID, md->mob_id);

    И далее вписываем :

    Для rA :

    pc_setreg(mvp_sd, add_str("@mobdead_m"), md->bl.m);
    pc_setreg(mvp_sd, add_str("@mobdead_x"), md->bl.x);
    pc_setreg(mvp_sd, add_str("@mobdead_y"), md->bl.y);

    Для Herc соответственно :

    pc_setreg(mvp_sd, script->add_str("@mobdead_m"), md->bl.m);
    pc_setreg(mvp_sd, script->add_str("@mobdead_x"), md->bl.x);
    pc_setreg(mvp_sd, script->add_str("@mobdead_y"), md->bl.y);

    Сохраняем, компилим, и вуаля, у нас есть все необходимое.

    -	script	custom_drop	-1,{
    end;
    
    OnNPCKillEvent:
    	switch(killedrid) {
    		default:
    			break;
    		case 1002:
    			makeitem 20000,1,mapid2name(@mobdead_m),@mobdead_x,@mobdead_y;
    			break;
    	}
    	end;
    }

    Имхо, куда легче, чем лопатить всех мобов и делать их эвентными. ^_^

    • Upvote 1
  3. prontera,155,167,3    script    Валентинка    611,{
    
    if(#q_profession == 1) {
    	dispbottom "Ты уже получал Подарок Валентинки!";
    	end;
    }
    
    mes "^FF4500[Любовь]^000000";
    mes "Привет, ^FF1493С днём Святого Валентина вас!^000000";
    mes "В этот чудесный праздник я решила сделать вам подарок";
    next;
    mes "^FF4500[Любовь]^000000";
    mes "Если вы хотите подарочек! Принесите мне скромные предметы";
    mes "Вы поздравите меня а я вас";
    next;
    if (select("Хорошо, Что бы ты хотела?","У меня других дел хватает") == 1) {
    	mes "^FF4500[Любовь]^000000";
    	mes "Мне очень хочется тортика, Я сладкоежка";
    	mes "Добыть Можно тортик со всех монстров на локациях с шансом 10%";
    	mes "Принеси мне 10 тортиков и я дам тебе подарочек";
    	next;
    	if (countitem(6099) < 10) {
    		mes "^FF4500[Любовь]^000000";
    		mes "У тебя нету Тортиков, Приходи с тортиками";
    		close;
    	}
    	
    	delitem 6099,10;
    	getitem 13822,1;
    	#q_profession = 1;
    }
    
    close;
    }

     

    • Upvote 1
  4. Проверку нужно вписать в clif_parse_UseSkillToId


    uint16 idx = skill_get_index(HLIF_CHANGE);
    struct homun_data *hd = sd->hd;

    if (skill_id == AL_TELEPORT) {
    hd->blockskill[idx] = 0;
    }

    Заранее извиняюсь если где напутал, сижу с телефона, к ПК пока нет возможности подойти.

    Под rAthena.

  5. Где Вы вообще видели защиту от ддос атак? Таковой нет в природе. Защита? То что предлагают хостинг провайдеры: это всего лишь банальная фильтрация, а в большинстве случаев просто маркетинг. Да и кому нужен проект со старой игрой и онлайном в 100-200 человек(это в идеале). Так что Ваше настроение, больше похоже на маразм. Извините пожалуйста, не хотел обидеть.

    http://www.cisco.com/c/en/us/products/collateral/security/guard-xt-5650a/product_data_sheet0900aecd800fa55e.html

  6. В участке кода

    set @MaxDstamp,31; //maximum number of dungeons

    Переменная должна быть не более 30, ибо там цикл перемножения.

    set @MaxDstamp,30; //maximum number of dungeon

    И так-же это косается данжей, больше 30 вы добавить не сможете, нужно переписывать нпц.

    Используйте стандартного варпера, чем он плох?


  7. doubrius,44,55,4 script Волшебник Сардар 494,{
    function checkcountstats;
    function cost;

    mes .npc$;
    mes "Привет, ^ff0000" +strcharinfo(0)+ "^000000. Хочешь Что бы я добавил статов или скилов?";
    next;
    mes "Если у тебя есть премиум Карточка То покупка будет дешевле на 500к Зени!";
    next;
    if (select("Да:Нет") - 1) close;
    mes .npc$;
    mes "А что именно Будешь покупать?";
    next;
    if( prompt( "Статы", "Очки навыков", "Ничего") == 3 ) close;
    else if( @menu == 1 ) { // stats points
    mes .npc$;
    mes "Сколько очков ты хочешь? За каждое добавленное очко, я буду забирать 1.000.000 Зени";
    next;
    input .@amount;
    if ( Zeny < ( .@amount * cost() ) || .@amount <= 0 ) {
    mes .npc$;
    mes "У тебя нет столько денег!";
    close;

    }
    else {
    mes .npc$;
    mes "А куда именно " +.@amount+ " очков мы будем добавлять??";
    next;
    .@s = select("СТР:АГИ:ВИТ:ИНТ:ДЕКС:ЛАК:Ничего") -1;
    if( .@s == 6 ) close;
    else if( checkcountstats( .@s ) ) { // can't bypass the max stats def in player.conf
    mes .npc$;
    mes "У тебя уже достигнут лимит данного Стата!.";
    close;
    }
    mes .npc$;
    mes "Удачи!";
    statusup2 .stat_up[.@s], .@amount;
    set Zeny, Zeny - ( .@amount * cost() );
    close;
    }
    }
    // skills points
    mes .npc$;
    mes "Сколько очков вы хотите? За каждое добавленное очко, я буду забирать 1.000.000 Зени";
    next;
    input .@amount;
    if ( Zeny < ( .@amount * cost() ) || .@amount <= 0 ) {
    mes .npc$;
    mes "У Вас недостаточно средств!";
    close;
    } else {
    set Zeny, Zeny - ( .@amount * cost() );
    set SkillPoint, SkillPoint + .@amount;
    mes .npc$;
    mes "Удачно Куплено " +.@amount+ " Очков навыков.";
    close;
    }

    function checkcountstats {

    .@eac = eaclass();
    .@s = getarg(0);
    if( .@eac&EAJL_BABY && .@eac&EAJL_THIRD ) {
    if( readparam( .stat_up[.@s] ) >= .max_param_baby_3 )
    return 1;
    else
    return 0;
    } else if( .@eac&EAJL_BABY ) {
    if( readparam( .stat_up[.@s] ) >= .max_param_baby )
    return 1;
    else
    return 0;
    } else if( .@eac&EAJL_THIRD ) {
    if( readparam( .stat_up[.@s] ) >= .max_param_3 )
    return 1;
    else
    return 0;
    } else {
    if( readparam( .stat_up[.@s] ) >= .max_param )
    return 1;
    else
    return 0;
    }

    }

    function cost {

    if (countitem(7056)){
    return 1000000;
    } else {
    return 1500000;
    }

    }

    OnInit:
    set .npc$,"[ " +strnpcinfo(1)+ " ]"; // NPC Name
    setarray .stat_up, bStr, bAgi, bVit, bInt, bDex, bLuk;
    .max_param = getbattleflag( "max_parameter" );
    .max_param_3 = getbattleflag( "max_third_parameter" );
    .max_param_baby = getbattleflag( "max_baby_parameter" );
    .max_param_baby_3 = getbattleflag( "max_baby_third_parameter" );
    end;

    }

    • Upvote 1
  8. нужно заменить :


    set .@instance_id, instance_create("Endless Cellar", getcharid(1));

    на :


    set .@instance_id, instance_create("Endless Cellar");

    и вместо :


    warp has_instance("5@new",156,65);

    напиши :


    instance_enter("Endless Cellar");

    а лучше даже что-то такое :


    switch(instance_enter("Endless Cellar")) {
    case 3:
    mes "An unknown error has occurred.";
    close;
    case 2:
    mes "The memorial dungeon Endless Cellar does not exist.";
    mes "The party leader did not generate the dungeon yet.";
    close;
    case 1:
    mes "You can enter the dungeon after making the party.";
    close;
    case 0:
    end;
    }

    • Upvote 1
  9. Сдесь написанно что то про сценарий и группу игроков Тоесть если я правильно понял если не в пати персонаж то сценарий остановится и он не телепортнётся)


    [Error]: Loading NPC file: npc/instances/EndlessCellar.txt
    script error on npc/instances/EndlessCellar.txt line 87
    Unexpected newline at string.
    82 : mes "^0000FFEndless Cellar^000000 - Try to reserve";
    83 : mes "After making a reservation, you have to talk to NPC
    behind and";
    84 : mes "select the menu 'Enter the Dungeon' to enter the du
    ngeon";
    85 : close2;
    86 : set .@instance_id,instance_create("Endless Cellar",getch
    arid(1))";
    * 87 : if(.@instance_id < 0){
    88 : mes "Failed to create Memorial Dungeon.";
    89 : mes "^FF0000Memorial Dungeon instances reached i
    ts limit.^000000";
    90 : mes "Please report this error to an administrato
    r or GM.";
    91 : close;
    92 : }

    Ещё бы понять в чём тут ошибка и всё))) на 294 ой строке вроде убрал)


    set .@instance_id, instance_create("Endless Cellar", getcharid(1));

    • Upvote 1
  10. Вроде как сработало, спасибо. Это как-то отразиться на стандартных инстах?

    https://rathena.org/...system-rewrite/ вот, если не читал.

    Не думаю что отразится, просто он будет брать mapindex карт из db напрямую, без каких-либо сверок с названием карт (типо есть ли там символ @ и так далее)..

    Как они пишут :


    While the client restricts map names to 8 characters in the [number]@[name] format, the server is able to send a false name to the clients, allowing any map to be instanced.

    Но судя по всему, старые клиенты плохо принимают false name :)

    • Upvote 1
  11. Как вариант :


    int instance_mapname2mapid(const char *name, short instance_id)
    {
    struct instance_data *im;
    int m = map_mapname2mapid(name);
    char iname[MAP_NAME_LENGTH];
    int i;

    if(m < 0) {
    ShowError("instance_mapname2mapid: map name %s does not exist.\n",name);
    return -1;
    }

    strcpy(iname,name);

    if(instance_id <= 0 || instance_id > MAX_INSTANCE_DATA)
    return -1;

    im = &instance_data[instance_id];
    if(im->state != INSTANCE_BUSY)
    return -1;

    for(i = 0; i < MAX_MAP_PER_INSTANCE; i++) {
    if(im->map[i].src_m == m) {
    return map_mapname2mapid(iname);
    }
    }
    return -1;
    }

    Попробуй.. Я вообще офигел от того, что они там наворотили с этими инстансами..

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