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

Victor

Продвинутый пользователь
  • Постов

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

  • Посещение

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

    3

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

  1. 14 часа назад, Salfer сказал:
    
    prontera,152,161,3	script	WSAQ00_1	870,{
    monster "prontera",152,162,"ОДЕРЖИМАЯ",1002,1,"WSAQ00_1::OnDS04Death"; 
    end;
    
    
    OnDS04Death:
    getmapxy(.@mapname$,.@mapx,.@mapy,3);
    mapannounce "prontera","   "+ .@mapname$ +" "+ .@mapx +" "+ .@mapy +"",3;
    end;}

     

    Пример кода, где система отказывается брать Х Y убитого моба.
    Где я ошибся?

    https://rathena.org/board/topic/65099-using-getmapxy-to-monster/

    • Upvote 1
  2. Вот вам отдельный пример из архивов, только под флюкс немного поправить надо.

    Скрытый текст
    
    <h1><b>Статистика вещей </b> сервера</h1><br/>
    
    <?php
    
    $host  = "ип"; 
    $user  = "логин"; 
    $pass  = "пароль"; 
    
    $rodb = "название_базы";
    
    
    $db = mysql_connect($host, $user, $pass) or die("Ошибка подключения к базе данных"); 
    mysql_select_db($rodb,$db);
    
    $iids = array(
    
    4236, 4054, 4241, 4425, 4147, 4145,  4386, 4174, 4142, 4134,  4137, 4123,  4330, 4441, 4047, 4128, 4324, 4430, 4403, 4376, 4146, 4198, 4132, 4131, 4143, 4135, 4144, 4148, 4121, 4342, 4263, 4318, 4302, 4305, 4407, 4374, 4372
    
    );
    
     
    
    $zeny = mysql_fetch_row(mysql_query('SELECT sum(`zeny`) FROM `char`;'));
    
     
    
     
    
    ?>
    
     
    
    <table  class="chtable2" style="width:100%;" cellspacing="1" cellpadding="0" border="0">
    
    <tr >
    
            <th style="width: 50%;padding:5px;"><b>Zeny в игре</b></th>
    
            <th style="padding:5px;"><?php echo ceil($zeny[0] / 1000000); ?> kk</th>
    
    </tr>
    
    <?php
    
     
    
    foreach($iids as $i => $val) {
    
            $name = mysql_fetch_row(mysql_query('SELECT `name_japanese` FROM `item_db` where `id` = '.$val.';'));
    
            //if($name[0] == '')
    
            //      $name = mysql_fetch_row(mysql_query('SELECT `name_japanese` FROM `item_db2` where `id` = '.$val.';'));
    
            $amount = 0;
    
            $q = mysql_fetch_row(mysql_query('SELECT sum(`amount`) FROM `inventory` where `nameid` = '.$val.';'));
    
            $amount += $q[0];
    
            $q = mysql_fetch_row(mysql_query('SELECT sum(`amount`) FROM `storage` where `nameid` = '.$val.';'));
    
            $amount += $q[0];
    
            $q = mysql_fetch_row(mysql_query('SELECT sum(`amount`) FROM `guild_storage` where `nameid` = '.$val.';'));
    
            $amount += $q[0];
    
            
    
            if($val > 4000 and $val < 4454) {
    
                    $q = mysql_fetch_row(mysql_query('SELECT count(*) FROM `storage` where `card0` = '.$val.' or `card1` = '.$val.' or `card2` = '.$val.' or `card3` = '.$val.';'));
    
                    $amount += $q[0];
    
                    $q = mysql_fetch_row(mysql_query('SELECT count(*) FROM `inventory` where `card0` = '.$val.' or `card1` = '.$val.' or `card2` = '.$val.' or `card3` = '.$val.';'));
    
                    $amount += $q[0];
    
                    $q = mysql_fetch_row(mysql_query('SELECT count(*) FROM `guild_storage` where `card0` = '.$val.' or `card1` = '.$val.' or `card2` = '.$val.' or `card3` = '.$val.';'));
    
                    $amount += $q[0];
    
                    
    
            }
    
     
    
            
    
            echo '<tr class="' . ($i % 2 ? 'odd' :  'even' ) . '"><td style="width: 40%;padding:5px;"><img src="http://www.sharonov.ru/ro/database/images_item_small/'.$val.'.gif" border="0"> '.$name[0].'</td><td style="padding:5px;">'.$amount.'</td></tr>';
    
     
    
    }
    
     
    
    ?>
    
    </table>

     

     

    • Upvote 1
  3. Хотел давно создать тему, но никак всё руки не доходили до этого. Данный человек также покупал сборку на гармошке, но так и не оплатил до сих пор, хотя вся работа была выполнена. Слот я отключил - в любом случае там ничего работать не будет, если не снести защиту конечно. Ниже видно как он только кормит обещаниями со своей "женой".

    Пруф:

    Скрытый текст

    [23.02.2016 16:01:21] Valentyn marushchak: умнож и переведи в долары 
    [23.02.2016 16:01:27] Valentyn marushchak: пожайлусто 
    [23.02.2016 16:03:21] Victor: 50$ вообщем 
    [23.02.2016 16:03:32] Valentyn marushchak: хорошо    
    [11.04.2016 1:14:33] Victor: 50$ оплати для начала :)
    [11.04.2016 1:14:39] Valentyn marushchak: ок
    [11.04.2016 1:15:45] Victor: Когда скинешь? 
    [11.04.2016 1:16:36] Valentyn marushchak: в вторник будет оплата 
    [11.04.2016 1:16:41] Valentyn marushchak: на пейпал 
    [11.04.2016 1:16:45] Valentyn marushchak: в $
    [14.04.2016 22:42:19] Victor: Привет, когда оплата будет? 
    [14.04.2016 23:12:05] Valentyn marushchak: уже дал денги жене и твои даные 
    [14.04.2016 23:12:11] Valentyn marushchak: скинет
    [21.04.2016 21:51:40] Victor: привет, когда ждать оплату? 
    [21.04.2016 21:55:37] Valentyn marushchak: Воскрисение 
    [21.04.2016 21:55:48] Valentyn marushchak: Здарова 
    [21.04.2016 22:02:44] Victor: Ок, жду

     

     

  4.  

    Скрытый текст
    
    //===== eAthena Script =======================================
    // Обменник MvP карт
    //===== Автор ================================================
    // nomn. ICQ 898022
    //===== Текущая версия =======================================
    // 1.0
    //===== Совместимость ========================================
    // All eA
    //===== Описание =============================================
    // Меняет 3 любых МвП карты на одну из заданных МвП карт (рандомно)
    //===== Изменения ============================================
    // v1.0 - Релиз.
    
    prontera,192,168,4      script  Обмен MVP Карт  405,{
    
            mes "[Обмен Карт]";
            
            if (mvp_exchange > 2)
            {
                    mes "Готов получить свою карту?";
                    
                    if (select("Да","Нет") == 2)
                    {
                            mes "Ок. Приходи как надумаешь.";
                            close;
                    }
                    
                    next;
                    mes "[Обмен Карт]";
                    set @tmp_card, $mvp_cards[rand(getarraysize($mvp_cards))];
                    mes "Ты получаешь:";
                    mes "^A512E3"+getitemname(@tmp_card)+"^000000";
                    getitem @tmp_card, 1;
                    set mvp_exchange, 0;
                    close;
            }
            
            mes "Привет, я обмениваю MvP карты.";
            
            if (mvp_exchange > 0)
            {
                    mes "Сейчас у меня ^A512E3"+mvp_exchange+" из 3^000000 твоих карт.";
            }
            
            mes "Чем могу помочь?";
            switch(select("Обменять","^A512E3Информация^000000","Ничем")){
            
                    case 1:
                            next;
                            mes "[Обмен Карт]";
                            mes "За 3 твоих MvP карты я выдам тебе какую-нибудь одну, из списка.";
                            mes "^A512E3Какую именно карту тебе дать выбираю я сам.^000000";
                            mes "Согласен?";
                            
                            if (select("Нет","Да") == 1)
                                    close;
    
                            next;
                    
                            for(set .@i,0; .@i < getarraysize($mvp_cards); set .@i, .@i+1)
                            {
                                    if (countitem($mvp_cards[.@i]) > 0)
                                    {
                                            mes "[Обмен Карт]";
                                            mes "Я нашел у тебя 1 ^A512E3"+getitemname($mvp_cards[.@i])+"^000000";
                                            mes "Засчитать?";
                                            
                                            if (select("Нет","Да") == 2)
                                            {
                                                    delitem $mvp_cards[.@i], 1;
                                                    set mvp_exchange, mvp_exchange + 1;
                                                    if (mvp_exchange == 3)
                                                    {
                                                            mes "Достаточно. Секунду...";
                                                            close;
                                                            break;
                                                    }
                                            }
                                            next;
                                    }
                            }
                            mes "[Обмен Карт]";
                            mes "MvP Карт не найдено!";
                            close;
                    break;
                    
                    case 2:
                            next;
                            mes "[Обмен Карт]";
                            mes "Процедура обмена: Я осматриваю твой инвентарь и выбираю из него MvP карты, поодной.";
                            mes "Пока ты не принесешь мне ^A512E33 карты я не продолжу обмен.^000000";
                            mes "Т.е. можешь принести мне первую сегодня, вторую послезавтра, а третью хоть через неделю.";
                            mes "Как только все 3 карты у меня я выдаю тебе в замен одну другую. При этом она может совпасть с одной из тех, что ты мне сдал.";
                            if (select("Список возможных карт","Ясно. Пока.") == 2)
                                    close;
                    
                            next;
                            mes "[Обмен Карт]";
                            for(set .@i,0; .@i < getarraysize($mvp_cards); set .@i, .@i+1)
                                    mes getitemname($mvp_cards[.@i]);
                                    
                            close;
                    break;
                    
                    case 3:
                            close;
                    break;
            }
            end;
            
    OnInit:
            setarray $mvp_cards[0], 4144,4147,4142,4132,4128,4143,4137,4123,4146,4131,4148,
            4121,4135,4318,4324,4168,4305,4276,4241,4134,4330,4263,4236,4302,4342,4372,4352,
            4374,4376,4386,4403,4407,4408,4419,4425,4430,4441;
            end;
    }

     

     

    • Upvote 1
  5. Время перед сообщением.(При большом онлайне грузит сервер)
    by Qwadrat

    Открыть clif.c
    Найти void clif_parse_GlobalMessage(int fd, struct map_session_data* sd)
    После:
    
    char *name, *message;
    int namelen, messagelen;
    
    Добавить:
    
    char prefix[255]; // prefix for timestamp [Qwadrat]
    time_t t = time(NULL); // time var [Qwadrat]
    
    Дальше найти:
    
    // send message to others (using the send buffer for temp. storage)
    И перед ним вставь:
    
    // timestamp feature by Qwadrat
    strftime(prefix, 10, "[%H:%M] ", localtime(&t));
    strcat(prefix,text);
    textlen = strlen(prefix)+1;
    
    Дальше:
    
    // send message to others (using the send buffer for temp. storage)
    Заменить оригинальный кусок кода на:
    
    WFIFOHEAD(fd, 8 + textlen);
    WFIFOW(fd,0) = 0x8d;
    WFIFOW(fd,2) = 8 + textlen;
    WFIFOL(fd,4) = sd->bl.id;
    safestrncpy((char*)WFIFOP(fd,8), prefix, textlen);
    clif_send(WFIFOP(fd,0), WFIFOW(fd,2), &sd->bl, sd->chatID ? CHAT_WOS : AREA_CHAT_WOC);
    // send back message to the speaker
    //memcpy(WFIFOP(fd,0), RFIFOP(fd,0), RFIFOW(fd,2));-original
    memcpy(WFIFOP(fd,4), prefix, textlen); // [Qwadrat]
    WFIFOW(fd,0) = 0x8e;
    WFIFOW(fd,2) = RFIFOW(fd,2) + 8; // 8 - textlen [Qwadrat]
    WFIFOSET(fd, WFIFOW(fd,2));

     

    • Upvote 6
  6. /modules/admin_spawn/parse.php

    Меняем

    $path = FLUX_ROOT . '/upload_npc/npc/' . $this->pref . '/scripts_main.conf';

    На

    $path = FLUX_ROOT . '/upload_npc/npc/scripts_main.conf';

    Находим

    $files[] = FLUX_ROOT . '/upload_npc/' . $item;

    Заменяем на

    $files[] = FLUX_ROOT . '/upload_npc/' . trim($item);

    Ищем

    $files = array_merge($files, $this->getFiles(FLUX_ROOT . '/upload_npc/' . $item));

    И вместо этого пишем

    $files = array_merge($files, $this->getFiles(FLUX_ROOT . '/upload_npc/' . trim($item)));

    Должно помочь. У меня так работает.

    • Upvote 1
  7. Цитата

    1. у барда и дансы разные пассивки на владение оружием, а значит комуто они атаки давать не будут, если конечно сможешь одеть на того и другого.
    2. у каждого типа оружия свой номер например двуручный меч это 34, а броня это 16, ты ведь знаешь как точить вещи командой. Так вот плетки имеют дэфолтный рэндж атак 2, а гитары -1, логично предположить что это разные виды оружия.

    Думаю эта инфа будет полезной. То чувство, когда игрок знает больше тебя :)

    • Downvote 1
  8. 3 часа назад, Gendalf сказал:

    Я хз что вы за проблемы тут выдумываете, хочешь норм серв - пили, будет онлайн, если у тебя голова на плечах.
    Ничего не умирало, да, конечно людей играет меньше, но они играют, и набрать 1-1.5к онлайна можно. Главное уметь. Я вот не умею :D

    1. Выделенный сервер в Европе с анти-ддосом (ежемесячно 3-5к руб.)

    2. Накрутка в популярных игровых топах (можно конечно самому, а так хз последний раз когда обращался в 3 топах по 1к голосов стоило мне ~2к руб.)

    3. Мультиязычность сервера, клиента и сайта.

    4. Пиар на форумах топовых гильдий, в фейсбуке, в вк и других ресурсах, можно также подрубить директ (неплохо будет на этапе перед открытием)

    5. Хороший саппорт со знанием английского для осуществления техподдержки на форуме и в игре.

    6. Защита Gepard Shield 2.0 (самая актуальная, стоимость помоему ~150$)

    Основные моменты для успешного сервера. Возможно что-то упустил... На самом деле всё реально, вот только кому это надо так заморачиваться, когда проще открыть серв для себя и друзей, или для быстрой наживы и через месяц-другой закрыть его.

    lYef6q7FRFM.jpg

  9. Появилась необходимость сделать проверку минимального расстояния до трейдера
    vending.c

    в функции vending_openvending
    после

    	// check number of items in shop
    	if( count < 1 || count > MAX_VENDING || count > 2 + vending_skill_lvl )
    	{	// invalid item count
    		clif_skill_fail(sd, MC_VENDING, USESKILL_FAIL_LEVEL, 0);
    		return;
    	}


    добавить

    	struct block_list *bl;
    	if((check_distance_blxy(sd->bl.m,sd->bl.x,sd->bl.y,3))&& (((TBL_PC*)bl)->vender_id))
    	{
    		clif_displaymessage(sd->fd, "Вы ставите магазин слишком близко к другому торговцу. Минимальное расстояние: 3 клетки.");
    		clif_skill_fail(sd, MC_VENDING, USESKILL_FAIL_LEVEL, 0);
    		return;
        }

    Компилируется без ошибок, но мод работает криво. Т.е расстояние не проверяет и магазин можно всё равно ставить рядом.

    Источник: https://www.eathena.ws/board/index.php?showtopic=189873

    Есть идеи как поправить?

  10. Ты хочешь, чтоб статусы не снимались?

    Или снимались только отрицательные?

    Если статусы снова накладываются, то на какое время

    У меня через скрипт на персонажа вешаются положительные бафы

    sc_start SC_INCMATKRATE,-1,10;

    Здесь благодаря таймеру, уходящему в минус - мы получаем баф на неопределенный срок.

    Но госпел сбрасывает его, а мне не нужно чтобы он этого делал, либо чтобы после окончания умения эти бафы снова накладывались.

  11. Имеется умение PA_GOSPEL

    Также есть скрипт, дающий статусы (бонусы), к примеру SC_INCATKRATE и SC_INCMATKRATE

    Госпел эти статусы скидывает.

    Где-то в этом куске это нужно сделать, только вот как именно понять не могу.


    case PA_GOSPEL:
    if (sce && sce->val4 == BCT_SELF)
    {
    status_change_end(src, SC_GOSPEL, INVALID_TIMER);
    return 0;
    }
    else
    {
    sg = skill_unitsetting(src,skillid,skilllv,src->x,src->y,0);
    if (!sg) break;
    if (sce)
    status_change_end(src, type, INVALID_TIMER); //Was under someone else's Gospel. [Skotlex]
    sc_start4(src,type,100,skilllv,0,sg->group_id,BCT_SELF,skill_get_time(skillid,skilllv));
    clif_skill_poseffect(src, skillid, skilllv, 0, 0, tick); // PA_GOSPEL music packet
    }
    break;

    Нарыл в примерах проверку:


    if (sd->sc.count && (sd->sc.data[SC_INCATKRATE] || sd->sc.data[SC_INCMATKRATE]))
    {
    ...
    }

    Требуется: при использовании госпеля, чтобы статусы после сброса по новой присваивались персонажу.

    Помогите разобраться. Как sc_start реализовать в проверку?

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