Jump to content

Angelmelody

Members
  • Content Count

    772
  • Joined

  • Last visited

  • Days Won

    23

Everything posted by Angelmelody

  1. That works perfectly,thanks a bunch, Can I also use this method to combine ROCred with my client.exe ?
  2. It's no matter but just like users aren't good at korean and tranlate it to his native language will become more friendly
  3. 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....
  4. 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.
  5. 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);
  6. unlit.c missing the left " sprintf(e_msg, "Cooling down walk delay. Wait %.1f minutes.", (double)e_tick / 60);
  7. you should follow its installation guide [*]Modify "script_athena.conf" setting this values to the check_* parameters. [*]check_cmdcount: 655360 [*]check_gotocount: 655360
  8. you can reference to this topic http://herc.ws/board/topic/8160-storage-block-on-a-map/
  9. thanks to devs https://github.com/HerculesWS/Hercules/commit/16157a6173bf116026d6d3be11c7f9e1a35e8b9a
  10. 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...
  11. try this http://herc.ws/board/topic/7552-pk-area-error-while-compiling/
  12. 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;}
  13. 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};
  14. 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); }
  15. Angelmelody

    IND please!

    Haha.. the Santa Claus of Hercules get Lost ,so there are no christmas gifts this year
  16. http://herc.ws/board/topic/7032-npc-event-players-event-queue-is-full/?p=42732
  17. 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;
  18. 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$ = ""; }
  19. Server won't load @afk vendors but @at vendors when your server restart/crash ,so it would be better to support @at vendor
  20. 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;}
  21. 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);
  22. 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;
  23. 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.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.