Мясорубка

Тема в разделе "Творчество", создана пользователем Lexavan, 5 дек 2024.

  1. Lexavan

    Lexavan Игрок

    //===== rAthena Script =======================================================
    //= Мясорубка
    //===== By: ==================================================================
    //= Gerome (оригинал), адаптация и исправления
    //===== Current Version: =====================================================
    //= 1.1
    //===== Compatible With: =====================================================
    //= eAthena, rAthena
    //===== Description: =========================================================
    //= Игрок получает награду за убийство в PvP
    //============================================================================

    - script Мясорубка -1,{
    OnInit:
    /* ------------*
    | Конфигурация |
    /*-------------*/
    setarray .unq_req_id[0], 671,670; // ID требуемых предметов
    setarray .unq_req_quantity[0],10,5; // Количество требуемых предметов

    setarray .unq_reward_id[0], 671; // ID наград
    setarray .unq_reward_quantity[0],20; // Количество наград

    set .unq_gm_lvl,60; // ГМ уровень, начиная с которого награды не выдаются

    setarray .unq_pvpmap$[0], "pvp_y_8-4","guild_vs3"; // PvP-карты
    setarray .unq_pvproom_location[0],"0,0","0,0"; // Локации для телепортации (x, y)

    // Проверка массивов
    if (getarraysize(.unq_req_id) != getarraysize(.unq_req_quantity)) {
    announce "Ошибка конфигурации: массивы .unq_req_id и .unq_req_quantity разной длины.", bc_all;
    end;
    }
    if (getarraysize(.unq_pvpmap$) != getarraysize(.unq_pvproom_location)) {
    announce "Ошибка конфигурации: массивы .unq_pvpmap$ и .unq_pvproom_location разной длины.", bc_all;
    end;
    }
    end;

    OnPCKillEvent:
    if (getgmlevel() >= .unq_gm_lvl) end;

    getmapxy .@map$, .@x, .@y, 0;
    for (set .@i, 0; .@i < getarraysize(.unq_pvpmap$); set .@i, .@i + 1) {
    if (.@map$ == .unq_pvpmap$[.@i]) {
    attachrid killerrid;
    for (set .@j, 0; .@j < getarraysize(.unq_reward_id); set .@j, .@j + 1) {
    getitem .unq_reward_id[.@j], .unq_reward_quantity[.@j];
    }
    announce rid2name(killerrid) + " убил " + rid2name(killedrid) + " в PvP!", bc_map;
    }
    }
    end;
    }

    /*------------*
    | PvP Телепорт |
    /*------------*/
    prontera,159,187,4 script PVP Warper#p1 108,{
    set .npcname$,"[^990000Мясорубка Телепорт^000000]";

    mes .npcname$;
    mes "Привет, " + strcharinfo(0) + "!";
    mes "Я могу телепортировать тебя в PvP-зону.";
    mes "Для этого мне нужны следующие предметы:";

    for (set .@i, 0; .@i < getarraysize(.unq_req_id); set .@i, .@i + 1) {
    mes .unq_req_quantity[.@i] + " ^FF0000" + getitemname(.unq_req_id[.@i]) + "^000000";
    }
    next;

    switch(select("Ок:Отмена")) {
    case 1:
    // Проверка предметов
    for (set .@i, 0; .@i < getarraysize(.unq_req_id); set .@i, .@i + 1) {
    if (countitem(.unq_req_id[.@i]) < .unq_req_quantity[.@i]) {
    mes .npcname$;
    mes "У тебя недостаточно предметов!";
    close;
    }
    }

    // Удаление предметов и выбор карты
    for (set .@i, 0; .@i < getarraysize(.unq_req_id); set .@i, .@i + 1) {
    delitem .unq_req_id[.@i], .unq_req_quantity[.@i];
    }

    mes "Выбери PvP-зону:";
    for (set .@i, 0; .@i < getarraysize(.unq_pvpmap$); set .@i, .@i + 1) {
    set .@menu$, .@menu$ + ":" + .unq_pvpmap$[.@i] + " (" + getmapusers(.unq_pvpmap$[.@i]) + ")";
    }
    set .@choice, select(.@menu$) - 1;

    explode(.@location$, .unq_pvproom_location[.@choice], ",");
    warp .unq_pvpmap$[.@choice], atoi(.@location$[0]), atoi(.@location$[1]);
    close;

    case 2:
    mes .npcname$;
    mes "До встречи!";
    close;
    }
    }