Angelmelody
Members-
Content Count
772 -
Joined
-
Last visited
-
Days Won
23
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by Angelmelody
-
RO Credentials (ROCred), v1.10.0 - last updated 2017/12/31
Angelmelody replied to Ai4rei's topic in Client-Side Releases
That works perfectly,thanks a bunch, Can I also use this method to combine ROCred with my client.exe ? -
RO Credentials (ROCred), v1.10.0 - last updated 2017/12/31
Angelmelody replied to Ai4rei's topic in Client-Side Releases
How to embed config with ResourceHacker? -
It's no matter but just like users aren't good at korean and tranlate it to his native language will become more friendly
-
Hi~Dastgir,If you are free ,Would you mind to create a tool which can tranlate quest_db.confby refrencing to the client file 'questid2display.txt' since quest_db.conf has beenimplemented. You mean the name of quest??? yes ,the name of quest....
-
Hi~Dastgir, If you are free ,Would you mind to create a tool which can tranlate quest_db.conf by refrencing to the client file 'questid2display.txt' since quest_db.conf has been implemented.
-
you can try freeloop(1); while (.@Cnt) { set .@Cnt, query_sql("select mapname from bk6_maps limit " + .@Page + ",100",.@IgnoredMap$); for (set .@x,0; .@x < .@Cnt; set .@x,.@x + 1) { setd "$@_" + .@IgnoredMap$[.@x],1; } set .@Page, .@Page + 100; } freeloop(0);
-
unlit.c missing the left " sprintf(e_msg, "Cooling down walk delay. Wait %.1f minutes.", (double)e_tick / 60);
-
you should follow its installation guide [*]Modify "script_athena.conf" setting this values to the check_* parameters. [*]check_cmdcount: 655360 [*]check_gotocount: 655360
-
NoStorage and NoGuildStorage Mapflags
Angelmelody replied to Yoh Asakura's question in Source Requests
you can reference to this topic http://herc.ws/board/topic/8160-storage-block-on-a-map/ -
HPMHooking isn't working after last update
Angelmelody replied to Angelmelody's question in General Server Support
thanks to devs https://github.com/HerculesWS/Hercules/commit/16157a6173bf116026d6d3be11c7f9e1a35e8b9a -
Today, I updated my git to latest version and got this warning, all my hooks are disabled by this erro ...I have no idea how to fix it, can someone tell me how to fix it thanks .. [Error]: HPMDataCheck:HPMHooking: 'Channel_Config' was not found[Warning]: HPM:plugin_load: 'plugins/HPMHooking_map.dll' failed DataCheck, out of sync from the core (recompile plugin), skipping...
-
try this http://herc.ws/board/topic/7552-pk-area-error-while-compiling/
-
you can use bindatcmd command to override the existing command for example - script asdfjkl -1,{ end;OnInit: bindatcmd "storage", strnpcinfo(0)+"::OnAtcommand"; bindatcmd "guildstorage", strnpcinfo(0)+"::OnAtcommand"; bindatcmd "gstorage", strnpcinfo(0)+"::OnAtcommand"; end;OnAtcommand: if( strcharinfo(3) == "YOUR MAP") end; atcommand .@atcmd_command$; end;}
-
Here ! click me
-
script.c find script->config.ontouch2_name = "OnTouch"; //ontouch2_name (run whenever a char walks into the OnTouch area) script->config.onuntouch_name = "OnUnTouch"; //onuntouch_name (run whenever a char walks from the OnTouch area)++ script->config.damage_event_name = "OnPCDamage";script.h MF_AUTOTRADE, MF_ALLOWKS, MF_MONSTER_NOTELEPORT, MF_PVP_NOCALCRANK, //50 MF_BATTLEGROUND, MF_RESET, MF_NOTOMB,- MF_NOCASHSHOP+ MF_NOCASHSHOP,+ MF_RESIDENT};
-
I did converting by hand w/o testing, good luck! Index: atcommand.c===================================================================--- atcommand.c (revision 15066)+++ atcommand.c (working copy)@@ -4432,6 +4432,8 @@ strcat(atcmd_output, "PartyLock | "); if (map->list[m_id].flag.guildlock) strcat(atcmd_output, "GuildLock | ");+ if (map->list[m_id].flag.resident)+ strcat(atcmd_output, "Resident | "); clif->message(fd, atcmd_output); switch (list) {Index: battle.c===================================================================--- battle.c (revision 15066)+++ battle.c (working copy)@@ -1013,6 +1013,11 @@ sd = BL_CAST(BL_PC, src); tsd = BL_CAST(BL_PC, target); + if( sd && map->list[sd->bl.m].flag.resident && sd->state.resident && tsd && tsd->state.resident )+ {+ wd.damage = 1;+ return wd;+ } if(sd) wd.blewcount += battle->blewcount_bonus(sd, skill_num); @@ -3458,6 +3463,10 @@ struct map_session_data *sd = BL_CAST(BL_PC, s_bl); if( s_bl != t_bl ) {+ if(map->list[sd->bl.m].flag.resident &&+ ((sd->state.resident == 1 ) || (sd->state.resident == 2 && ((TBL_PC*)t_bl)->state.resident == 2))+ || (!sd->state.resident && ((TBL_PC*)t_bl)->state.resident) || (sd->state.resident && !((TBL_PC*)t_bl)->state.resident))+ return 0; if( sd->state.killer ) { state |= BCT_ENEMY; // Can kill anything@@ -3483,6 +3492,8 @@ if( !((map->agit_flag || agit2_flag) && map->list[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id ) return 0; // Disable guardians/emperium owned by Guilds on non-woe times. + if(((TBL_PC*)t_bl)->state.resident)+ return 0; if( !md->special_state.ai ) { //Normal mobs. if( t_bl->type == BL_MOB && !((TBL_MOB*)t_bl)->special_state.ai )Index: clif.c===================================================================--- clif.c (revision 15066)+++ clif.c (working copy)@@ -9150,6 +9150,12 @@ #ifndef TXT_ONLY mail->clear(sd); #endif+ status_calc_pc(sd, true);+ if(!map->list[sd->bl.m].flag.resident && sd->state.resident)+ {+ sd->state.resident = 0;+ pc->disguise(sd,0);+ } if(map->list[sd->bl.m].flag.loadevent) // Lance npc->script_event(sd, NPCE_LOADMAP);Index: map.h===================================================================--- map.h (revision 15066)+++ map.h (working copy)@@ -492,6 +492,8 @@ unsigned guildlock :1; unsigned src4instance : 1; // To flag this map when it's used as a src map for instances unsigned reset :1; // [Daegaladh]+ + unsigned resident :1; } flag; struct point save; struct npc_data *npc[MAX_NPC_PER_MAP];Index: npc.c===================================================================--- npc.c (revision 15066)+++ npc.c (working copy)@@ -3114,6 +3114,8 @@ map->list[m].flag.guildlock=state; else if (!strcmpi(w3,"reset")) map->list[m].flag.reset=state;+ else if(!strcmpi(w3,"resident"))+ map->list[m].flag.resident=state; else ShowError("npc->parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').n", w3, filepath, strlib->strline(buffer,start-buffer)); @@ -3300,6 +3302,7 @@ {"Die Event",script_config.die_event_name}, {"Kill PC Event",script_config.kill_pc_event_name}, {"Kill NPC Event",script_config.kill_mob_event_name},+ {"Damage Event",script->config.damage_event_name}, }; for (i = 0; i < NPCE_MAX; i++)Index: npc.h===================================================================--- npc.h (revision 15066)+++ npc.h (working copy)@@ -97,6 +97,7 @@ NPCE_DIE, NPCE_KILLPC, NPCE_KILLNPC,+ NPCE_DAMAGE, NPCE_MAX }; struct view_data* npc->get_viewdata(int class_);Index: pc.c===================================================================--- pc.c (revision 15066)+++ pc.c (working copy)@@ -5661,7 +5661,9 @@ pc->setstand(sd); skill->sit(sd,0); }-+ if(map->list[sd->bl.m].flag.resident && sd->state.resident == 1)+ {+ npc->script_event(sd,NPCE_DAMAGE);+ pc_stop_attack((TBL_PC*)src);+ }+ if( sd->progressbar.npc_id ) clif->progressbar_abort(sd); @@ -7120,6 +7122,9 @@ nullpo_ret(sd); + if(map->list[sd->bl.m].flag.resident)+ return 0;+ if( n < 0 || n >= MAX_INVENTORY ) { clif->equipitemack(sd,0,0,0); return 0;Index: pc.h===================================================================--- pc.h (revision 15066)+++ pc.h (working copy)@@ -137,6 +137,7 @@ unsigned short autolootid; // [Zephyrus] unsigned short autobonus; //flag to indicate if an autobonus is activated. [Inkfish] struct guild *gmaster_flag;+ unsigned int resident :2; } state; struct { unsigned char no_weapon_damage, no_magic_damage, no_misc_damage;Index: script.c===================================================================--- script.c (revision 15066)+++ script.c (working copy)@@ -232,6 +232,7 @@ "OnPCLoadMapEvent", //loadmap_event_name "OnPCBaseLvUpEvent", //baselvup_event_name "OnPCJobLvUpEvent", //joblvup_event_name+ "OnPCDamage", "OnTouch_", //ontouch_name (runs on first visible char to enter area, picks another char if the first char leaves) "OnTouch", //ontouch2_name (run whenever a char walks into the OnTouch area) };@@ -357,7 +358,8 @@ MF_MONSTER_NOTELEPORT, MF_PVP_NOCALCRANK, //50 MF_BATTLEGROUND,- MF_RESET+ MF_RESET,+ MF_RESIDENT }; const char* script->op2name(int op)@@ -14963,7 +14965,25 @@ return 0; } +BUILDIN(resident)+{+ struct map_session_data* sd;+ int resident;+ const char * name;+ + name = script_getstr(st,2);+ sd = map->nick2sd(name);+ + if(sd)+ {+ resident = script_getnum(st,3);+ sd->state.resident = (resident > 2?0:resident);+ pc->disguise(sd,sd->state.resident == 2?1865:0);+ }+ return true;+} + // declarations that were supposed to be exported from npc_chat.c #ifdef PCRE_SUPPORT BUILDIN(defpattern);@@ -14976,6 +14996,8 @@ /// for an explanation on args, see add_BUILDIN struct script_function BUILDIN[] = { // NPC interaction+ BUILDIN_DEF(resident,"si"),+ BUILDIN_DEF(mes,"s"), BUILDIN_DEF(next,""), BUILDIN_DEF(close,""),Index: script.h===================================================================--- script.h (revision 15066)+++ script.h (working copy)@@ -26,6 +26,7 @@ const char *loadmap_event_name; const char *baselvup_event_name; const char *joblvup_event_name;+ const char *damage_event_name; const char* ontouch_name; const char* ontouch2_name;Index: status.c===================================================================--- status.c (revision 15066)+++ status.c (working copy)@@ -3905,6 +3905,9 @@ speed = speed * 100 / sc->data[SC_WALKSPEED]->val1; } + if(sd && map->list[sd->bl.m].flag.resident)+ speed = 200;+ return (short)cap_value(speed,10,USHRT_MAX); }
-
Haha.. the Santa Claus of Hercules get Lost ,so there are no christmas gifts this year
-
http://herc.ws/board/topic/7032-npc-event-players-event-queue-is-full/?p=42732
-
try to add red line OnCampdead1: if(!playerattached()) end; mapannounce "que_qaru01",(Sex?"O":"A")+" Jogador"+(Sex?" ":"a ")+"["+strcharinfo(0)+"] derrotou o Guardião... O Cristal foi descoberto!",8; if($@PvPBC) pvpon "que_qaru01"; monster "que_qaru01",73,271,"Cristal",2801,1,"HiddenNpca::OnCampdead2"; end; OnCampdead2: if(!playerattached()) end; mapannounce "que_qaru01",(Sex?"O":"A")+" Jogador"+(Sex?" ":"a ")+"["+strcharinfo(0)+"] recuperou o Cristal do Guerreiro Arcanjo!",8; if($@PvPBC) pvpoff "que_qaru01"; set $@PremioOk,1; getitem 6027,1; end;
-
It did not work, I think the "+$@wed_groom$+" and "+$@wed_bride" are outdated try this..,find delitem 2613,1; //Diamond_Ring wedding_sign = 1; and add after setd( (Sex? "$groom$" : "$bride$"), strcharinfo(0)); if(!getmapxy(.@m$,.@x,.@y,0,(Sex ? $bride$: $groom$))) { announce "The Wedding of "+$groom$+" and "+$bride$+", will now be held at Prontera Church.", bc_all; $bride$ = $groom$ = ""; }
-
[Re-Release] Updated Extended Vending System
Angelmelody replied to iCORE's topic in Source Releases
Server won't load @afk vendors but @at vendors when your server restart/crash ,so it would be better to support @at vendor -
Critical Strike on Magic [Error] (Still not solve)
Angelmelody replied to karazu's question in Source Support
try this new skill_mcri_kill_delay int skill_mcri_kill_delay(int tid, int64 tick, int id, intptr_t data){ struct block_list *bl = map->id2bl(id); struct block_list *src = (struct block_list *)data; if(bl!=NULL) { if(bl->type == BL_MOB) { struct mob_data *md = BL_CAST(BL_MOB, bl); if(md) mob->dead(md,src,0); } status_kill(bl); } return 0;} -
Critical Strike on Magic [Error] (Still not solve)
Angelmelody replied to karazu's question in Source Support
find clif->damage(tmpd->src, tmpd->bl, timer->gettick(), 1, 1, id, 0, 10, 0); change to clif->damage(tmpd->src, tmpd->bl, 1, 1, id, 0, 10, 0); find status->change_start(bl, SC_BLADESTOP_WAIT, 10000, 1, 0, 0, 0, u_, 2); status->change_start(bl, SC_INVINCIBLE, 10000, 1, 0, 0, 0, u_, 2); chang to status->change_start(NULL, bl, SC_BLADESTOP_WAIT, 10000, 1, 0, 0, 0, u_, 2); status->change_start(NULL, bl, SC_INVINCIBLE, 10000, 1, 0, 0, 0, u_, 2); -
Critical Strike on Magic [Error] (Still not solve)
Angelmelody replied to karazu's question in Source Support
Index: src/map/mob.h===================================================================--- src/map/mob.h (revision 16936)+++ src/map/mob.h (working copy)@@ -123,6 +123,7 @@ struct block_list bl; struct unit_data ud; struct view_data *vd;+ struct tmp_data tmpd; struct status_data status, *base_status; //Second one is in case of leveling up mobs, or tiny/large mobs. struct status_change sc; struct mob->db *db; //For quick data access (saves doing mob->db(md->class_) all the time) [Skotlex]Index: src/map/pc.h===================================================================--- src/map/pc.h (revision 16936)+++ src/map/pc.h (working copy)@@ -91,6 +91,7 @@ struct block_list bl; struct unit_data ud; struct view_data vd;+ struct tmp_data tmpd; struct status_data base_status, battle_status; struct status_change sc; struct regen_data regen;Index: src/map/skill.c===================================================================--- src/map/skill.c (revision 16936)+++ src/map/skill.c (working copy)@@ -2110,7 +2110,38 @@ return 0; }-+int skill_mcri_hit(int tid, int64 tick, int id, intptr_t data)+{+ struct mob_data *md = (struct mob_data *)data;+ struct tmp_data *tmpd;+ tmpd = &md->tmpd;+ if(tmpd!=NULL)+ {+ switch(1) // 1 = red ; 2 = blue+ {+ case 1:+ clif->damage(tmpd->src, tmpd->bl, timer->gettick(), 1, 1, id, 0, 10, 0);+ break;+ case 2:+ clif->skill_damage(tmpd->src,tmpd->bl,timer->gettick(), 1, 1, id, 0, TK_STORMKICK, 1, 8);+ clif->skill_nodamage(tmpd->src,tmpd->src,tmpd->num[0],tmpd->num[1],1);+ break;+ }+ }+ return 0;+}+int skill_mcri_kill_delay(int tid, int64 tick, int id, intptr_t data)+{+ struct block_list *bl = map->id2bl(id);+ struct block_list *src = (struct block_list *)data;+ struct mob_data *md = BL_CAST(BL_MOB, bl);+ if(bl!=NULL)+ {+ mob->dead(md,src,0);+ status_kill(bl);+ }+ return 0;+} /* * ========================================================================= * Does a skill attack with the given properties.@@ -2449,6 +2480,48 @@ default: if( flag&SD_ANIMATION && dmg.div_ < 2 ) //Disabling skill animation doesn't works on multi-hit. type = 5;+ //m_cri+ if ( src->type == BL_PC || (battle->get_master(src))->type == BL_PC )+ {+ char m_cri = 0;+ if(sd==NULL)+ m_cri = cap_value(map->id2sd((battle->get_master(src))->id)->battle_status.cri/10,1,100);+ else+ m_cri = cap_value(sd->battle_status.cri/10,1,100);+ if( rand()%100 < m_cri )+ {+ struct mob_data *md=NULL;+ struct tmp_data *tmpd=NULL;+ int d_ = 200;+ unsigned int u_ = 0;+ int i=0, num=abs(skill->get_num(skill_id,skill_lv)), _damage=0;+ damage *= 2; + md = mob->once_spawn_sub(src, src->m, src->x, src->y, "--en--",1083,"", SZ_SMALL, AI_NONE);+ md->deletetimer=timer->add(tick+d_*num+1,mob->timer_delete,md->bl.id,0);+ status->set_viewdata(&md->bl, INVISIBLE_CLASS);+ tmpd = &md->tmpd; + if(skill->get_splash(skill_id,skill_lv)>1&&num>1)+ num = 1;+ _damage = damage/num;+ tmpd->src = src;+ tmpd->bl = bl;+ tmpd->num[0]=skill_id;+ tmpd->num[1]=skill_lv;+ u_ = tick+d_*num+1;+ if( tstatus->hp <= damage )//delay to kill it+ {+ damage = 1;+ status->change_start(bl, SC_BLADESTOP_WAIT, 10000, 1, 0, 0, 0, u_, 2);+ status->change_start(bl, SC_INVINCIBLE, 10000, 1, 0, 0, 0, u_, 2);+ timer->add(u_,skill_mcri_kill_delay,bl->id,(intptr_t)src);+ }+ clif->skill_nodamage(src,src,skill_id,skill_lv,1);+ for(i=0;i<num;i++)+ timer->add(tick+d_*i +1,skill_mcri_hit,_damage,(intptr_t)md);+ u_ = d_ = _damage = 0;+ break;+ }+ } if( bl->type == BL_SKILL ){ TBL_SKILL *su = (TBL_SKILL*)bl; if( su->group && skill->get_inf2(su->group->skill_id)&INF2_TRAP )// show damage on trap targetsIndex: src/map/skill.h===================================================================--- src/map/skill.h (revision 16936)+++ src/map/skill.h (working copy)@@ -21,7 +21,8 @@ #define MAX_SKILL_IMPROVISE_DB 50 #define MAX_SKILL_LEVEL 100-+int skill_mcri_hit(int tid, int64 tick, int _damage, intptr_t data);+int skill_mcri_kill_delay(int tid, int64 tick, int id, intptr_t data); //Constants to identify the skill's inf value: enum e_skill_inf {Index: src/map/unit.h===================================================================--- src/map/unit.h (revision 16936)+++ src/map/unit.h (working copy)@@ -13,7 +13,11 @@ #include "map.h" // struct block_list #include "path.h" // struct walkpath_data #include "skill.h" // struct skill->timerskill, struct skill_unit_group, struct skill_unit_group_tickset-+struct tmp_data {+ struct block_list *src;+ struct block_list *bl;+ int num[2];+}; struct unit_data { struct block_list *bl; struct walkpath_data walkpath; -
niflheim mapflag zone Towns niflheim mapflag zone NoAzoth my test results are the zone 'NoAzoth' will overwrite zone 'Towns' if the map zone order is like above. and restrictions of NoAzoth are applied to niflheim , but Towns not.