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

Flitemaster

Проверенные
  • Постов

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

  • Посещение

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

    3

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

  1. Благодарю вас, помогло, однакож почемуто другие мои игроки, не видят что я пишу на русском, у них это квадраты, также и я вижу их русский язык непонятными иероглифами...

    Очень похоже на то, что у игроков активно значение 65001, а не 1251.

    Это очень странно, но я дал людям сразу оба фаила dinput.dll и dinput.ini чтобы они их заменили, может криво заменили, я уточню ещё раз.

  2. В dinput.ini меняем:

    CodePage = 65001

    на:

    CodePage = 1251

    Благодарю вас, помогло, однакож почемуто другие мои игроки, не видят что я пишу на русском, у них это квадраты, также и я вижу их русский язык непонятными иероглифами...

  3. переходи с UTF-8 на ANSI-1251

    ANSI-1251 онже CP1251 ?

    Не помогло, заменил всю базу на cp1251_general_ci

    Где ещё это можно изменить помимо базы?

  4. Всем добрый день.

    Вообщем столкнулся я с такой проблемой, незнаю ошибка это ЕХЕ, Эмулятора, или Киента.

    Проблема состоит из такого рода.

    Пишу по английский , максимальное количество составляет (по стандарту) всё нормально.

    SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

    Но при попытке написать по русский, максимальное количество ограничено в 35 букв

    ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

    В как это можно исправить?

    322.jpg

  5. Да проще говоря использовать нпц и не изобретать велосипед :)

    Ну в чёмто вы оказались правы, однакож изобритение привело к такому :))

    Я доволен результатом :)

    double_dex.jpg

    А где можно нарыть Нпц Который с шансом 100% зальёт этот камень и не только в бронь А в любой слот?)))

    И ещё Если кто-то Сталкивался Дайте ссылку на Джоб мастера Который Сразу Даёт 99/50 (неважно)

    И сразу Адванс профессию)

    Самому Его Писать так влом)))

    Уважаемый физик, не знаю как насчёт

    А в любой слот

    Но нашёл вам решение, используйте НПЦ которого я выложил (он вставляет 100%)

    Замените в строке ID вещи или оружие.


    setarray .EquipID[0],1602; // ID Armor (1602 - Rod[4])

    И получите результат вот такой :)))

    image.jpg

    Насчёт Instant Job Changer (Не тестил)

    • //= Script Release : Job Changer + Max Leveler [ Version 1.6 ]
    • //==================================By==========================================//
    • //= ManiacSociety
    • //==============================================================================//
    • //= Idea Came From : ManiacSociety
    • //= Helper : Emistry & Kenpachi
    • //==============================================================================//
    • //= D E S C R I P T I O N S
    • //==============================================================================//
    • // -- 1. Character can choose a Job which he like to be.
    • // -- 2. This NPC only have 1 Time Usage.
    • // If it is set to Account Based then that account can use 1 times.
    • // If it is set to Character Based then all new character can use 1 times.
    • // -- 3. Complete skills / Skill Points will be given if it is set to be.
    • // -- 4. Base Level and Job Level will be given upon Job Change.
    • // -- 5. Allow players to click an items to call out the NPC.
    • //==============================================================================//
    • //= V E R S I O N S
    • //==============================================================================//
    • // -- [ 1.6 ] : Added Item Script which allow the Scripts work as a "Tickets".
    • // -- [ 1.5 ] : Added Configuration for Account Based / Character Based Settings
    • // -- [ 1.4 ] : Added Baby Classes + 3rd Job Classes.
    • // -- [ 1.3 ] : Added Configuration Option , 4 Announce Option , Informations.
    • // -- [ 1.2 ] : Simplified Scripts + Shorten the Scripts.
    • // -- [ 1.1 ] : Added New Job Change Option.
    • // -- [ 1.0 ] : Simple Login Auto Max Level + Job Changer.
    • //==============================================================================//
    • //= R U L E S
    • //==============================================================================//
    • // -- 1. Do not use for exchanging purpose.
    • // -- 2. Do not claim it as yours.
    • // -- 3. Do not change or remove the credits.
    • // -- 4. Do not sell the script in order to get paid.
    • // -- 5. Do not re-sharing upon modified without permission.
    • //==============================================================================//
    • // -- Add this at item DB. ( Change it to any items to your like. )
    • // -- 30000,JobClassTicket,JobClassTicket,11,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ doevent "ClassHelper::OnPCLoginEvent"; },{},{}
    • amatsu,248,250,6 script Job Master 123,{
    • // -- Configuration Option
    • set .npcname$,"[ ^0000FF Class Helper ^000000 ]";
    • set .InfoMenu,1; // Classes Informations Option [ 0 - Disable / 1 - Enable ]
    • set .1stClassMenu,0; // First Job Class Option [ 0 - Disable / 1 - Enable ]
    • set .2ndClassMenu,0; // Second Job Class Option [ 0 - Disable / 1 - Enable ]
    • set .High1stClassMenu,1; // High 1st Class Option [ 0 - Disable / 1 - Enable ]
    • set .Trans2ndClassMenu,0; // Transcendent Class Option [ 0 - Disable / 1 - Enable ]
    • set .Trans3rdClassMenu,0; // Third Job Class Option [ 0 - Disable / 1 - Enable ]
    • set .ExpandedClassMenu,1; // Expanded Class Option [ 0 - Disable / 1 - Enable ]
    • set .BabyClassMenu,0; // Baby Job Class Option [ 0 - Disable / 1 - Enable ]
    • set .Baby3rdClassMenu,0; // Baby Third Job Class Option [ 0 - Disable / 1 - Enable ]
    • set .Allskills,0; // Complete Skills Option [ 0 - Disable / 1 - Enable ]
    • // -- Usable for Only 1 Time
    • set .Based,1; // [ 0 - Account Based / 1 - Character Based ]
    • if( ClassHelper == 1 || #ClassHelper == 1 ) end;
    • Main_Menu:
    • mes .npcname$;
    • mes "I am the Job Class Helper...";
    • mes "I am here to help you.";
    • mes " ^FF0000________________________________^000000";
    • mes "Do you wish to become Stronger ?";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "Do you admire those who have a great power ? Do you wish to become a part of them ? If yes , then which classes that you admire the most ?";
    • next;
    • switch(select(( .InfoMenu == 0 )?"":"^4EEE94Classes Information^000000",
    • ( .1stClassMenu == 0 )?"":"^0000FFFirst Job Classes^000000",
    • ( .2ndClassMenu == 0 )?"":"^0000FFSecond Job Classes^000000",
    • ( .High1stClassMenu == 0 )?"":"^0000FFHigh First Job Classes^000000",
    • ( .Trans2ndClassMenu == 0 )?"":"^0000FFTranscendent Job Classes^000000",
    • ( .Trans3rdClassMenu == 0 )?"":"^0000FFThird Job Classes^000000",
    • ( .ExpandedClassMenu == 0 )?"":"^0000FFExpanded Job Classes^000000",
    • ( .BabyClassMenu == 0 )?"":"^0000FFBaby Normal Job Classes^000000",
    • ( .Baby3rdClassMenu == 0 )?"":"^0000FFBaby Third Job Classes^000000",
    • "^FF0000Sorry, i admire nobody....^000000")) {
    • Case 1: goto Classes_info;
    • Case 2: goto FirstJob_Classes;
    • Case 3: goto SecondJob_Classes;
    • Case 4: goto HighFirstJob_Classes;
    • Case 5: goto TransSecondJob_Classes;
    • Case 6: goto TransThirdJob_Classes;
    • Case 7: goto ExpandedJob_Classes;
    • Case 8: goto BabyJob_Classes;
    • Case 9: goto BabyThirdJob_Classes;
    • Case 10:
    • if ( .Based == 0 ){ set #ClassHelper,1; }
    • if ( .Based == 1 ){ set ClassHelper,1; }
    • close;
    • }
    • FirstJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00Swordman^000000",
    • "^76EE00Magician^000000",
    • "^76EE00Archer^000000",
    • "^76EE00Acolyte^000000",
    • "^76EE00Merchant^000000",
    • "^76EE00Thief^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,1,99,50,60,"All";
    • Case 2: callsub Job_Changing,2,99,50,60,"All";
    • Case 3: callsub Job_Changing,3,99,50,60,"All";
    • Case 4: callsub Job_Changing,4,99,50,60,"All";
    • Case 5: callsub Job_Changing,5,99,50,60,"All";
    • Case 6: callsub Job_Changing,6,99,50,60,"All";
    • Case 7: goto Main_Menu;
    • }
    • HighFirstJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00High Swordman^000000",
    • "^76EE00High Magician^000000",
    • "^76EE00High Archer^000000",
    • "^76EE00High Acolyte^000000",
    • "^76EE00High Merchant^000000",
    • "^76EE00High Thief^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,4002,99,50,60,"All";
    • Case 2: callsub Job_Changing,4003,99,50,60,"All";
    • Case 3: callsub Job_Changing,4004,99,50,60,"All";
    • Case 4: callsub Job_Changing,4005,99,50,60,"All";
    • Case 5: callsub Job_Changing,4006,99,50,60,"All";
    • Case 6: callsub Job_Changing,4007,99,50,60,"All";
    • Case 7: goto Main_Menu;
    • }
    • SecondJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00Knight^000000",
    • "^76EE00Priest^000000",
    • "^76EE00Wizard^000000",
    • "^76EE00Blacksmith^000000",
    • "^76EE00Hunter^000000",
    • "^76EE00Assassin^000000",
    • "^76EE00Crusader^000000",
    • "^76EE00Monk^000000",
    • "^76EE00Sage^000000",
    • "^76EE00Rogue^000000",
    • "^76EE00Alchemist^000000",
    • ( Sex == 0 )?"":"^76EE00Dancer^000000",
    • ( Sex == 1 )?"":"^76EE00Bard^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,7,99,50,110,"All";
    • Case 2: callsub Job_Changing,8,99,50,110,"All";
    • Case 3: callsub Job_Changing,9,99,50,110,"All";
    • Case 4: callsub Job_Changing,10,99,50,110,"All";
    • Case 5: callsub Job_Changing,11,99,50,110,"All";
    • Case 6: callsub Job_Changing,12,99,50,110,"All";
    • Case 7: callsub Job_Changing,14,99,50,110,"All";
    • Case 8: callsub Job_Changing,15,99,50,110,"All";
    • Case 9: callsub Job_Changing,16,99,50,110,"All";
    • Case 10: callsub Job_Changing,17,99,50,110,"All";
    • Case 11: callsub Job_Changing,18,99,50,110,"All";
    • Case 12: callsub Job_Changing,20,99,50,110,"All";
    • Case 13: callsub Job_Changing,19,99,50,110,"All";
    • Case 14: goto Main_Menu;
    • }
    • TransSecondJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00Lord Knight^000000",
    • "^76EE00High Priest^000000",
    • "^76EE00High Wizard^000000",
    • "^76EE00Whitesmith^000000",
    • "^76EE00Sniper^000000",
    • "^76EE00Assassin Cross^000000",
    • "^76EE00Paladin^000000",
    • "^76EE00Champion^000000",
    • "^76EE00Professor^000000",
    • "^76EE00Stalker^000000",
    • //"^76EE00Creator^000000",
    • ( Sex == 0 )?"":"^76EE00Gypsy^000000",
    • ( Sex == 1 )?"":"^76EE00Clowm^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,4008,99,70,130,"All";
    • Case 2: callsub Job_Changing,4009,99,70,130,"All";
    • Case 3: callsub Job_Changing,4010,99,70,130,"All";
    • Case 4: callsub Job_Changing,4011,99,70,130,"All";
    • Case 5: callsub Job_Changing,4012,99,70,130,"All";
    • Case 6: callsub Job_Changing,4013,99,70,130,"All";
    • Case 7: callsub Job_Changing,4015,99,70,130,"All";
    • Case 8: callsub Job_Changing,4016,99,70,130,"All";
    • Case 9: callsub Job_Changing,4017,99,70,130,"All";
    • Case 10: callsub Job_Changing,4018,99,70,130,"All";
    • Case 11: callsub Job_Changing,4019,99,70,130,"All";
    • Case 12: callsub Job_Changing,4021,99,70,130,"All";
    • Case 13: callsub Job_Changing,4020,99,70,130,"All";
    • Case 14: goto Main_Menu;
    • }
    • TransThirdJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00Rune Knight^000000",
    • "^76EE00Warlock^000000",
    • "^76EE00Ranger^000000",
    • "^76EE00Arch Bishop^000000",
    • "^76EE00Mechanic^000000",
    • "^76EE00Guillotine Cross^000000",
    • "^76EE00Royal Guard^000000",
    • "^76EE00Sorcerer^000000",
    • ( Sex == 0 )?"":"^76EE00Wanderer^000000",
    • ( Sex == 1 )?"":"^76EE00Minstrel^000000",
    • "^76EE00Shura^000000",
    • "^76EE00Genetic^000000",
    • "^76EE00Shadow Chaser^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,4060,99,70,200,"All";
    • Case 2: callsub Job_Changing,4061,99,70,200,"All";
    • Case 3: callsub Job_Changing,4062,99,70,200,"All";
    • Case 4: callsub Job_Changing,4063,99,70,200,"All";
    • Case 5: callsub Job_Changing,4064,99,70,200,"All";
    • Case 6: callsub Job_Changing,4065,99,70,200,"All";
    • Case 7: callsub Job_Changing,4073,99,70,200,"All";
    • Case 8: callsub Job_Changing,4074,99,70,200,"All";
    • Case 9: callsub Job_Changing,4076,99,70,200,"All";
    • Case 10: callsub Job_Changing,4075,70,70,200,"All";
    • Case 11: callsub Job_Changing,4077,70,70,200,"All";
    • Case 12: callsub Job_Changing,4078,70,70,200,"All";
    • Case 13: callsub Job_Changing,4079,70,70,200,"All";
    • Case 14: goto Main_Menu;
    • }
    • ExpandedJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00Super Novice^000000",
    • "^76EE00Gunslinger^000000",
    • "^76EE00Ninja^000000",
    • "^76EE00Takewon^000000",
    • "^76EE00Star Gladiator^000000",
    • "^76EE00Soul Linker^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,23,99,99,110,"All";
    • Case 2: callsub Job_Changing,24,99,50,600,"All";
    • Case 3: callsub Job_Changing,25,99,50,60,"All";
    • Case 4: callsub Job_Changing,4046,99,50,60,"All";
    • Case 5: callsub Job_Changing,4047,99,50,110,"All";
    • Case 6: callsub Job_Changing,4049,99,50,110,"All";
    • Case 7: goto Main_Menu;
    • }
    • BabyJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00Baby Swordman^000000",
    • "^76EE00Baby Magician^000000",
    • "^76EE00Baby Archer^000000",
    • "^76EE00Baby Acolyte^000000",
    • "^76EE00Baby Merchant^000000",
    • "^76EE00Baby Thief^000000",
    • "^76EE00Baby Knight^000000",
    • "^76EE00Baby Priest^000000",
    • "^76EE00Baby Wizard^000000",
    • "^76EE00Baby Blacksmith^000000",
    • "^76EE00Baby Hunter^000000",
    • "^76EE00Baby Assassin^000000",
    • "^76EE00Baby Crusader^000000",
    • "^76EE00Baby Monk^000000",
    • "^76EE00Baby Sage^000000",
    • "^76EE00Baby Rogue^000000",
    • "^76EE00Baby Alchemist^000000",
    • ( Sex == 0 )?"":"^76EE00Baby Dancer^000000",
    • ( Sex == 1 )?"":"^76EE00Baby Bard^000000",
    • "^76EE00Baby Baby^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,4024,99,50,60,"All";
    • Case 2: callsub Job_Changing,4025,99,50,60,"All";
    • Case 3: callsub Job_Changing,4026,99,50,60,"All";
    • Case 4: callsub Job_Changing,4027,99,50,60,"All";
    • Case 5: callsub Job_Changing,4028,99,50,60,"All";
    • Case 6: callsub Job_Changing,4029,99,50,60,"All";
    • Case 7: callsub Job_Changing,4030,99,50,110,"All";
    • Case 8: callsub Job_Changing,4031,99,50,110,"All";
    • Case 9: callsub Job_Changing,4032,99,50,110,"All";
    • Case 10: callsub Job_Changing,4033,99,50,110,"All";
    • Case 11: callsub Job_Changing,4034,99,50,110,"All";
    • Case 12: callsub Job_Changing,4035,99,50,110,"All";
    • Case 13: callsub Job_Changing,4037,99,50,110,"All";
    • Case 14: callsub Job_Changing,4038,99,50,110,"All";
    • Case 15: callsub Job_Changing,4039,99,50,110,"All";
    • Case 16: callsub Job_Changing,4040,99,50,110,"All";
    • Case 17: callsub Job_Changing,4041,99,50,110,"All";
    • Case 18: callsub Job_Changing,4043,99,50,110,"All";
    • Case 19: callsub Job_Changing,4042,99,50,110,"All";
    • Case 20: callsub Job_Changing,4045,99,50,110,"All";
    • Case 21: goto Main_Menu;
    • }
    • BabyThirdJob_Classes:
    • mes .npcname$;
    • mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
    • next;
    • switch(select("^76EE00Baby Rune Knight^000000",
    • "^76EE00Baby Warlock^000000",
    • "^76EE00Baby Ranger^000000",
    • "^76EE00Baby Arch Bishop^000000",
    • "^76EE00Baby Mechanic^000000",
    • "^76EE00Baby Guillotine Cross^000000",
    • "^76EE00Baby Royal Guard^000000",
    • "^76EE00Baby Sorcerer^000000",
    • ( Sex == 0 )?"":"^76EE00Baby Wanderer^000000",
    • ( Sex == 1 )?"":"^76EE00Baby Minstrel^000000",
    • "^76EE00Baby Shura^000000",
    • "^76EE00Baby Genetic^000000",
    • "^76EE00Baby Shadow Chaser^000000",
    • "^FF0000Back^000000")) {
    • // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;
    • Case 1: callsub Job_Changing,4096,99,70,200,"All";
    • Case 2: callsub Job_Changing,4097,99,70,200,"All";
    • Case 3: callsub Job_Changing,4098,99,70,200,"All";
    • Case 4: callsub Job_Changing,4099,99,70,200,"All";
    • Case 5: callsub Job_Changing,4100,99,70,200,"All";
    • Case 6: callsub Job_Changing,4101,99,70,200,"All";
    • Case 7: callsub Job_Changing,4102,99,70,200,"All";
    • Case 8: callsub Job_Changing,4103,99,70,200,"All";
    • Case 9: callsub Job_Changing,4105,99,70,200,"All";
    • Case 10: callsub Job_Changing,4104,99,70,200,"All";
    • Case 11: callsub Job_Changing,4106,99,70,200,"All";
    • Case 12: callsub Job_Changing,4107,99,70,200,"All";
    • Case 13: callsub Job_Changing,4108,99,70,200,"All";
    • Case 14: goto Main_Menu;
    • }
    • Job_Changing:
    • mes .npcname$;
    • mes "You are now a part of ^FF0000"+jobname(getarg(0))+"^000000.";
    • if (compare(getarg(4),"All")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_all,0x76EE00; }
    • if (compare(getarg(4),"Map")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_map,0x76EE00; }
    • if (compare(getarg(4),"Area")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_area,0x76EE00; }
    • if (compare(getarg(4),"Self")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_self,0x76EE00; }
    • jobchange getarg(0);
    • set BaseLevel,getarg(1);
    • set JobLevel,getarg(2);
    • ResetSkill;
    • ResetStatus;
    • set SkillPoint,getarg(3);
    • if ( .Allskills == 1 ){
    • atcommand "@allskills";
    • set SkillPoint,0;
    • }
    • percentheal 100,100;
    • if ( .Based == 0 ){ set #ClassHelper,1; }
    • if ( .Based == 1 ){ set ClassHelper,1; }
    • warp "prontera",155,180;
    • save "prontera",155,180;
    • close;
    • Classes_info:
    • mes .npcname$;
    • mes "=====[^76EE00 Swordman Classes ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "Enthusiastic skills in sword fighting is a definite attraction to all teenagers. Easy to control and master character enables most players to be a great player.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Archer Classes ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "Long ranged attack ability and special techniques of archers in defeating enemy often lure players to try this.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Mage Classes ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "Fascinating element techniques involvement of nature in its abilities is truly amazing with their series of undefeatable magics.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Thief Classes ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "Poisoning and dodging abilities will defeat most of the enemy. Maximum defensive and offensive ability caused this character to fearsome one.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Acolyte Classes ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "A supportive character, most of the skills like helping will benefit to teammates who lead to teammates act like a terminator.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Merchant Classes ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "Involving communication with other players that emphasizes on battles, intelligence in business dealing. His versatility made him must not be look down.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Super Novice ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "A job who are Advanced after Novice Class. It look alike like a Novice but it is not. Beside that, it can learn most of the skills for all 1st Job Class.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Gunslinger ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "The only Job class in RO who are using Gun as weapon. If are you a Gun Lover , there is no doubt you will choose this Job.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Ninja ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "A mysterious Job Class , who alway processing Ancient Spells , look alike with Mage but not mage , good in PK , can evade very well during PK.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Taekwon ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "Just like the name has mentioned. The only class in RO who are not using any Weapon. Attack enemy using barehand and foots. ";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Star Gladiator ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "A class who can use the power of the Sun / Star / Moon. By processing the power of Universe to gain a stronger Power.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • mes .npcname$;
    • mes "=====[^76EE00 Soul Linker ^000000]=====";
    • mes " ^FF0000________________________________^000000";
    • mes "^4EEE94Description :^000000";
    • mes "Class that work like a Shaman, who able to recalling the soul of the dead from the underworld to Boost other class ability.";
    • mes " ^FF0000________________________________^000000";
    • next;
    • goto Main_Menu;
    • OnInit:
    • waitingroom " Job Changer",0;
    • end;
    • }

    Источник:

    http://rathena.org/b...t-job-changer/

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Выкладываю если кому нужен НПЦ , мальца под себя настроил. берёт только High Grade Armor

    NPC Script


    prontera,165,63,6 script Apprentice Craftswoman 74,{

    mes "[Apprentice Craftswoman]";
    mes "I've been studying ways to enhance an armor to maximize it's capability.";
    next;
    mes "[Apprentice Craftswoman]";
    mes "Enchanting is an awesome skill that infuses a mysterious status power into the armor's hidden socket.";
    next;
    mes "[Apprentice Craftswoman]";
    mes "However, you have to keep in mind that if there are two armors of the same kind in your possession, the Enchantment will be applied in the order they are placed in your inventory.";
    next;
    mes "[Apprentice Craftswoman]";
    mes "In that case, the Enchantment may be applied to an item which you didn't mean to Enchant. So just bring ^5555ffONE Armor^000000 you want enchanted to be safe..";
    next;
    mes "[Apprentice Craftswoman]";
    mes "I'm not responsible for what would happen if you have more than one of the same kind in your inventory.";
    next;
    mes "[Apprentice Craftswoman]";
    mes "I work only with High Grade Armor ";
    mes "Chance to ^FF0000Enchant^000000 is ^5555f1100%^000000 ";
    next;
    mes "[Apprentice Craftswoman]";
    mes "You must give the ^5555f1Stat Rune^000000";
    next;
    mes "[Apprentice Craftswoman]";
    mes "Check my list.";
    next;
    switch(select("High Grade Armor List.:Maybe next time.")) {


    case 2:
    mes "[Apprentice Craftswoman]";
    mes "Please come back when you have any interest in enchanting your armor.";
    close;
    }

    setarray .EquipID[0],2364,2365,2391,2374,2375,2376,2377,2378,2379,2380,2381,2382,2387,2388,2389,2390; // ID Armor
    for( set .@i,0; .@i < getarraysize( .EquipID ); set .@i,.@i + 1 )
    set .@EquipMenu$,.@EquipMenu$ + getitemname( .EquipID[.@i] )+( !getitemslots(.EquipID[.@i])?"":"["+getitemslots(.EquipID[.@i])+"]" )+":";
    set .@Equip,select( .@EquipMenu$ ) - 1;
    if( !countitem( .EquipID[.@Equip] ) ){
    mes "You didnt have this Equipment with you.";
    close;
    }
    mes "Equipment : ^FF0000"+getitemname( .EquipID[.@Equip] )+"^000000";
    switch( select( "Strength:Intelligent:Dexterity:Agility:Vitality:Luck" )){
    Case 1: setarray .RuneID[0],4702; break;
    Case 2: setarray .RuneID[0],4712; break;
    Case 3: setarray .RuneID[0],4722; break;
    Case 4: setarray .RuneID[0],4732; break;
    Case 5: setarray .RuneID[0],4742; break;
    Case 6: setarray .RuneID[0],4752; break;
    }
    for( set .@i,0; .@i < getarraysize( .RuneID ); set .@i,.@i + 1 )
    set .@RuneMenu$,.@RuneMenu$ + getitemname( .RuneID[.@i] )+":";
    set .@Rune,select( .@RuneMenu$ ) - 1;
    mes "Rune : ^FF0000"+getitemname( .RuneID[.@Rune] )+"^000000";
    next;
    if( select("Confirm:Cancel") == 1 ){
    if( !countitem( .RuneID[.@Rune] ) ){
    mes "[Apprentice Craftswoman]";
    mes "Sorry you didnt have the "+getitemname( .RuneID[.@Rune] )+" with you.";
    }else{
    delitem .EquipID[.@Equip],1;
    delitem .RuneID[.@Rune],1;
    getitem2 .EquipID[.@Equip],1,1,0,0,0,0,0,.RuneID[.@Rune];
    mes "[Apprentice Craftswoman]";
    mes "Done.";
    mes "^0000FF"+getitemname( .EquipID[.@Equip] )+"^000000";
    mes "Enchanted with ^FF0000"+getitemname( .RuneID[.@Rune] )+"^000000";
    }
    }
    close;
    }

    ScreenShot

    3211.jpg

    • Upvote 1
  6. видеть и сделать, разные вещи

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

    Вопрос заключаеться как именно, но истина гдето точно рядом.

    Однако функциональность этой вещи , не было как Usable items оно попрежнему находилось в отсеке Misс, и фукнционировала также когда вставляешь любую карту.

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

    prontera,155,181,5 script Энчантер 757,{

    mes "Which Armor you want to Enchant ?";

    mes "Make sure there is no Card / Rune in it.";

    next;

    setarray .EquipID[0],2310; // ID Armor

    for( set .@i,0; .@i < getarraysize( .EquipID ); set .@i,.@i + 1 )

    set .@EquipMenu$,.@EquipMenu$ + getitemname( .EquipID[.@i] )+( !getitemslots(.EquipID[.@i])?"":"["+getitemslots(.EquipID[.@i])+"]" )+":";

    set .@Equip,select( .@EquipMenu$ ) - 1;

    if( !countitem( .EquipID[.@Equip] ) ){

    mes "You didnt have this Equipment with you.";

    close;

    }

    mes "Equipment : ^FF0000"+getitemname( .EquipID[.@Equip] )+"^000000";

    switch( select( "Strength:Intelligent:Dexterity:Agility:Vitality:Luck" )){

    Case 1: setarray .RuneID[0],4702; break;

    Case 2: setarray .RuneID[0],4712; break;

    Case 3: setarray .RuneID[0],4722; break;

    Case 4: setarray .RuneID[0],4732; break;

    Case 5: setarray .RuneID[0],4742; break;

    Case 6: setarray .RuneID[0],4752; break;

    }

    for( set .@i,0; .@i < getarraysize( .RuneID ); set .@i,.@i + 1 )

    set .@RuneMenu$,.@RuneMenu$ + getitemname( .RuneID[.@i] )+":";

    set .@Rune,select( .@RuneMenu$ ) - 1;

    mes "Rune : ^FF0000"+getitemname( .RuneID[.@Rune] )+"^000000";

    next;

    if( select("Confirm:Cancel") == 1 ){

    if( !countitem( .RuneID[.@Rune] ) ){

    mes "Sorry you didnt have the "+getitemname( .RuneID[.@Rune] )+" with you.";

    }else{

    delitem .EquipID[.@Equip],1;

    delitem .RuneID[.@Rune],1;

    getitem2 .EquipID[.@Equip],1,1,0,0,0,0,0,.RuneID[.@Rune];

    mes "Done.";

    mes "^0000FF"+getitemname( .EquipID[.@Equip] )+"^000000";

    mes "Enchanted with ^FF0000"+getitemname( .RuneID[.@Rune] )+"^000000";

    }

    }

    close;

    }

  7. Насчёт скрипта нужно попробовать, только вот насчёт вызова функции будит проблематично...

    А если просто поменять у самой вещи, принцып её втыкания с 1 слота на 4 не прокатит?

    Вопрос только вот где, и в каком коде отвечает за какой слот оно встаёт?

    в .../doc/item_db нет ничего схожего...

    и в


    // Structure of Database:
    // ID,AegisName,Name,Type,Buy,Sell,Weight,ATK,DEF,Range,Slots,Job,Upper,Gender,Loc,wLV,eLV,Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }


    4742,Vitality3,VIT+3,6,20,,10,,,,,,,,16,,,,,{ bonus bVit,3; },{},{}

  8. Господа всем добрый вечер, столкнулся я вот стакой проблемой.

    Вот это, при двойном клике, встаёт на первый слот.


    4742,Vitality3,VIT+3,6,20,,10,,,,,,,,16,,,,,{ bonus bVit,3; },{},{}

    image.jpg

    а нужно подправить чтобы оно вставало на 4тый слот, также как после Apprentice Craftsman.

    Как мне это сделать?

  9. Заменить это:


    Index: map/pc.h
    ===================================================================
    --- map/pc.h (revision 15268)
    +++ map/pc.h (working copy)
    @@ -84,6 +84,28 @@
    unsigned short pos;
    };

    +//Equip indexes constants. (eg: sd->equip_index[EQI_AMMO] returns the index
    +//where the arrows are equipped)
    +enum equip_index {
    + EQI_ACC_L = 0,
    + EQI_ACC_R,
    + EQI_SHOES,
    + EQI_GARMENT,
    + EQI_HEAD_LOW,
    + EQI_HEAD_MID,
    + EQI_HEAD_TOP,
    + EQI_ARMOR,
    + EQI_HAND_L,
    + EQI_HAND_R,
    + EQI_MAX_BONUS,
    + EQI_COSTUME_TOP,
    + EQI_COSTUME_MID,
    + EQI_COSTUME_LOW,
    + EQI_COSTUME_GARMENT,
    + EQI_AMMO,
    + EQI_MAX
    +};
    +
    struct map_session_data {
    struct block_list bl;
    struct unit_data ud;

    На это:


    Index: map/pc.h
    ===================================================================
    --- map/pc.h (revision 15268)
    +++ map/pc.h (working copy)
    @@ -84,6 +84,28 @@
    unsigned short pos;
    };

    +//Equip indexes constants. (eg: sd->equip_index[EQI_AMMO] returns the index
    +//where the arrows are equipped)
    +enum equip_index {
    + EQI_ACC_L = 0,
    + EQI_ACC_R,
    + EQI_SHOES,
    + EQI_GARMENT,
    + EQI_HEAD_LOW,
    + EQI_HEAD_MID,
    + EQI_HEAD_TOP,
    + EQI_ARMOR,
    + EQI_HAND_L,
    + EQI_HAND_R,
    + EQI_AMMO,
    + EQI_MAX_BONUS = 10,
    + EQI_COSTUME_TOP,
    + EQI_COSTUME_MID,
    + EQI_COSTUME_LOW,
    + EQI_COSTUME_GARMENT,
    + EQI_MAX
    +};
    +
    struct map_session_data {
    struct block_list bl;
    struct unit_data ud;

    Спасибо огромное Fox RM

    Как обычно дело всеголиш в пару строк оказалось...

  10. И кто это тут фейк????

    Мы два разных человека... FoxRM Думаю может это подтвердить так как он знает обоих... Ваша Мания Что тут куча фейков До добра не доведёт... Мне жаль что ваше Эго неможет признать Что другим людям нравится Лайкать других За правильные Слова... а по поводу бага...

    В рАтене етого бага нету.. он только в еА

    Да было уже куча разных людей, которые оказались одними лицом

    Не надо мне рассказывать про всякие прокси, я знаю

    А еще у данного мистера стоит ра и каким боком он углядел ошибку в еа - фиг пойми

    Уважаемый, я очень рад что вы следите за моим прогрессом! Но дабы было вам известно, я уже давно отказался от рА и давно пользуюсь еА! разьве вы забыли когда я просил вас скачать мне , Tomb для еА, от Sanasol?

    А вообще за год я успел опробывать 3 эмулятора, и в eAthena я нашёл золотую середину скажем так...

    image.jpg

    Поповоду "прокси" и прочей фигни ради репутации и постов, я подобной фигнёй не занимаюсь, мне вообще пофигу! Если мне нужно чтото, что я не могу скачать, я напишу человеку у кого репутация и посты уже есть!

    Поповоду ошибки в костюмах, она всё ещё актуальна, если у вас есть сомнения, скачайте заново афину, и установите костюмы, а затем сделайте арчера и попробуйте пострелять из лука!

  11. Уважаемый, то что у меня нету репы не означает что я не могу заполучить данный сорц и не протестировать его! А если ваще величество не может вынести сие факта что люди не достигшие репутации могут пользоваться скриптами и сорцами, и вас раздражает этот факт, и поэтому вы от не домогания или жестокой нехватки женского внимания (что видимо вам не дано от родясь!), выставляя всем минусы дабы заполнить это чувство своей гордостью, то ,просто сделайте одолжение всем, мирно идите на юг!

    Спасибо

    А в костюмах БАГ! проверьте и исправьте!

    Ну у тебя то точно доеб, раз с фейков себе плюсы кидаешь

    И кто это тут фейк????

    Мы два разных человека... FoxRM Думаю может это подтвердить так как он знает обоих... Ваша Мания Что тут куча фейков До добра не доведёт... Мне жаль что ваше Эго неможет признать Что другим людям нравится Лайкать других За правильные Слова... а по поводу бага...

    В рАтене етого бага нету.. он только в еА

    Уважаемый Fizik , я благодарен за вашу поддержку, но совет вам, не обращайте внимание на людей, которые не достойны вашего внимания.

    Поповоду бага в rAthena да бага нету. Rebel и Zephyrus постарались на славу.

    Я надеюсь всеми уважаемый Fox RM не пропустит эту проблему, и в скором времени устранить ее.

  12. в стандартном клиенте более 500 шапок, которые не выпадают.

    чем вас они не устраивают?

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

  13. Уважаемый, то что у меня нету репы не означает что я не могу заполучить данный сорц и не протестировать его! А если ваще величество не может вынести сие факта что люди не достигшие репутации могут пользоваться скриптами и сорцами, и вас раздражает этот факт, и поэтому вы от не домогания или жестокой нехватки женского внимания (что видимо вам не дано от родясь!), выставляя всем минусы дабы заполнить это чувство своей гордостью, то ,просто сделайте одолжение всем, мирно идите на юг!

    Спасибо

    А в костюмах БАГ! проверьте и исправьте!

    Ну у тебя то точно доеб, раз с фейков себе плюсы кидаешь

    Уважаемый для начала не "у тебя" а "у вас!" вы мне не дружок!

    А во вторых "Уважаемый" вас походу склероз мучает, раз во всех вы видите "фейки"

    лучше займитесь полезным делом и попробуйте решить проблему в костюмах, ежели трендеть безпонту на лево и на право!

  14. Господа , я нашёл баг в этих костюмах.

    Стрелы,пули, кунаи, шурикены и прочее ammunition, их не видит если они надеты...

    Сначала подумал что баг в моей афине, но нет, скачал свежую, всё работает, установил костюмы и тажа фигня.

    Уважаемый, у вас нет 20 репы

    Хватит набивать сообщения и репу такими тупыми сообщениями

    Спасибо

    Уважаемый, то что у меня нету репы не означает что я не могу заполучить данный сорц и не протестировать его! А если ваще величество не может вынести сие факта что люди не достигшие репутации могут пользоваться скриптами и сорцами, и вас раздражает этот факт, и поэтому вы от не домогания или жестокой нехватки женского внимания (что видимо вам не дано от родясь!), выставляя всем минусы дабы заполнить это чувство своей гордостью, то ,просто сделайте одолжение всем, мирно идите на юг!

    Спасибо

    А в костюмах БАГ! проверьте и исправьте!

    • Upvote 1
  15. Господа , я нашёл баг в этих костюмах.

    Стрелы,пули, кунаи, шурикены и прочее ammunition, их не видит если они надеты...

    Сначала подумал что баг в моей афине, но нет, скачал свежую, всё работает, установил костюмы и тажа фигня.

    • Upvote 1
    • Downvote 1
  16. Отсутствуют строки:


    int clif_setip(const char* ip)
    @@ -1016,6 +1149,7 @@
    clif_specialeffect(bl,423,AREA);
    else if(sd->state.size==1)
    clif_specialeffect(bl,421,AREA);
    + clif_sendauras((TBL_PC*)bl, AREA);
    }
    break;
    case BL_MOB:
    @@ -3388,6 +3522,7 @@
    clif_specialeffect_single(bl,423,sd->fd);
    else if(tsd->state.size==1)
    clif_specialeffect_single(bl,421,sd->fd);
    + clif_sendaurastoone(tsd, sd);
    }
    break;
    case BL_NPC:
    @@ -3413,6 +3548,37 @@
    }
    }

    Спасибо тебе огромное Fox RM ты как обычно выручаешь!

  17. А вчём может быть дело, я добавил весь сорс, команда работает, но ауры не показывает, к примеру @aura 620 должна быть синяя словно кусок из Water Escape Technique а через @effect 620 работает

    Также я пробовал через другой сорс @auraset но там такаяже фигня

    @auraset by: [TwiTerror]

    Updated by: Advi


    Index: src/common/mmo.h
    ===================================================================
    --- src/common/mmo.h (revision 14568)
    +++ src/common/mmo.h (working copy)
    @@ -316,6 +316,9 @@
    int mother;
    int child;

    + //Aura System
    + int aura;
    +
    unsigned int base_exp,job_exp;
    int zeny;

    Index: src/map/atcommand.c
    ===================================================================
    --- src/map/atcommand.c (revision 14568)
    +++ src/map/atcommand.c (working copy)
    @@ -8592,6 +8592,45 @@


    /*==========================================
    +* Original code by [TwiTerror]
    +* Redone by Advi
    +* @auraset (aura) (character)
    +*------------------------------------------
    +*/
    +int atcommand_auraset(
    +const int fd, struct map_session_data* sd,
    +const char* command, const char* message)
    +{
    +struct map_session_data *pl_sd = 0;
    +int type = 0;
    +
    +if (!message || !*message || sscanf(message, "%d %[^\n]", &type, atcmd_player_name) < 2) {
    +if (!message || !*message || sscanf(message, "%d", &type) < 1) {
    +clif_displaymessage(fd, "Please, enter at least an option (usage: @auraset <aura> <char>).");
    +return -1;
    +}
    +atcmd_player_name[0] = 0;
    +pl_sd = sd;
    +}
    +
    +if (pl_sd != sd){
    +if ((pl_sd = map_nick2sd(atcmd_player_name)) != NULL || ((pl_sd = map_id2sd(atoi(atcmd_player_name))) != NULL && pl_sd->state.active)) {
    +} else {
    +return -1;
    +}
    +}
    +
    +pl_sd->status.aura = type;
    +pc_setglobalreg(pl_sd,"USERAURA",type);
    +
    +pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, 3);
    +
    +clif_displaymessage(fd, "Aura set.");
    +
    +return 0;
    +}
    +
    +/*==========================================
    * atcommand_info[] structure definition
    *------------------------------------------*/

    @@ -8895,6 +8934,7 @@
    { "delitem", 60,60, atcommand_delitem },
    { "charcommands", 1,1, atcommand_commands },
    { "font", 1,1, atcommand_font },
    + { "auraset", 60,60, atcommand_auraset },
    };


    Index: src/map/clif.c
    ===================================================================
    --- src/map/clif.c (revision 14568)
    +++ src/map/clif.c (working copy)
    @@ -1134,6 +1134,7 @@
    case BL_PC:
    {
    TBL_PC *sd = ((TBL_PC*)bl);
    + clif_sendauras((TBL_PC*)bl, SELF); //Aura System
    if (sd->spiritball > 0)
    clif_spiritball(sd);
    if(sd->state.size==2) // tiny/big players [Valaris]
    @@ -4156,6 +4157,12 @@
    if(&sd->bl == bl)
    break;
    clif_getareachar_unit(sd,bl);
    + //Aura System
    + if (bl->type == BL_PC) {
    + struct map_session_data *tsd = (struct map_session_data *)bl;
    + clif_sendaurastoone(sd,tsd);
    + clif_sendaurastoone(tsd,sd);
    + }
    break;
    }
    return 0;
    @@ -14778,3 +14785,80 @@
    add_timer_func_list(clif_delayquit, "clif_delayquit");
    return 0;
    }
    +
    +/*==========================================
    + * Aura System
    + *------------------------------------------*/
    +
    +void clif_sendauras( struct map_session_data *sd, int target )
    +{
    +int effect1;
    +effect1 = sd->status.aura;
    +
    +if (sd->status.option & OPTION_HIDE)
    +return;
    +
    +if (effect1 > 0)
    +clif_specialeffect(&sd->bl, effect1, target);
    +}
    +
    +
    +/*==========================================
    + * Aura System
    + *------------------------------------------*/
    +void clif_sendaurastoone( struct map_session_data *sd, struct map_session_data *dsd )
    +{
    +int effect1;
    +effect1 = sd->status.aura;
    +
    +if (sd->status.option & OPTION_HIDE)
    +return;
    +
    +if (effect1 > 0)
    +clif_specialeffecttoone(&sd->bl, &dsd->bl, effect1);
    +}
    +
    +/*==========================================
    + * Aura System
    + *------------------------------------------*/
    +int clif_specialeffecttoone(struct block_list *bl, struct block_list *dst, int type) {
    +
    +struct map_session_data *sd = (struct map_session_data *)dst;
    +
    +WFIFOW(sd->fd,0) = 0x1f3;
    +WFIFOL(sd->fd,2) = bl->id;
    +WFIFOL(sd->fd,6) = type;
    +WFIFOSET(sd->fd, packet_len(0x1f3));
    +
    +return 0;
    +
    +}
    +
    +/*==========================================
    + * Aura System
    + *------------------------------------------*/
    +void clif_getareachar_char2(struct map_session_data* sd,struct block_list *bl)
    +{
    +map_foreachinarea(clif_insight2, bl->m, bl->x-AREA_SIZE, bl->y-AREA_SIZE, bl->x+AREA_SIZE, bl->y+AREA_SIZE, BL_PC, bl);
    +}
    +
    +/*==========================================
    + * Aura System
    + *------------------------------------------*/
    +int clif_insight2(struct block_list *bl,va_list ap)
    +{
    +struct block_list *tbl;
    +TBL_PC *sd, *tsd;
    +tbl=va_arg(ap,struct block_list*);
    +
    +if (bl == tbl) return 0;
    +
    +sd = BL_CAST(BL_PC, bl);
    +tsd = BL_CAST(BL_PC, tbl);
    +
    +if (sd && sd->fd)
    +{ //Tell sd that tbl walked into his view
    +clif_getareachar_unit(sd,tbl);
    +}
    +return 0;
    +}
    Index: src/map/clif.h
    ===================================================================
    --- src/map/clif.h (revision 14568)
    +++ src/map/clif.h (working copy)
    @@ -571,6 +571,13 @@
    void clif_PartyBookingDeleteNotify(struct map_session_data* sd, int index);
    void clif_PartyBookingInsertNotify(struct map_session_data* sd, struct party_booking_ad_info* pb_ad);

    +// Aura System
    +int clif_specialeffecttoone(struct block_list *bl, struct block_list *dst, int type);
    +void clif_sendauras( struct map_session_data *sd, int target );
    +void clif_sendaurastoone(struct map_session_data *sd, struct map_session_data *dsd);
    +void clif_getareachar_char2(struct map_session_data* sd,struct block_list *bl);
    +int clif_insight2(struct block_list *bl,va_list ap);
    +
    void clif_showdigit(struct map_session_data* sd, unsigned char type, int value);

    #endif /* _CLIF_H_ */
    Index: src/map/pc.c
    ===================================================================
    --- src/map/pc.c (revision 14568)
    +++ src/map/pc.c (working copy)
    @@ -1016,6 +1016,9 @@
    sd->change_level = pc_readglobalreg(sd,"jobchange_level");
    sd->die_counter = pc_readglobalreg(sd,"PC_DIE_COUNTER");

    + //Aura System
    + sd->status.aura = pc_readglobalreg(sd,"USERAURA");
    +
    // Cash shop
    sd->cashPoints = pc_readaccountreg(sd,"#CASHPOINTS");
    sd->kafraPoints = pc_readaccountreg(sd,"#KAFRAPOINTS");
    Index: src/map/pc.h
    ===================================================================
    --- src/map/pc.h (revision 14568)
    +++ src/map/pc.h (working copy)
    @@ -312,6 +312,9 @@
    int matk_rate;
    int critical_rate,hit_rate,flee_rate,flee2_rate,def_rate,def2_rate,mdef_rate,mdef2_rate;

    + //Aura System
    + int aura;
    +
    int itemid;
    short itemindex; //Used item's index in sd->inventory [Skotlex]

    Index: src/map/status.c
    ===================================================================
    --- src/map/status.c (revision 14568)
    +++ src/map/status.c (working copy)
    @@ -5507,6 +5507,14 @@
    }
    break;
    case SC_HIDING:
    +
    + //Aura System
    + if (sd && sd->status.aura > 0){
    + sd->status.aura *= -1;
    + clif_clearunit_area(&sd->bl, 4);
    + clif_getareachar_char2(sd, &sd->bl);
    + }
    +
    val2 = tick/1000;
    tick = 1000;
    val3 = 0; // unused, previously speed adjustment
    @@ -6778,6 +6786,13 @@
    break;

    case SC_HIDING:
    +
    + //Aura System
    + if (sd && sd->status.aura < 0){
    + sd->status.aura *= -1;
    + clif_sendauras(sd, AREA_WOS);
    + }
    +
    sc->option &= ~OPTION_HIDE;
    opt_flag|= 2|4; //Check for warp trigger + AoE trigger
    break;

    Источник: http://www.mediafire...t [14568].patch

    Отредактировал: Вообщем @auraset както само решилось, выставил ауру 620, перезашёл и появилась, что именно я сделал я так и не допёр, но знаю точно, что провёл процедуру установки патча через черепаху, также как и до этого =/

    c @aura не прокатило , проблема осталась...

  18. По ссылке есть для еа 15090


    Index: conf/battle/monster.conf
    ===================================================================
    --- conf/battle/monster.conf (revision 15090)
    +++ conf/battle/monster.conf (working copy)
    @@ -213,3 +213,7 @@

    // Should MVP slaves retain their target when summoned back to their master?
    mob_slave_keep_target: yes
    +
    +// Wheter or not to spawn the mvp tomb.
    +// See http://irowiki.org/wiki/MVP#Gravestone
    +mvp_tomb_enabled: yes
    \ No newline at end of file
    Index: conf/msg_athena.conf
    ===================================================================
    --- conf/msg_athena.conf (revision 15090)
    +++ conf/msg_athena.conf (working copy)
    @@ -535,5 +535,17 @@
    //...
    650: Unknown Job

    +// MvP Tomb
    +// Added here so it can be easily translated
    +656: Tomb
    +657: [ ^EE0000%s^000000 ]
    +658: Has met its demise
    +659: Time of death : ^EE0000%s^000000
    +660: Defeated by
    +661: [^EE0000%s^000000]
    +// Added features [malufett]
    +900: Time of respawn: ^EE0000%s^000000
    +901: Time left: %02i:%02i:%02i
    +
    //Custom translations
    import: conf/import/msg_conf.txt
    Index: src/map/battle.c
    ===================================================================
    --- src/map/battle.c (revision 15090)
    +++ src/map/battle.c (working copy)
    @@ -4023,6 +4023,7 @@
    { "bg_magic_attack_damage_rate", &battle_config.bg_magic_damage_rate, 60, 0, INT_MAX, },
    { "bg_misc_attack_damage_rate", &battle_config.bg_misc_damage_rate, 60, 0, INT_MAX, },
    { "bg_flee_penalty", &battle_config.bg_flee_penalty, 20, 0, INT_MAX, },
    + { "mvp_tomb_enabled", &battle_config.mvp_tomb_enabled, 1, 0, 1, },
    };


    Index: src/map/battle.h
    ===================================================================
    --- src/map/battle.h (revision 15090)
    +++ src/map/battle.h (working copy)
    @@ -497,6 +497,8 @@
    int bg_magic_damage_rate;
    int bg_misc_damage_rate;
    int bg_flee_penalty;
    +
    + int mvp_tomb_enabled;
    } battle_config;

    void do_init_battle(void);
    Index: src/map/map.h
    ===================================================================
    --- src/map/map.h (revision 15090)
    +++ src/map/map.h (working copy)
    @@ -199,7 +199,7 @@
    //For common mapforeach calls. Since pets cannot be affected, they aren't included here yet.
    #define BL_CHAR (BL_PC|BL_MOB|BL_HOM|BL_MER)

    -enum npc_subtype { WARP, SHOP, SCRIPT, CASHSHOP };
    +enum npc_subtype { WARP, SHOP, SCRIPT, CASHSHOP, TOMB };

    enum {
    RC_FORMLESS=0,
    Index: src/map/mob.c
    ===================================================================
    --- src/map/mob.c (revision 15090)
    +++ src/map/mob.c (working copy)
    @@ -33,6 +33,7 @@
    #include "atcommand.h"
    #include "date.h"
    #include "quest.h"
    +#include "chat.h"

    #include <stdio.h>
    #include <stdlib.h>
    @@ -115,6 +116,88 @@
    }

    /*==========================================
    + * MvP Tomb [GreenBox]
    + *------------------------------------------*/
    +void mvptomb_create(struct mob_data *md, char *killer, time_t time)
    +{
    + struct npc_data *nd;
    + const struct TimerData * timer_data = get_timer(md->spawn_timer);
    +
    + CREATE(nd, struct npc_data, 1);
    +
    + nd->bl.id = md->tomb_nid = npc_get_new_npc_id();
    +
    + nd->ud.dir = md->ud.dir;
    + nd->bl.m = md->bl.m;
    + nd->bl.x = md->bl.x;
    + nd->bl.y = md->bl.y;
    + nd->bl.type = BL_NPC;
    +
    + safestrncpy(nd->name, msg_txt(656), sizeof(nd->name));
    +
    + nd->class_ = 565;
    + nd->speed = 200;
    + nd->subtype = TOMB;
    +
    + nd->u.tomb.md = md;
    + nd->u.tomb.kill_time = time;
    + nd->u.tomb.spawn_time = nd->u.tomb.spawn_timer = (DIFF_TICK(timer_data->tick, gettick()) + 60);
    +
    + if (killer)
    + safestrncpy(nd->u.tomb.killer_name, killer, NAME_LENGTH);
    + else
    + nd->u.tomb.killer_name[0] = '\0';
    +
    + map_addnpc(nd->bl.m, nd);
    + map_addblock(&nd->bl);
    + status_set_viewdata(&nd->bl, nd->class_);
    + status_change_init(&nd->bl);
    + unit_dataset(&nd->bl);
    + clif_spawn(&nd->bl);
    +
    + add_timer(gettick()+1000, mob_tombtimer, nd->bl.id, 0);
    +}
    +
    +/**
    + MVP Tomb Added Features
    + -Show time left before respawning [malufett]
    +**/
    +int mob_tombtimer(int tid, unsigned int tick, int id, intptr_t data)
    +{
    + struct npc_data *nd = (struct npc_data *)map_id2bl(id);
    + int ms = nd->u.tomb.spawn_timer, hour=0, min=0, sec=0;
    +
    + if( nd && ms > 0)
    + {
    + char w1[256];
    +
    + hour = ms / 3600000;
    + min = ms % 3600000 / 60000;
    + sec = ms % 60000 / 1000;
    +
    + sprintf(w1, msg_txt(901), hour , min, sec);
    +
    + chat_deletenpcchat(nd);
    + chat_createnpcchat(nd, w1, 0, 0, 1, "", 0, 1, MAX_LEVEL);
    +
    + add_timer(gettick()+1000, mob_tombtimer, id, 0);
    + nd->u.tomb.spawn_timer -= 1000;
    + }else
    + chat_deletenpcchat(nd);
    +
    + return 0;
    +}
    +
    +void mvptomb_destroy(struct mob_data *md)
    +{
    + struct npc_data *nd = (struct npc_data *)map_id2bl(md->tomb_nid);
    + if (nd)
    + npc_unload(nd);
    +
    + md->tomb_nid = 0;
    +}
    +
    +/*==========================================
    * Founds up to N matches. Returns number of matches [Skotlex]
    *------------------------------------------*/
    int mobdb_searchname_array(struct mob_db** data, int size, const char *str)
    @@ -804,6 +887,13 @@
    if( md->spawn_timer != INVALID_TIMER )
    delete_timer(md->spawn_timer, mob_delayspawn);
    md->spawn_timer = add_timer(gettick()+spawntime, mob_delayspawn, md->bl.id, 0);
    +
    + // MvP tomb [GreenBox]
    + if (battle_config.mvp_tomb_enabled && md->spawn->state.boss){
    + struct map_session_data *mvp_sd = map_id2sd(md->target_id);
    + mvptomb_create(md, mvp_sd ? mvp_sd->status.name : NULL, time(NULL));
    + }
    +
    return 0;
    }

    @@ -890,6 +980,10 @@
    // Added for carts, falcons and pecos for cloned monsters. [Valaris]
    md->sc.option = md->db->option;

    + // MvP tomb [GreenBox]
    + if (md->tomb_nid)
    + mvptomb_destroy(md);
    +
    map_addblock(&md->bl);
    clif_spawn(&md->bl);
    skill_unit_move(&md->bl,tick,1);
    @@ -2446,6 +2540,9 @@
    if(!md->spawn) //Tell status_damage to remove it from memory.
    return 5; // Note: Actually, it's 4. Oh well...

    + if (battle_config.mvp_tomb_enabled && md->spawn->state.boss)
    + md->target_id = mvp_sd->bl.id;
    +
    if( !rebirth )
    mob_setdelayspawn(md); //Set respawning.
    return 3; //Remove from map.
    @@ -4334,6 +4431,8 @@
    add_timer_interval(gettick()+MIN_MOBTHINKTIME,mob_ai_hard,0,0,MIN_MOBTHINKTIME);
    add_timer_interval(gettick()+MIN_MOBTHINKTIME*10,mob_ai_lazy,0,0,MIN_MOBTHINKTIME*10);

    + add_timer_func_list(mob_tombtimer,"mob_tombtimer");// [malufett]
    +
    return 0;
    }

    @@ -4367,4 +4466,4 @@
    ers_destroy(item_drop_ers);
    ers_destroy(item_drop_list_ers);
    return 0;
    -}
    +}
    \ No newline at end of file
    Index: src/map/mob.h
    ===================================================================
    --- src/map/mob.h (revision 15090)
    +++ src/map/mob.h (working copy)
    @@ -161,6 +161,8 @@
    short skillidx;
    unsigned int skilldelay[MAX_MOBSKILL];
    char npc_event[EVENT_NAME_LENGTH];
    +
    + int tomb_nid;
    };


    @@ -277,6 +279,11 @@
    int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char *event, int master_id, int mode, int flag, unsigned int duration);
    int mob_clone_delete(struct mob_data *md);

    +// MvP Tomb System
    +void mvptomb_create(struct mob_data *md, char *killer, time_t time);
    +void mvptomb_destroy(struct mob_data *md);
    +int mob_tombtimer(int tid, unsigned int tick, int id, intptr_t data);
    +
    void mob_reload(void);

    #endif /* _MOB_H_ */
    Index: src/map/npc.c
    ===================================================================
    --- src/map/npc.c (revision 15090)
    +++ src/map/npc.c (working copy)
    @@ -27,6 +27,7 @@
    #include "unit.h"
    #include "npc.h"
    #include "chat.h"
    +#include "atcommand.h"

    #include <stdio.h>
    #include <stdlib.h>
    @@ -1087,6 +1088,8 @@
    case SCRIPT:
    run_script(nd->u.scr.script,0,sd->bl.id,nd->bl.id);
    break;
    + case TOMB:
    + run_tomb(sd,nd);
    }

    return 0;
    @@ -2634,6 +2637,48 @@
    clif_spawn(&nd->bl);// fade in
    }

    +// MvP tomb [GreenBox]
    +void run_tomb(struct map_session_data* sd, struct npc_data* nd)
    +{
    + char buffer[200];
    + char time[10];
    + struct tm *newtime = localtime(&nd->u.tomb.kill_time);
    +
    + strftime(time, sizeof(time), "%H:%M", newtime);
    +
    + // TODO: Find exact color?
    + snprintf(buffer, sizeof(buffer), msg_txt(657), nd->u.tomb.md->db->name);
    + clif_scriptmes(sd, nd->bl.id, buffer);
    +
    + clif_scriptmes(sd, nd->bl.id, msg_txt(658));
    +
    + snprintf(buffer, sizeof(buffer), msg_txt(659), time);
    + clif_scriptmes(sd, nd->bl.id, buffer);
    +
    + /** MVP Tomb added features
    + -Show time of respawn [malufett]
    + **/
    + if(nd->u.tomb.spawn_time != INVALID_TIMER){
    + int ms = nd->u.tomb.spawn_time;
    + newtime->tm_hour += ms % 86400000 / 3600000;
    + newtime->tm_min += ms % 3600000 / 60000 + 1;
    + if(newtime->tm_min>59){
    + newtime->tm_hour++;
    + newtime->tm_min -= 60;
    + }
    + strftime(time, sizeof(time), "%H:%M", newtime);
    + snprintf(buffer, sizeof(buffer), msg_txt(900), time);
    + clif_scriptmes(sd, nd->bl.id, buffer);
    + }
    +
    + clif_scriptmes(sd, nd->bl.id, msg_txt(660));
    +
    + snprintf(buffer, sizeof(buffer), msg_txt(661), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : "Unknown");
    + clif_scriptmes(sd, nd->bl.id, buffer);
    +
    + clif_scriptclose(sd, nd->bl.id);
    +}
    +
    /// Parses a function.
    /// function%TAB%script%TAB%<function name>%TAB%{<code>}
    static const char* npc_parse_function(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
    Index: src/map/npc.h
    ===================================================================
    --- src/map/npc.h (revision 15090)
    +++ src/map/npc.h (working copy)
    @@ -62,6 +62,13 @@
    short x,y; // destination coords
    unsigned short mapindex; // destination map
    } warp;
    + struct {
    + struct mob_data *md;
    + time_t kill_time;
    + char killer_name[NAME_LENGTH];
    + int spawn_time; //malufett
    + int spawn_timer;
    + } tomb;
    } u;
    };

    @@ -155,6 +162,8 @@
    int npc_duplicate4instance(struct npc_data *snd, int m);
    int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int points);

    +void run_tomb(struct map_session_data* sd, struct npc_data* nd);
    +
    extern struct npc_data* fake_nd;

    #endif /* _NPC_H_ */
    Index: src/map/unit.c
    ===================================================================
    --- src/map/unit.c (revision 15090)
    +++ src/map/unit.c (working copy)
    @@ -2215,6 +2215,9 @@
    }
    if( mob_is_clone(md->class_) )
    mob_clone_delete(md);
    + if( md->tomb_nid )
    + mvptomb_destroy(md);
    +
    break;
    }
    case BL_HOM:

    Спасибо

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