Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 05/11/23 in all areas

  1. View File Find Me! Minigame Adds command @findme for GMs to start the event. First player to touch the GM gets rewarded. Submitter munkrej Submitted 05/09/2023 Category Games, Events, Quests Video Content Author munkrej  
    1 point
  2. Try this, include quest to get cheaper price at this part // Prices set @price, 50; // Price to identify one item, BEFORE finishing quest set @price2, 0; // Price to identify one item, AFTER quest identification.txt
    1 point
  3. Thor patcher doesn't allow https I think.
    1 point
  4. In the last code I provided just change this: if(sd && (sd->sc.option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || sd->special_state.perfect_hiding)) return; to this: if(sd && (sd->sc.option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || sd->special_state.perfect_hiding || map_flag_gvg(sd->bl.m))) return; then the second one: if (sd->sc.option & (OPTION_HIDE | OPTION_CLOAK | OPTION_CHASEWALK) || sd->special_state.perfect_hiding) return 0; to this: if (sd->sc.option & (OPTION_HIDE | OPTION_CLOAK | OPTION_CHASEWALK) || sd->special_state.perfect_hiding || map_flag_gvg(sd->bl.m)) return 0;
    1 point
  5. Try this: /*========================================== * Sends HP bar to a single fd. [Skotlex] *------------------------------------------*/ void clif_hpmeter_single(int fd, int id, unsigned int hp, unsigned int maxhp) { struct map_session_data* sd = map_id2sd(id); if(sd && (sd->sc.option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || sd->special_state.perfect_hiding)) return; #if PACKETVER < 20100126 const int cmd = 0x106; #else const int cmd = 0x80e; #endif WFIFOHEAD(fd,packet_len(cmd)); WFIFOW(fd,0) = cmd; WFIFOL(fd,2) = id; #if PACKETVER < 20100126 if( maxhp > INT16_MAX ) {// To correctly display the %hp bar. [Skotlex] WFIFOW(fd,6) = hp/(maxhp/100); WFIFOW(fd,8) = 100; } else { WFIFOW(fd,6) = hp; WFIFOW(fd,8) = maxhp; } #else WFIFOL(fd,6) = hp; WFIFOL(fd,10) = maxhp; #endif WFIFOSET(fd, packet_len(cmd)); } Then find this: if( !tsd->fd || tsd == sd ) return 0; if (!pc_has_permission(tsd, PC_PERM_VIEW_HPMETER)) return 0; WFIFOHEAD(tsd->fd,packet_len(cmd)); Change it to this: if( !tsd->fd || tsd == sd ) return 0; if (!pc_has_permission(tsd, PC_PERM_VIEW_HPMETER)) return 0; if (sd->sc.option & (OPTION_HIDE | OPTION_CLOAK | OPTION_CHASEWALK) || sd->special_state.perfect_hiding) return 0; WFIFOHEAD(tsd->fd,packet_len(cmd));
    1 point
  6. Remove what ever code I sent before, and do this instead. in skill.cpp Find: int skill_greed(struct block_list *bl, va_list ap); static int skill_cell_overlap(struct block_list *bl, va_list ap); Change To: int skill_greed(struct block_list *bl, va_list ap); static int skill_web_remover(struct block_list *bl, va_list ap); static int skill_cell_overlap(struct block_list *bl, va_list ap); Find: // Execute on all targets standing on this cell if (range == 0 && active_flag) map_foreachincell(skill_unit_effect,unit->bl.m,unit->bl.x,unit->bl.y,group->bl_flag,&unit->bl,gettick(),1); Change To: if (skill_id == PF_SPIDERWEB) map_foreachinarea(skill_web_remover, src->m, x - 1, y - 1, x + 1, y + 1, BL_SKILL, src, unit); // Execute on all targets standing on this cell if (range == 0 && active_flag) map_foreachincell(skill_unit_effect,unit->bl.m,unit->bl.x,unit->bl.y,group->bl_flag,&unit->bl,gettick(),1); Find: /*========================================== * Check new skill unit cell when overlapping in other skill unit cell. * Catched skill in cell value pushed to *unit pointer. * Set (*alive) to 0 will ends 'new unit' check *------------------------------------------*/ static int skill_cell_overlap(struct block_list *bl, va_list ap) Change To: static int skill_web_remover(struct block_list* bl, va_list ap) { struct block_list* src; struct skill_unit* srcunit; struct skill_unit* unit; src = va_arg(ap, struct block_list*); srcunit = va_arg(ap, struct skill_unit*); unit = (struct skill_unit*)bl; if (unit == NULL || unit->group == NULL) return 0; if (unit->group->skill_id == PF_SPIDERWEB && unit->bl.id != srcunit->bl.id && unit->group->src_id == src->id) { //skill_delunitgroup(unit->group); // This one is instant Delete unit->limit = min(unit->limit,1000); // This one you can change "1000" to change the timing (lower number = faster deletion) unit->group->limit = unit->limit; return 1; } return 0; } /*========================================== * Check new skill unit cell when overlapping in other skill unit cell. * Catched skill in cell value pushed to *unit pointer. * Set (*alive) to 0 will ends 'new unit' check *------------------------------------------*/ static int skill_cell_overlap(struct block_list *bl, va_list ap) This line you can change depending on what you prefer. //skill_delunitgroup(unit->group); // This one is instant Delete unit->limit = min(unit->limit,1000); // This one you can change "1000" to change the timing (lower number = faster deletion) unit->group->limit = unit->limit; If you want to make web instantly vanish remove the "//" before the skill_delunitgroup then put "//" before unit->limit and unit->group->limit If you want to change the speed of when it disappears edit the "1000" to any number you want, it's in milliseconds. This however deletes nearby webs even if you don't have a target and will only delete your own web vlc-record-2023-05-10-17h19m40s-2023-05-10 17-17-32.mp4-.mp4
    1 point
  7. Version 1.0.0

    227 downloads

    Adds command @findme for GMs to start the event. First player to touch the GM gets rewarded.
    Free
    1 point
  8. This is a barter shop, not a normal shop. You should have a more readable format below with "barter_clear" and "barter_add", though those are custom functions (found here if interested). rAthena went with a yaml approach for these types of shops, so you'll have to convert those yourself. You can find an example in npc/re/merchants/barters/refine.yml. The tool can't produce a yaml output because it would need to convert item IDs to aegis names, and that's just a nightmare nobody wants to spend time on.
    1 point
  9. in src\map\script_constants.hpp Find: export_constant(MF_NODYNAMICNPC); Change To: export_constant(MF_NODYNAMICNPC); export_constant(MF_VIEW_HPMETER); in src\map\map.hpp Find: MF_NODYNAMICNPC, MF_MAX Change To: MF_NODYNAMICNPC, MF_VIEW_HPMETER, MF_MAX in src\map\npc.cpp Find: switch( mapflag ){ case MF_INVALID: Change To: switch( mapflag ){ case MF_VIEW_HPMETER: if (state) { union u_mapflag_args args = {}; if (sscanf(w4, "%11d", &args.flag_val) < 1) args.flag_val = 0; // No level specified, allow everyone. map_setmapflag_sub(m, MF_VIEW_HPMETER, true, &args); } else map_setmapflag(m, MF_VIEW_HPMETER, false); break; case MF_INVALID: in src\map\map.cpp Find: case MF_NOCOMMAND: if (status) { nullpo_retr(false, args); mapdata->flag[mapflag] = ((args->flag_val <= 0) ? 100 : args->flag_val); } else mapdata->flag[mapflag] = false; break; Change To: case MF_NOCOMMAND: case MF_VIEW_HPMETER: if (status) { nullpo_retr(false, args); mapdata->flag[mapflag] = ((args->flag_val <= 0 && mapflag != MF_VIEW_HPMETER) ? 100 : args->flag_val); } else mapdata->flag[mapflag] = false; break; Find: // additional mapflag data mapdata->zone = 0; // restricted mapflag zone mapdata->flag[MF_NOCOMMAND] = false; // nocommand mapflag level Change To: // additional mapflag data mapdata->zone = 0; // restricted mapflag zone mapdata->flag[MF_NOCOMMAND] = false; // nocommand mapflag level mapdata->flag[MF_VIEW_HPMETER] = 99; // viewhpmeter mapflag level (Blocks everyone except Admin by default) in src\map\atcommand.cpp Find: if (map_getmapflag(m_id, MF_NOCOSTUME)) strcat(atcmd_output, " NoCostume |"); clif_displaymessage(fd, atcmd_output); Change To: if (map_getmapflag(m_id, MF_NOCOSTUME)) strcat(atcmd_output, " NoCostume |"); if (map_getmapflag(m_id, MF_VIEW_HPMETER)) strcat(atcmd_output, " ViewHPMeter |"); clif_displaymessage(fd, atcmd_output); in src\map\pc.cpp Find: /*========================================== * pc Init/Terminate *------------------------------------------*/ void do_final_pc(void) { Change To: bool pc_can_view_hpmeter(struct map_session_data *sd){ if(!sd) return false; if(pc_has_permission(sd,PC_PERM_VIEW_HPMETER) && pc_get_group_level(sd) >= map_getmapflag(sd->bl.m, MF_VIEW_HPMETER)) return true; return false; } /*========================================== * pc Init/Terminate *------------------------------------------*/ void do_final_pc(void) { in src\map\pc.hpp Find: #endif /* PC_HPP */ Change To: bool pc_can_view_hpmeter(struct map_session_data *sd); #endif /* PC_HPP */ in src\map\clif.cpp Find: if( pc_has_permission( tsd, PC_PERM_VIEW_HPMETER ) ){ clif_hpmeter_single( *tsd, sd->status.account_id, sd->battle_status.hp, sd->battle_status.max_hp ); } Change to: if( pc_can_view_hpmeter( tsd ) ){ clif_hpmeter_single( *tsd, sd->status.account_id, sd->battle_status.hp, sd->battle_status.max_hp ); } Find: if( (sd->status.party_id && dstsd->status.party_id == sd->status.party_id) || //Party-mate, or hpdisp setting. (sd->bg_id && sd->bg_id == dstsd->bg_id) || //BattleGround pc_has_permission(sd, PC_PERM_VIEW_HPMETER) ) Change To: if( (sd->status.party_id && dstsd->status.party_id == sd->status.party_id) || //Party-mate, or hpdisp setting. (sd->bg_id && sd->bg_id == dstsd->bg_id) || //BattleGround pc_can_view_hpmeter(sd) ) Find: if( pc_has_permission(sd,PC_PERM_VIEW_HPMETER) ) { mapdata->hpmeter_visible++; sd->state.hpmeter_visible = 1; } Change To: if( pc_can_view_hpmeter(sd) ) { mapdata->hpmeter_visible++; sd->state.hpmeter_visible = 1; } Usage: <mapname><tab>mapflag<tab>view_hpmeter<tab><group_level> This should set a map with the mapflag to enable view_hpmeter that players with higher or equal to the specified group_level can bypass. To block everyone set the group_level to 100. ***Note: You still need to add "view_hpmeter: true" to the group permissions on the groups.yml file.***
    1 point
  10. The 'SubType' (or viewid) 1100 for weapon doesn't exist. Replace the item type 5 (weapon) by type 4 (armor). 30001,Akatsuki_Hat,Akatsuki_Hat,4,10000...
    1 point
×
×
  • Create New...