Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/08/24 in all areas

  1. The condition for a status change is in status_get_sc_def: if (skill != nullptr && skill->skill_type == BF_MAGIC && // Basic magic skill !skill->inf2[INF2_IGNOREGTB] && // Specific skill to bypass ((skill->inf == INF_ATTACK_SKILL || skill->inf == INF_GROUND_SKILL || skill->inf == INF_SUPPORT_SKILL) || // Target skills should get blocked even when cast on self (skill->inf == INF_SELF_SKILL && src != bl))) // Self skills should get blocked on all targets except self return 0; If you really changed the skill used to "misc" then the status should never be blocked by GTB. Even easier would be to just use the "IgnoreGTB" flag. If it still doesn't work, then maybe it's already blocked in skill.cpp by something. Easiest is to just debug it. Put a breakpoint on the line I quoted above (first line) and see if it even reaches that code when you use the scroll.
    1 point
  2. Updated: iRO 2024 OngoingQuestInfoList.lub Also Rachel and Veins board NPCs: rachel,87,73,0 script Bounty Board 80-100#rac1 2_BULLETIN_BOARD,{ callfunc "F_Bounty_Board", 80, 100, 20, 2, 1030, 63516, 697125, 697125, // ANACONDAQ 1782, 63517, 697125, 697125, // ROWEEN 1776, 63518, 697125, 697125; // SIROMA end; OnInit: questinfo(QTYPE_QUEST, QMARK_NONE, "BaseLevel >= 80 && BaseLevel <= 100"); end; } rachel,89,73,0 script Bounty Board 100-120#rac2 2_BULLETIN_BOARD,{ callfunc "F_Bounty_Board", 100, 120, 20, 2, 1106, 63519, 270000, 202500, // DESERT_WOLF 1781, 63520, 202500, 151950, // DROSERA 1629, 63521, 285000, 213750, // HILL_WIND 1777, 63522, 408600, 396600, // ICE_TITAN 1775, 63523, 408600, 396600; // SNOWIER end; OnInit: questinfo(QTYPE_QUEST, QMARK_NONE, "BaseLevel >= 100 && BaseLevel <= 120"); end; } rachel,91,73,0 script Bounty Board 120-140#rac3 2_BULLETIN_BOARD,{ callfunc "F_Bounty_Board", 120, 140, 20, 2, 1769, 63524, 589950, 442350, // AGAV 1770, 63525, 553500, 415200, // ECHIO 1773, 63526, 563700, 422700, // HODREMLIN 1772, 63527, 518400, 388800, // ISILLA 1774, 63528, 601200, 450900, // SEEKER 1771, 63529, 486000, 364500; // VANBERK end; OnInit: questinfo(QTYPE_QUEST, QMARK_NONE, "BaseLevel >= 120 && BaseLevel <= 140"); end; } veins,226,154,0 script Bounty Board 80-100#vei1 2_BULLETIN_BOARD,{ callfunc "F_Bounty_Board", 80, 100, 20, 2, 1784, 63530, 380400, 285450; // STAPO end; OnInit: questinfo(QTYPE_QUEST, QMARK_NONE, "BaseLevel >= 80 && BaseLevel <= 100"); end; } veins,224,154,0 script Bounty Board 100-120#vei2 2_BULLETIN_BOARD,{ callfunc "F_Bounty_Board", 100, 120, 20, 2, 1781, 63531, 270000, 202500, // DROSERA 1783, 63532, 265350, 199050, // GALION 1836, 63533, 380400, 285450, // MAGMARING 1780, 63534, 291600, 218700; // MUSCIPULAR end; OnInit: questinfo(QTYPE_QUEST, QMARK_NONE, "BaseLevel >= 100 && BaseLevel <= 120"); end; } veins,222,154,0 script Bounty Board 120-140#vei3 2_BULLETIN_BOARD,{ callfunc "F_Bounty_Board", 120, 140, 20, 2, 1833, 63535, 839700, 1156200, // KASA 1838, 63536, 553500, 565200, // KNOCKER 1831, 63539, 887700, 1070700, // SALAMANDER 1870, 63537, 837000, 627600, // NECROMANCER 1865, 63538, 527100, 462900, // RAGGED_ZOMBIE 1864, 63540, 590700, 405300; // ZOMBIE_SLAUGHTER end; OnInit: questinfo(QTYPE_QUEST, QMARK_NONE, "BaseLevel >= 120 && BaseLevel <= 140"); end; } And \db\import\quest_db.yml # iRO Bounty Board Rachel and Veins - Id: 63516 Title: Bounty Board Hunt Targets: - Mob: ANACONDAQ Count: 150 - Id: 63517 Title: Bounty Board Hunt Targets: - Mob: ROWEEN Count: 150 - Id: 63518 Title: Bounty Board Hunt Targets: - Mob: SIROMA Count: 150 - Id: 63519 Title: Bounty Board Hunt Targets: - Mob: DESERT_WOLF Count: 150 - Id: 63520 Title: Bounty Board Hunt Targets: - Mob: DROSERA Count: 150 - Id: 63521 Title: Bounty Board Hunt Targets: - Mob: HILL_WIND Count: 150 - Id: 63522 Title: Bounty Board Hunt Targets: - Mob: ICE_TITAN Count: 150 - Id: 63523 Title: Bounty Board Hunt Targets: - Mob: SNOWIER Count: 150 - Id: 63524 Title: Bounty Board Hunt Targets: - Mob: AGAV Count: 150 - Id: 63525 Title: Bounty Board Hunt Targets: - Mob: ECHIO Count: 150 - Id: 63526 Title: Bounty Board Hunt Targets: - Mob: HODREMLIN Count: 150 - Id: 63527 Title: Bounty Board Hunt Targets: - Mob: ISILLA Count: 150 - Id: 63528 Title: Bounty Board Hunt Targets: - Mob: SEEKER Count: 150 - Id: 63529 Title: Bounty Board Hunt Targets: - Mob: VANBERK Count: 150 - Id: 63530 Title: Bounty Board Hunt Targets: - Mob: STAPO Count: 150 - Id: 63531 Title: Bounty Board Hunt Targets: - Mob: DROSERA Count: 150 - Id: 63532 Title: Bounty Board Hunt Targets: - Mob: GALION Count: 150 - Id: 63533 Title: Bounty Board Hunt Targets: - Mob: MAGMARING Count: 150 - Id: 63534 Title: Bounty Board Hunt Targets: - Mob: MUSCIPULAR Count: 150 - Id: 63535 Title: Bounty Board Hunt Targets: - Mob: KASA Count: 150 - Id: 63536 Title: Bounty Board Hunt Targets: - Mob: KNOCKER Count: 150 - Id: 63537 Title: Bounty Board Hunt Targets: - Mob: NECROMANCER Count: 150 - Id: 63538 Title: Bounty Board Hunt Targets: - Mob: RAGGED_ZOMBIE Count: 150 - Id: 63539 Title: Bounty Board Hunt Targets: - Mob: SALAMANDER Count: 150 - Id: 63540 Title: Bounty Board Hunt Targets: - Mob: ZOMBIE_SLAUGHTER Count: 150
    1 point
  3. 1. rathena/src/map/script.hpp Search: HAT_EF_MAX Replace: /* Custom Hateffects */ HAT_EF_arcane_aura_A, HAT_EF_arcane_aura_B, HAT_EF_gluttony_aura_A, HAT_EF_gluttony_aura_B, HAT_EF_MAX = 9999 2. rathena/src/map/script_constants.hpp Search: export_constant(HAT_EF_EFST_C_20TH_ANNIVERSARY_HAT); Replace: export_constant(HAT_EF_EFST_C_20TH_ANNIVERSARY_HAT); /* Custom Hateffects */ export_constant(HAT_EF_arcane_aura_A); export_constant(HAT_EF_arcane_aura_B); export_constant(HAT_EF_gluttony_aura_A); export_constant(HAT_EF_gluttony_aura_B); 3. Compile you Server. 4. Copy in you Data/texture/effect/(arcane_aura) and (gluttony_aura) Data(Example_Auras).zip 5. Data/luafiles514/lua files/hateffectinfo/hateffectinfo.lub Search: HAT_EF_efst_C_20th_Anniversary_Hat = 176 } Replace: HAT_EF_efst_C_20th_Anniversary_Hat = 176, HAT_EF_arcane_aura_A = 177, HAT_EF_arcane_aura_B = 178, HAT_EF_gluttony_aura_A = 179, HAT_EF_gluttony_aura_B = 180 } resourceFileName: route effect(Data/effect/name you effect folder/name you str file.str) IsIgnoreRiding: if true when mounting a mount or asking for hateffect will not go up, it will ignore this action isRenderBeforeCharacter: If true when using hateffect it will be over the character. hatEffectPos: Position the Y anchor (up and down) of the hateffect hatEffectPosX: Positions hateffect X anchor (left right) isAdjustPositionWhenShrinkState: always true isAdjustSizeWhenShrinkState: always true Search: [HatEFID.HAT_EF_efst_C_20th_Anniversary_Hat] = { resourceFileName = "efst_C_20th_Anniversary_Hat\\20th_f.str", hatEffectPos = -6, hatEffectPosX = 0, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true } } Replace: [HatEFID.HAT_EF_efst_C_20th_Anniversary_Hat] = { resourceFileName = "efst_C_20th_Anniversary_Hat\\20th_f.str", hatEffectPos = -6, hatEffectPosX = 0, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_arcane_aura_A] = { resourceFileName = "arcane_aura\\arcane_aura_particle.str", hatEffectPos = -1, hatEffectPosX = 0, isRenderBeforeCharacter = false, isIgnoreRiding = false, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_arcane_aura_B] = { resourceFileName = "arcane_aura\\arcane_aura.str", hatEffectPos = -2, hatEffectPosX = 0.2, isRenderBeforeCharacter = true, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_gluttony_aura_A] = { resourceFileName = "gluttony_aura\\gluttony_aura_particle.str", hatEffectPos = -1, hatEffectPosX = 0, isRenderBeforeCharacter = false, isIgnoreRiding = false, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_gluttony_aura_B] = { resourceFileName = "gluttony_aura\\gluttony_aura.str", hatEffectPos = -2, hatEffectPosX = 0.2, isRenderBeforeCharacter = true, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true } } 6. Add Script NPC: rathena\npc\custom\hateffect.txt (Use command @efc in game) - script HATEFFECT -1,{ OnHatEffect: if(getgmlevel()>= 80){ input .@number; if (.@number < 1) end; if (.@number >= 301) end; for(.@i = 1; .@i < 300; ++.@i) hateffect .@i,false; hateffect .@number,true; end; } OnInit: bindatcmd "efc",strnpcinfo(3)+"::OnHatEffect"; end; } 7. Add npc in rathena\npc\scripts_custom.conf npc: npc/custom/hateffect.txt 8. (OPTIONAL) Add Hateffect in item: Example: - Id: 2301 AegisName: Cotton_Shirt Name: Cotton Shirt Type: Armor Buy: 10 Weight: 100 Defense: 1 Locations: Armor: true ArmorLevel: 1 Refineable: true Script: | hateffect HAT_EF_arcane_aura_A,true; hateffect HAT_EF_arcane_aura_B,true; UnEquipScript: | hateffect HAT_EF_arcane_aura_A,false; hateffect HAT_EF_arcane_aura_B,false; Update: My project all Auras. (09/27/2023) - Pack Auras: My Project All Auras Too my project Ragnarok Online Pre-Renewal(Offline) and guide for easy update. - Data Folder + Server: Google Drive or MediaFire - Client RO: Google Drive or MediaFire Guide for start server and Play: 0. Dowloand Client RO and Update. 1. Download Data Folder + Server 2. Copy all files C:/MyServer/Client (In folder Ragnarok Onmline). 3. Run C:/MyServer/UwAmp/UwAmp.exe 4. Start Server C:/MyServer/rathena/runserver.exe Enjoy!!! Gluttony Aura: Arcane Aura: Credits: LCDTheOG Fros
    1 point
  4. Hey Leute, als neuer deutscher und englischer Forum Moderator freue ich mich, den deutschen Bereich auch wieder etwas Regelkonformer zu gestalten. Bitte schreibt ausschließlich auf Deutsch in den Topics/ Posts und Titel. Ihr könnt noch die Englische Sprache hinzufügen, aber dafür gibt es die Englischen Sections. Ich würde mich interessieren, wer noch alles da ist, aus der kleinen deutschen Community. Schreibt doch gerne mal was. Und ich bin hier, um euch zu helfen Rynbef~
    1 point
  5. Heya! WFIFOHEAD(fd, slen); WFIFOW(fd,0)=0xb4; WFIFOW(fd,2)=slen; WFIFOL(fd,4)=npcid; memcpy((char*)WFIFOP(fd,8), mes, slen-8); WFIFOSET(fd,WFIFOW(fd,2)); Let's say you want to send the message "hello", slen being 5 + 9 = 14. First call is obvious, sets the length of the packet. WFIFOW means "Write a Word to the socket (a Word is 2 bytes - uint16) at position 0", giving you the following raw output so far : 0xb4 0x00 - ... It is reversed because of the endianness, which is "always" in little-endian. WFIFOW(fd,2), same as above, giving you (14 = 0x0E) : 0xb4 0x00 - 0x0E 0x00 - ... WFIFOL means "Write a Long to the socket (a Long is 4 bytes - uint32) at position 4", giving you the following raw output so far (let's say the npcid is 297520349 = 0x11BBCCDD) : 0xb4 0x00 - 0x0E 0x00 - 0xDD 0xCC 0xBB 0x11 - ... WFIFOP retrieves the char pointer for the writing socket buffer at the specified position. memcpy simply copies the content of mes ("hello") to that position. Giving you... 0xb4 0x00 - 0x0E 0x00 - 0xDD 0xCC 0xBB 0x11 - 0x48 0x65 0x6c 0x6c 0x6f 0x00 WFIFOSET sets the buffer to the correct position to send it (WFIFOW actually returns a pointer to the position, so in this case it's handy because it returns slen; then again it's a bit pointless, it could have just been "WFIFOSET(fd,slen);" and it would be clearer). /// 00b4 <packet len>.W <npc id>.L <message>.?B This means 0x00b4 is your packet id, followed by a Word (packet length), followed by a Long (npc id), followed by a variable number of bytes (your message). 0x00b4,-1 That means the size of the packet is unknown/variable (indeed, the message can be of any size). 0x00b5,6 That means the size of the packet is always 6 bytes. In this case, the first 2 bytes are the packet ID, the next 4 bytes are the npc id, or : 00b5 <npc id>.L The packet field can be used for something like... 0x00b5,6,clif_scriptnext,2; - this can help you retrieve the positions more easily. For example : packet_db[sd->packet_ver][RFIFOW(fd,0) /* packet id */].pos[0] // pos[0] here is the "2" you defined earlier. Some packet_ver defines different indexes for the same packet, that's why it's useful not to use pre-defined values. To write a new packet, you have the right idea. Find a packet not used, go in a high range to avoid further conflicts. Also there's a packet limit, not really sure where it's defined on rAthena though.
    1 point
×
×
  • Create New...