Jump to content

AnnieRuru

Members
  • Posts

    2044
  • Joined

  • Last visited

  • Days Won

    51

Everything posted by AnnieRuru

  1. hmm ? you can't read the code I posted ? mob_clone_spawn is the function to spawn a clone no tested with the script below, blessing and without blessing, the stat stays the same spawn by atcommand #evilclone, no spawn by script command, yes prontera,155,185,5 script sjdfkshf 1_F_MARIA,{ if ( .cloneid ) { getunitdata .cloneid, .@unitdata; mes "map -> "+ mapid2name(.@unitdata[UMOB_MAPID]); mes "X -> "+ .@unitdata[UMOB_X]; mes "Y -> "+ .@unitdata[UMOB_Y]; mes "str -> "+ .@unitdata[UMOB_STR]; mes "agi -> "+ .@unitdata[UMOB_AGI]; mes "vit -> "+ .@unitdata[UMOB_VIT]; mes "int -> "+ .@unitdata[UMOB_INT]; mes "dex -> "+ .@unitdata[UMOB_DEX]; mes "luk -> "+ .@unitdata[UMOB_LUK]; close; } getmapxy .@map$, .@x, .@y; .cloneid = clone( .@map$, .@x, .@y, strnpcinfo(0)+"::OnDead", getcharid(0) ); end; OnDead: .cloneid = 0; end; }
  2. latest version is 2.4c actually http://upaste.me/7c9c496344829d36f I remember the item require and item reward feature was done back eathena days in year 2010 when you submit a quest, OR accepting a quest, SCROLL DOWN the npc dialog to see them btw type this to show the mission progress, that's how I usually debug my script @mission EDIT: Holy Sh^t, I think Ima gonna spend another 3 days making a topic telling what this script can do and can't do
  3. of course I know, I mean com'on, this script only compatible with latest latest rathena, because before that commit, rathena couldn't even insert RID on the getmapxy btw I instantly recognized this is my script when I see npc name is kjdshfksfj and account_id as aaa, no other member do like this I wonder where you got this script from ... because you say things like "my script not working anymore" and " someone was help me to and working too"
  4. https://rathena.org/board/topic/116308-using-2018-05-30b-client-anyone-have-a-working-ai-for-homunc/ supposedly we can adjust it in the data/AI folder, but now it seems unable to do so int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, const char *event, int master_id, enum e_mode mode, int flag, unsigned int duration) { int mob_id; int i,j,inf, fd; struct mob_data *md; struct mob_skill *ms; struct mob_db* db; struct status_data *status; nullpo_ret(sd); if(pc_isdead(sd) && master_id && flag&1) return 0; ARR_FIND( MOB_CLONE_START, MOB_CLONE_END, mob_id, mob_db(mob_id) == NULL ); if(mob_id >= MOB_CLONE_END) return 0; try{ db = &mob_db_data[mob_id]; }catch( const std::bad_alloc& ){ ShowError( "mob_clone_spawn: Memory allocation for clone %hu failed.\n", mob_id ); return 0; } status = &db->status; strcpy(db->sprite,sd->status.name); strcpy(db->name,sd->status.name); strcpy(db->jname,sd->status.name); db->lv=status_get_lv(&sd->bl); memcpy(status, &sd->base_status, sizeof(struct status_data)); status->rhw.atk2= status->dex + status->rhw.atk + status->rhw.atk2; //Max ATK status->rhw.atk = status->dex; //Min ATK if (status->lhw.atk) { status->lhw.atk2= status->dex + status->lhw.atk + status->lhw.atk2; //Max ATK status->lhw.atk = status->dex; //Min ATK } if (mode) //User provided mode. status->mode = mode; else if (flag&1) //Friendly Character, remove looting. status->mode = static_cast<enum e_mode>(status->mode&(~MD_LOOTER)); status->hp = status->max_hp; status->sp = status->max_sp; memcpy(&db->vd, &sd->vd, sizeof(struct view_data)); db->base_exp=1; db->job_exp=1; db->range2=AREA_SIZE; //Let them have the same view-range as players. db->range3=AREA_SIZE; //Min chase of a screen. db->option=sd->sc.option; yes no by the way, Hercules #evilclone are smarter, rathena mess up the monster mode EDIT : Reminds me of someone coding that #autopilot ... if we can also code a homunculus/mercenary AI at the server side ... hmm...
  5. compile your server with disable all the renewal settings https://github.com/rathena/rathena/blob/master/src/config/renewal.hpp yeah, everyone miss that old Ragnarok and the Renewal is bullshit sucks
  6. LMAO !!! this script was made for over 4 years, and only today I found out it has a bug http://herc.ws/board/topic/11445-sameip-command-for-rathena/ .@nb = query_sql( "select name, char_id, account_id as aaa, ( select last_ip from login where account_id = aaa ) from `char` where online = 1", .@name$, .@aid, .@cid, .@ip$ ); look closely, name, char_id, account_id, === BUT .@name$, .@aid, .@cid up version 0.3 //===== Hercules Script ====================================== //= @sameip //===== By: ================================================== //= AnnieRuru //===== Current Version: ===================================== //= 0.3 //===== Compatible With: ===================================== //= Hercules 2019-02-01 //===== Description: ========================================= //= list all players with same ip address //===== Topic ================================================ //= https://rathena.org/board/topic/118137-error-buildin_getmapxy/ //===== Additional Comments: ================================= //= it always list all players online, unable to limit to a single map currently //============================================================ - script kjdshfksfj FAKE_NPC,{ OnInit: bindatcmd "sameip", strnpcinfo(0)+"::Onaaa"; end; Onaaa: freeloop true; .@nb = query_sql( "select name, char_id, account_id as aaa, ( select last_ip from login where account_id = aaa ) from `char` where online = 1", .@name$, .@cid, .@aid, .@ip$ ); for ( .@i = 0; .@i < .@nb; ++.@i ) { for ( .@j = 0; .@j < .@ip_list; ++.@j ) if ( .@b_ip$[.@j] == .@ip$[.@i] ) break; if ( .@j == .@ip_list ) { .@b_ip$[.@j] = .@ip$[.@i]; ++.@ip_list; } setd ".@b_ip"+ .@j +"_name$["+ .@b_ip_size[.@j] +"]", .@name$[.@i]; setd ".@b_ip"+ .@j +"_cid["+ .@b_ip_size[.@j] +"]", .@cid[.@i]; setd ".@b_ip"+ .@j +"_aid["+ .@b_ip_size[.@j] +"]", .@aid[.@i]; ++.@b_ip_size[.@j]; } dispbottom "===== SAME IP Searching ====="; for ( .@i = 0; .@i < .@ip_list; ++.@i ) { if ( .@b_ip_size[.@i] > 1 ) { dispbottom " == The IP ["+ .@b_ip$[.@i] +"] has "+ .@b_ip_size[.@i] +" players."; for ( .@j = 0; .@j < .@b_ip_size[.@i]; ++.@j ) { getmapxy .@map$, .@x, .@y, UNITTYPE_PC, getd( ".@b_ip"+ .@i +"_aid["+ .@j +"]"); dispbottom " = "+( .@j +1 )+". ("+ getd( ".@b_ip"+ .@i +"_cid["+ .@j +"]" ) +") "+ getd( ".@b_ip"+ .@i +"_name$["+ .@j +"]") +" -> "+ .@map$ +" "+ .@x +" "+ .@y; } ++.@result; } } dispbottom ">>> "+ .@result +" results found."; end; } EDIT: I think should write another version 0.4 since rathena has already upgrade the script engine quite some time ago the only optimization I can think of is using inarray script command, so nah
  7. no, it is not, how come you have so many unrelated commits ? https://github.com/HerculesWS/Hercules/compare/master...AnnieRuru:44-strmobinfo <- even this branch is outdated, but still only shows my commits it should have only your patch in it, but yours has so many commits by other people so for us to download your work, we just have to put .patch at the end https://github.com/HerculesWS/Hercules/compare/master...AnnieRuru:44-strmobinfo https://github.com/HerculesWS/Hercules/compare/master...AnnieRuru:44-strmobinfo.patch and obviously yours doesn't work I'll try to download your whole folder and compare file by file then, well, I'll do that when I have the time
  8. LMAO !! I love people think outside the box src/map/clif.cpp | 4 ++-- src/map/skill.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index e1cc9b555..fae1e15da 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -13398,11 +13398,11 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd){ if( sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOROOM ) return; - if( map_getmapflag(sd->bl.m, MF_NOVENDING) ) { + if( !map_getmapflag(sd->bl.m, MF_NOVENDING) ) { clif_displaymessage (sd->fd, msg_txt(sd,276)); // "You can't open a shop on this map" return; } - if( map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOVENDING) ) { + if( !map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOVENDING) ) { clif_displaymessage (sd->fd, msg_txt(sd,204)); // "You can't open a shop on this cell." return; } diff --git a/src/map/skill.cpp b/src/map/skill.cpp index e5cd8c61d..77ae11e5e 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -746,12 +746,12 @@ bool skill_isNotOk(uint16 skill_id, struct map_session_data *sd) break; case MC_VENDING: case ALL_BUYING_STORE: - if( map_getmapflag(sd->bl.m, MF_NOVENDING) ) { + if( !map_getmapflag(sd->bl.m, MF_NOVENDING) ) { clif_displaymessage (sd->fd, msg_txt(sd,276)); // "You can't open a shop on this map" clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); return true; } - if( map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOVENDING) ) { + if( !map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOVENDING) ) { clif_displaymessage (sd->fd, msg_txt(sd,204)); // "You can't open a shop on this cell." clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); return true; - script fdsdf FAKE_NPC,{ OnInit: setmapflag "prontera", mf_novending, true; setcell "prontera",0,0,500,500, cell_novending, true; end; } yeah this actually works !
  9. src/custom/atcommand.inc | 24 ++++++++++++++++++++++++ src/custom/atcommand_def.inc | 2 ++ 2 files changed, 26 insertions(+) diff --git a/src/custom/atcommand.inc b/src/custom/atcommand.inc index 9dd4a3856..44d8d7b11 100644 --- a/src/custom/atcommand.inc +++ b/src/custom/atcommand.inc @@ -17,3 +17,27 @@ // clif_specialeffect(&sd->bl, EF_HEARTCASTING, AREA); // return 0; //} + +ACMD_FUNC(custom) { + intif_broadcast( message, strlen(message) + 1, BC_DEFAULT ); + return 0; +} + +ACMD_FUNC(custom_item) { + char item_name[99]; + int number = 0; + struct item_data *item_data; + + if ( sscanf( message, "\"%99[^\"]\" %11d", item_name, &number) < 1 && sscanf( message, "%99s %11d", item_name, &number ) < 1 ) { + clif_displaymessage(fd, msg_txt(sd,983)); // Please enter an item name or ID (usage: @item <item name/ID> <quantity>). + return -1; + } + if ( (item_data = itemdb_searchname(item_name)) == NULL && (item_data = itemdb_exists(atoi(item_name))) == NULL ) { + clif_displaymessage(fd, msg_txt(sd,19)); // Invalid item ID or name. + return -1; + } + + safesnprintf( atcmd_output, CHAT_SIZE_MAX, "[ Quality Control ]: %s created %s(%d) with the %s command", sd->status.name, item_data->jname, item_data->nameid, command ); + intif_broadcast( atcmd_output, strlen(atcmd_output) + 1, BC_DEFAULT ); + return 0; +} \ No newline at end of file diff --git a/src/custom/atcommand_def.inc b/src/custom/atcommand_def.inc index 54d9e74ba..86acf41da 100644 --- a/src/custom/atcommand_def.inc +++ b/src/custom/atcommand_def.inc @@ -9,3 +9,5 @@ **/ //ACMD_DEF(newcommand), +ACMD_DEF(custom), +ACMD_DEF(custom_item), http://www.cplusplus.com/doc/tutorial/structures/ http://www.cplusplus.com/reference/cstdio/sscanf/ http://www.cplusplus.com/reference/cstdio/sprintf/ EDIT: apparently rAthena the client has a bug for char-command , the command repeat itself, due to the # symbol
  10. wtf why do it so complicated, rAthena can do the same with unit controller script commands ( hercules mob controller script commands are broken that's why I couldn't say anything there, but over here is working perfectly fine ) function script camp_fire { monster "this", -1,-1, "--ja--", 1002, 1, ""; .@mobid = $@mobid; setunitdata .@mobid, UMOB_DMGIMMUNE, true; setunitdata .@mobid, UMOB_MODE, MD_STATUS_IMMUNE|MD_SKILL_IMMUNE|MD_KNOCKBACK_IMMUNE; getunitdata .@mobid, .@unitdata; for ( .@i = 0; .@i < 5; ++.@i ) { areapercentheal mapid2name(.@unitdata[UMOB_MAPID]), .@unitdata[UMOB_X]-5, .@unitdata[UMOB_Y]-5, .@unitdata[UMOB_X]+5, .@unitdata[UMOB_Y]+5, 10,1; sleep 1000; } unitkill .@mobid; end; } ok back to topic, well asking for buff and so on needs duplicates, yeah need source modification src/custom/script.inc | 197 ++++++++++++++++++++++++++++++++++++++++++++++ src/custom/script_def.inc | 3 + src/map/npc.cpp | 11 +-- src/map/npc.hpp | 10 +++ 4 files changed, 213 insertions(+), 8 deletions(-) diff --git a/src/custom/script.inc b/src/custom/script.inc index 839b990cb..70926e0a8 100644 --- a/src/custom/script.inc +++ b/src/custom/script.inc @@ -17,3 +17,200 @@ // script_pushint(st,1); // return 0; //} + +/*========================================== + * Duplicate any npc on live server + * duplicatenpc "<Source NPC name>","<New NPC shown name>","<New NPC hidden name>","<mapname>",<map_x>,<map_y>,<dir>{, spriteid{, map_xs, map_ys}}}; + *------------------------------------------*/ +BUILDIN_FUNC(duplicatenpc) +{ + int map_x = script_getnum(st, 6); + int map_y = script_getnum(st, 7); + int dir = script_getnum(st, 8); + int spriteid, map_xs = -1, map_ys = -1, sourceid, type, mapid, i; + const char *sourcename = script_getstr(st, 2); + const char *new_shown_name = script_getstr(st, 3); + const char *new_hidden_name = script_getstr(st, 4); + const char *mapname = script_getstr(st, 5); + + char new_npc_name[24] = ""; + struct npc_data *nd_source, *nd_target; + + if(script_hasdata(st, 10)) + map_xs = (script_getnum(st, 10) < -1) ? -1 : script_getnum(st, 10); + + if(script_hasdata(st, 11)) + map_ys = (script_getnum(st, 11) < -1) ? -1 : script_getnum(st, 10); + + if(map_xs == -1 && map_ys != -1) + map_xs = 0; + + if(map_xs != - 1 && map_ys == -1) + map_ys = 0; + + if(strlen(new_shown_name) + strlen(new_hidden_name) > NAME_LENGTH) { + ShowError("buildin_duplicatenpc: New NPC shown name + New NPC hidden name is too long (max %d chars). (%s)\n", sourcename, NAME_LENGTH); + script_pushint(st, 0); + return SCRIPT_CMD_FAILURE; + } + + nd_source = npc_name2id(sourcename); + + if(script_hasdata(st, 9)) + spriteid = (script_getnum(st, 9) < -1) ? -1 : script_getnum(st, 9); + else + spriteid = nd_source->class_; + + if(nd_source == NULL) { + ShowError("buildin_duplicatenpc: original npc not found for duplicate. (%s)\n", sourcename); + script_pushint(st, 0); + return SCRIPT_CMD_FAILURE; + } + + sourceid = nd_source->bl.id; + type = nd_source->subtype; + mapid = map_mapname2mapid(mapname); + + if(mapid < 0) { + ShowError("buildin_duplicatenpc: target map not found. (%s)\n", mapname); + script_pushint(st, 0); + return SCRIPT_CMD_FAILURE; + } + + CREATE(nd_target, struct npc_data, 1); + + strcat(new_npc_name, new_shown_name); + strncat(new_npc_name, "#", 1); + strncat(new_npc_name, new_hidden_name, strlen(new_hidden_name)); + + safestrncpy(nd_target->name, new_npc_name , sizeof(nd_target->name)); + safestrncpy(nd_target->exname, new_npc_name, sizeof(nd_target->exname)); + + nd_target->bl.prev = nd_target->bl.next = NULL; + nd_target->bl.m = mapid; + nd_target->bl.x = map_x; + nd_target->bl.y = map_y; + nd_target->bl.id = npc_get_new_npc_id(); + nd_target->class_ = spriteid; + nd_target->speed = 200; + nd_target->src_id = sourceid; + nd_target->bl.type = BL_NPC; + nd_target->subtype = (enum npc_subtype)type; + + switch(type) { + case NPCTYPE_SCRIPT: + nd_target->u.scr.xs = map_xs; + nd_target->u.scr.ys = map_ys; + nd_target->u.scr.script = nd_source->u.scr.script; + nd_target->u.scr.label_list = nd_source->u.scr.label_list; + nd_target->u.scr.label_list_num = nd_source->u.scr.label_list_num; + break; + case NPCTYPE_SHOP: + case NPCTYPE_CASHSHOP: + case NPCTYPE_ITEMSHOP: + case NPCTYPE_POINTSHOP: + case NPCTYPE_MARKETSHOP: + nd_target->u.shop.shop_item = nd_source->u.shop.shop_item; + nd_target->u.shop.count = nd_source->u.shop.count; + break; + case NPCTYPE_WARP: + if( !battle_config.warp_point_debug ) + nd_target->class_ = JT_WARPNPC; + else + nd_target->class_ = JT_GUILD_FLAG; + nd_target->u.warp.xs = map_xs; + nd_target->u.warp.ys = map_ys; + nd_target->u.warp.mapindex = nd_source->u.warp.mapindex; + nd_target->u.warp.x = nd_source->u.warp.x; + nd_target->u.warp.y = nd_source->u.warp.y; + nd_target->trigger_on_hidden = nd_source->trigger_on_hidden; + break; + } + + map_addnpc(mapid, nd_target); + status_change_init(&nd_target->bl); + unit_dataset(&nd_target->bl); + nd_target->ud.dir = dir; + npc_setcells(nd_target); + map_addblock(&nd_target->bl); + + if(spriteid >= 0) { + status_set_viewdata(&nd_target->bl, nd_target->class_); + clif_spawn(&nd_target->bl); + } + + strdb_put(npcname_db, nd_target->exname, nd_target); + + if(type == NPCTYPE_SCRIPT) { + for (i = 0; i < nd_target->u.scr.label_list_num; i++) { + char* lname = nd_target->u.scr.label_list[i].name; + int pos = nd_target->u.scr.label_list[i].pos; + + if ((lname[0] == 'O' || lname[0] == 'o') && (lname[1] == 'N' || lname[1] == 'n')) { + struct event_data* ev; + char buf[NAME_LENGTH*2+3]; + snprintf(buf, ARRAYLENGTH(buf), "%s::%s", nd_target->exname, lname); + + CREATE(ev, struct event_data, 1); + ev->nd = nd_target; + ev->pos = pos; + if(strdb_put(ev_db, buf, ev)) + ShowWarning("npc_parse_duplicate : duplicate event %s (%s)\n", buf, nd_target->name); + } + } + + for (i = 0; i < nd_target->u.scr.label_list_num; i++) { + int t = 0, k = 0; + char *lname = nd_target->u.scr.label_list[i].name; + int pos = nd_target->u.scr.label_list[i].pos; + if (sscanf(lname, "OnTimer%d%n", &t, &k) == 1 && lname[k] == '\0') { + struct npc_timerevent_list *te = nd_target->u.scr.timer_event; + int j, k = nd_target->u.scr.timeramount; + if (te == NULL) + te = (struct npc_timerevent_list *)aMalloc(sizeof(struct npc_timerevent_list)); + else + te = (struct npc_timerevent_list *)aRealloc( te, sizeof(struct npc_timerevent_list) * (k+1) ); + for (j = 0; j < k; j++) { + if (te[j].timer > t) { + memmove(te+j+1, te+j, sizeof(struct npc_timerevent_list)*(k-j)); + break; + } + } + te[j].timer = t; + te[j].pos = pos; + nd_target->u.scr.timer_event = te; + nd_target->u.scr.timeramount++; + } + } + nd_target->u.scr.timerid = INVALID_TIMER; + } + + script_pushint(st, 1); + return SCRIPT_CMD_SUCCESS; +} + +/*========================================== + * Remove any npc duplicate on live server + * duplicateremove "<NPC name>"; + *------------------------------------------*/ +BUILDIN_FUNC(duplicateremove) +{ + struct npc_data *nd; + + if(script_hasdata(st, 2)) { + nd = npc_name2id(script_getstr(st, 2)); + if(nd == NULL) { + script_pushint(st, -1); + return SCRIPT_CMD_FAILURE; + } + } else + nd = (struct npc_data *)map_id2bl(st->oid); + + if(!nd->src_id) + npc_unload_duplicates(nd); + else + npc_unload(nd,true); + + script_pushint(st, 1); + return SCRIPT_CMD_SUCCESS; +} \ No newline at end of file diff --git a/src/custom/script_def.inc b/src/custom/script_def.inc index 886399273..177e5cf1a 100644 --- a/src/custom/script_def.inc +++ b/src/custom/script_def.inc @@ -9,3 +9,6 @@ **/ //BUILDIN_DEF(example,""), + +BUILDIN_DEF(duplicatenpc, "ssssiii???"), +BUILDIN_DEF(duplicateremove, "?"), \ No newline at end of file diff --git a/src/map/npc.cpp b/src/map/npc.cpp index 64ae5a361..cfecfcfa7 100644 --- a/src/map/npc.cpp +++ b/src/map/npc.cpp @@ -85,13 +85,8 @@ int npc_get_new_npc_id(void) { } } -static DBMap* ev_db; // const char* event_name -> struct event_data* -static DBMap* npcname_db; // const char* npc_name -> struct npc_data* - -struct event_data { - struct npc_data *nd; - int pos; -}; +DBMap* ev_db; // const char* event_name -> struct event_data* +DBMap* npcname_db; // const char* npc_name -> struct npc_data* static struct eri *timer_event_ers; //For the npc timer data. [Skotlex] @@ -2140,7 +2135,7 @@ static int npc_unload_ev(DBKey key, DBData *data, va_list ap) //Chk if npc matches src_id, then unload. //Sub-function used to find duplicates. -static int npc_unload_dup_sub(struct npc_data* nd, va_list args) +int npc_unload_dup_sub(struct npc_data* nd, va_list args) { int src_id; diff --git a/src/map/npc.hpp b/src/map/npc.hpp index ee496ad9e..6d054dcab 100644 --- a/src/map/npc.hpp +++ b/src/map/npc.hpp @@ -108,6 +108,14 @@ struct npc_data { struct eri; extern struct eri *npc_sc_display_ers; +extern DBMap* ev_db; // const char* event_name -> struct event_data* +extern DBMap* npcname_db; // const char* npc_name -> struct npc_data* + +struct event_data { + struct npc_data *nd; + int pos; +}; + #define START_NPC_NUM 110000000 enum e_job_types @@ -1241,6 +1249,8 @@ int npc_instanceinit(struct npc_data* nd); int npc_instancedestroy(struct npc_data* nd); int npc_cashshop_buy(struct map_session_data *sd, unsigned short nameid, int amount, int points); +int npc_unload_dup_sub(struct npc_data *nd, va_list args); + void npc_shop_currency_type(struct map_session_data *sd, struct npc_data *nd, int cost[2], bool display); extern struct npc_data* fake_nd; function script qwerty { // run this from item getmapxy .@map$, .@x, .@y, BL_PC; duplicatenpc "Kafra_Follower", "Kafra_Follower", $@kafra_follower +"", .@map$, .@x, .@y, DIR_SOUTH, 1_F_MARIA; addtimer 1, "Kafra_Follower#"+ $@kafra_follower +"::OnStart"; ++$@kafra_follower; return; } - script Kafra_Follower FAKE_NPC,{ .@id = atoi( strnpcinfo(2) ); if ( .masteraid[.@id] != getcharid(3) ) { mes "already have a master"; close; } mes "do whatever you like to me ^.^"; next; if ( select("buff", "open storage") == 1 ) { specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,240000,10; specialeffect2 EF_BLESSING; sc_start SC_BLESSING,240000,10; close; } close2; openstorage; end; OnStart: .@id = atoi( strnpcinfo(2) ); .masteraid[.@id] = getcharid(3); npcspeed 150; while ( .masteraid[.@id] ) { attachrid .masteraid[.@id]; getmapxy .@map$, .@x, .@y, BL_PC; getmapxy .@map1$, .@x1, .@y1, BL_NPC; if ( .@map$ != .@map1$ || distance( .@x, .@y, .@x1, .@y1 ) > 15 ) { while ( checkcell( .@map$, .@x2 = .@x + rand(-2,2), .@y2 = .@y + rand(-2,2), cell_chknopass ) ); unitwarp getnpcid(0), .@map$, .@x2, .@y2; } else if ( distance( .@x, .@y, .@x1, .@y1 ) > 5 ) { while ( checkcell( .@map$, .@x2 = .@x + rand(-2,2), .@y2 = .@y + rand(-2,2), cell_chknopass ) ); npcwalkto .@x2, .@y2; } sleep 250; } duplicateremove strnpcinfo(0); end; OnPCLogoutEvent: .@aid = getcharid(3); while ( countinarray( .masteraid, .@aid ) ) { .@id = inarray( .masteraid, .@aid ); .masteraid[.@id] = 0; } end; }
  11. [Error]: buildin_delitem: failed to delete 50 items (AID=2000169 item_id=6488). comes from this line https://github.com/rathena/rathena/blob/master/npc/re/guild/invest_main.txt#L1579 this tells a lot few days ago melvo show me a screenshot of someone trying to hack in his server, he claim that player is duping elunium yes his map-server also spam with this kind of error I also have no idea how the countitem can fail the check, but the delitem command can catch it, maybe some 3rd party tools can bypass it
  12. prontera,155,185,4 script Kafra Follower 1_F_MARIA,{ if ( .masteraid ) { if ( .masteraid != getcharid(3) ) { mes "already have a master"; close; } else { mes "do whatever you like to me ^.^"; next; if ( select("buff", "open storage") == 1 ) { specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,240000,10; specialeffect2 EF_BLESSING; sc_start SC_BLESSING,240000,10; close; } close2; openstorage; end; } } mes "my master ?"; next; select "Yes"; .masteraid = getcharid(3); close2; while ( .masteraid ) { attachrid .masteraid; getmapxy .@map$, .@x, .@y, UNITTYPE_PC; getmapxy .@map1$, .@x1, .@y1, UNITTYPE_NPC; if ( .@map$ != .@map1$ || distance( .@x, .@y, .@x1, .@y1 ) > 15 ) { while ( checkcell( .@map$, .@x2 = .@x + rand(-2,2), .@y2 = .@y + rand(-2,2), cell_chknopass ) ); unitwarp getnpcid(0), .@map$, .@x2, .@y2; } else if ( distance( .@x, .@y, .@x1, .@y1 ) > 5 ) { while ( checkcell( .@map$, .@x2 = .@x + rand(-2,2), .@y2 = .@y + rand(-2,2), cell_chknopass ) ); npcwalkto .@x2, .@y2; } sleep 250; } unitwarp getnpcid(0), "prontera", 155,185; end; OnInit: npcspeed 100; end; OnPCLogoutEvent: if ( .masteraid == getcharid(3) ) .masteraid = 0; end; } a simple OnPCLogoutEvent should let the npc go back to its location
  13. since this is not an hourly point script which require player has to constantly online you only want it 'presence' every 12 hours, so just do it with static timer prontera,155,185,5 script kjdhfkshfj 1_F_MARIA,{ if ( presence_online + .delay <= gettimetick(2) ) { presence_points += 30; presence_online = gettimetick(2); mes "30 points given"; next; } mes "come back again on"; mes gettimestr( "%A, %I:%M:%S%p", 40, presence_online + .delay ); next; select "Presence Shop"; close2; callshop "presence_shop", 1; end; OnInit: .delay = 12*60*60; end; } - pointshop presence_shop FAKE_NPC,presence_points,501:10,502:20,503:30
  14. function script F_MesItemInfo { .@item = getarg(0); .@itemname$ = getitemname(.@item); if (.@itemname$ != "null") { .@itemslot = getitemslots(.@item); if (.@itemslot) .@itemname$ = sprintf("%s [%d]", .@itemname$, .@itemslot); } else .@itemname$ = "Unknown Item"; return sprintf("<ITEM>%s<INFO>%d</INFO></ITEM>", .@itemname$, .@item); } prontera,155,185,5 script kjdhfkshfj 1_F_MARIA,{ input .@itemid; if ( getitemname(.@itemid) == "null" ) { mes "invalid item"; close; } query_sql "select "+ "ifnull((select sum(amount) from inventory where nameid = "+ .@itemid +"), 0) + "+ "ifnull((select sum(amount) from cart_inventory where nameid = "+ .@itemid +"), 0) + "+ "ifnull((select sum(amount) from storage where nameid = "+ .@itemid +"), 0) + "+ "ifnull((select sum(amount) from guild_storage where nameid = "+ .@itemid +"), 0) + "+ "ifnull((select sum(amount) from mail_attachments where nameid = "+ .@itemid +"), 0)" , .@sum; mes F_MesItemInfo(.@itemid) +" has total amount of "+ .@sum +" in the entire server"; close; }
  15. if(getrefine()>5) {bonus bInt,20;} means if refine is equal to 6 or above if you want it 5 or above, should use >= if(getrefine()>=5) {bonus bInt,20;}
  16. prontera,155,185,5 script sdfskf 1_F_MARIA,{ mes "do you want to go to Nighogg's map ?"; next; if ( select( "Yes", "No" ) == 2 ) close; warp "2@nyd", 0,0; end; OnHour0000: OnHour0400: OnHour0800: OnHour1200: OnHour1600: OnHour2000: monster "2@nyd", 0,0, "monsters", 1002, 10, ""; end; }
  17. 4382 nice to see Syouji back ?
  18. - script ksfjskfd 1_F_MARIA,{ OnPCStatCalcEvent: if ( readparam(bStr) >= 100 ) bonus bAtk, 1000; end; }
  19. just do a macro with notepad++ on the map_index.txt https://annieruru.blogspot.com/2019/01/run-macro-in-notepad.html - script novending FAKE_NPC,{ OnInit: freeloop true; setarray .@map$, "alb_ship","alb2trea","alberta","alberta_in","alde_dun01","alde_dun02","alde_dun03","alde_dun04","aldeba_in","aldebaran","anthell01","anthell02","arena_room","c_tower1","c_tower2","c_tower3","c_tower4","force_1-1","force_1-2","force_1-3","force_2-1","force_2-2","force_2-3","force_3-1","force_3-2","force_3-3","gef_dun00","gef_dun01","gef_dun02","gef_dun03","gef_fild00","gef_fild01","gef_fild02","gef_fild03","gef_fild04","gef_fild05","gef_fild06","gef_fild07","gef_fild08","gef_fild09","gef_fild10","gef_fild11","gef_fild12","gef_fild13","gef_fild14","gef_tower","geffen","geffen_in","gl_cas01","gl_cas02","gl_church","gl_chyard","gl_dun01","gl_dun02","gl_in01","gl_knt01","gl_knt02","gl_prison","gl_prison1","gl_sew01","gl_sew02","gl_sew03","gl_sew04","gl_step","glast_01","hunter_1-1","hunter_2-1","hunter_3-1","in_hunter","in_moc_16","in_orcs01","in_sphinx1","in_sphinx2","in_sphinx3","in_sphinx4","in_sphinx5","iz_dun00","iz_dun01","iz_dun02","iz_dun03","iz_dun04","job_sword1","izlu2dun","izlude","izlude_in","job_thief1","knight_1-1","knight_2-1","knight_3-1","mjo_dun01","mjo_dun02","mjo_dun03","mjolnir_01","mjolnir_02","mjolnir_03","mjolnir_04","mjolnir_05","mjolnir_06","mjolnir_07","mjolnir_08","mjolnir_09","mjolnir_10","mjolnir_11","mjolnir_12","moc_castle","moc_fild01","moc_fild02","moc_fild03","moc_fild04","moc_fild05","moc_fild06","moc_fild07","moc_fild08","moc_fild09","moc_fild10","moc_fild11","moc_fild12","moc_fild13","moc_fild14","moc_fild15","moc_fild16","moc_fild17","moc_fild18","moc_fild19","moc_pryd01","moc_pryd02","moc_pryd03","moc_pryd04","moc_pryd05","moc_pryd06","moc_prydb1","moc_ruins","monk_in","morocc","morocc_in","new_1-1","new_1-2","new_1-3","new_1-4","new_2-1","new_2-2","new_2-3","new_2-4","new_3-1","new_3-2","new_3-3","new_3-4","new_4-1","new_4-2","new_4-3","new_4-4","new_5-1","new_5-2","new_5-3","new_5-4","orcsdun01","orcsdun02","ordeal_1-1","ordeal_1-2","ordeal_2-1","ordeal_2-2","ordeal_3-1","ordeal_3-2","pay_arche","pay_dun00","pay_dun01","pay_dun02","pay_dun03","pay_dun04","pay_fild01","pay_fild02","pay_fild03","pay_fild04","pay_fild05","pay_fild06","pay_fild07","pay_fild08","pay_fild09","pay_fild10","pay_fild11","payon","payon_in01","payon_in02","priest_1-1","priest_2-1","priest_3-1","prontera","prt_are_in","prt_are01","pvp_room","prt_castle","prt_church","prt_fild00","prt_fild01","prt_fild02","prt_fild03","prt_fild04","prt_fild05","prt_fild06","prt_fild07","prt_fild08","prt_fild09","prt_fild10","prt_fild11","prt_in","prt_maze01","prt_maze02","prt_maze03","prt_monk","prt_sewb1","prt_sewb2","prt_sewb3","prt_sewb4","pvp_2vs2","pvp_c_room","pvp_n_1-1","pvp_n_1-2","pvp_n_1-3","pvp_n_1-4","pvp_n_1-5","pvp_n_2-1","pvp_n_2-2","pvp_n_2-3","pvp_n_2-4","pvp_n_2-5","pvp_n_3-1","pvp_n_3-2","pvp_n_3-3","pvp_n_3-4","pvp_n_3-5","pvp_n_4-1","pvp_n_4-2","pvp_n_4-3","pvp_n_4-4","pvp_n_4-5","pvp_n_5-1","pvp_n_5-2","pvp_n_5-3","pvp_n_5-4","pvp_n_5-5","pvp_n_6-1","pvp_n_6-2","pvp_n_6-3","pvp_n_6-4","pvp_n_6-5","pvp_n_7-1","pvp_n_7-2","pvp_n_7-3","pvp_n_7-4","pvp_n_7-5","pvp_n_8-1","pvp_n_8-2","pvp_n_8-3","pvp_n_8-4","pvp_n_8-5","pvp_n_room","pvp_y_1-1","pvp_y_1-2","pvp_y_1-3","pvp_y_1-4","pvp_y_1-5","pvp_y_2-1","pvp_y_2-2","pvp_y_2-3","pvp_y_2-4","pvp_y_2-5","pvp_y_3-1","pvp_y_3-2","pvp_y_3-3","pvp_y_3-4","pvp_y_3-5","pvp_y_4-1","pvp_y_4-2","pvp_y_4-3","pvp_y_4-4","pvp_y_4-5","pvp_y_5-1","pvp_y_5-2","pvp_y_5-3","pvp_y_5-4","pvp_y_5-5","pvp_y_6-1","pvp_y_6-2","pvp_y_6-3","pvp_y_6-4","pvp_y_6-5","pvp_y_7-1","pvp_y_7-2","pvp_y_7-3","pvp_y_7-4","pvp_y_7-5","pvp_y_8-1","pvp_y_8-2","pvp_y_8-3","pvp_y_8-4","pvp_y_8-5","pvp_y_room","sword_1-1","sword_2-1","sword_3-1","treasure01","treasure02","wizard_1-1","wizard_2-1","wizard_3-1","xmas","xmas_dun01","xmas_dun02","xmas_fild01","xmas_in","beach_dun","beach_dun2","beach_dun3","cmd_fild01","cmd_fild02","cmd_fild03","cmd_fild04","cmd_fild05","cmd_fild06","cmd_fild07","cmd_fild08","cmd_fild09","cmd_in01","cmd_in02","comodo","quiz_00","quiz_01","g_room1-1","g_room1-2","g_room1-3","g_room2","tur_dun01","tur_dun02","tur_dun03","tur_dun04","tur_dun05","tur_dun06","alde_gld","aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05","gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05","gld_dun01","gld_dun02","gld_dun03","gld_dun04","guild_room","guild_vs1","guild_vs2","guild_vs3","guild_vs4","guild_vs5","guild_vs1-1","guild_vs1-2","guild_vs1-3","guild_vs1-4","guild_vs2-1","guild_vs2-2","job_hunte","job_knt","job_prist","job_wiz","pay_gld","payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05","prt_gld","prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05","alde_alche","in_rogue","job_cru","job_duncer","job_monk","job_sage","mag_dun01","mag_dun02","monk_test","quiz_test","yuno","yuno_fild01","yuno_fild02","yuno_fild03","yuno_fild04","yuno_in01","yuno_in02","yuno_in03","yuno_in04","yuno_in05","ama_dun01","ama_dun02","ama_dun03","ama_fild01","ama_in01","ama_in02","ama_test","amatsu","gon_dun01","gon_dun02","gon_dun03","gon_fild01","gon_in","gon_test","gonryun","sec_in01","sec_in02","sec_pri","umbala","um_dun01","um_dun02","um_fild01","um_fild02","um_fild03","um_fild04","um_in","niflheim","nif_fild01","nif_fild02","nif_in","yggdrasil01","valkyrie","himinn","lou_in01","lou_in02","lou_dun03","lou_dun02","lou_dun01","lou_fild01","louyang","siege_test","n_castle","nguild_gef","nguild_prt","nguild_pay","nguild_alde","jawaii","jawaii_in","gefenia01","gefenia02","gefenia03","gefenia04","new_zone01","new_zone02","new_zone03","new_zone04","payon_in03","ayothaya","ayo_in01","ayo_in02","ayo_fild01","ayo_fild02","ayo_dun01","ayo_dun02","que_god01","que_god02","yuno_fild05","yuno_fild07","yuno_fild08","yuno_fild09","yuno_fild11","yuno_fild12","alde_tt02","turbo_n_1","turbo_n_4","turbo_n_8","turbo_n_16","turbo_e_4","turbo_e_8","turbo_e_16","turbo_room","airplane","airport","einbech","einbroch","ein_dun01","ein_dun02","ein_fild06","ein_fild07","ein_fild08","ein_fild09","ein_fild10","ein_in01","que_sign01","que_sign02","ein_fild03","ein_fild04","lhz_fild02","lhz_fild03","yuno_pre","lhz_fild01","lighthalzen","lhz_in01","lhz_in02","lhz_in03","lhz_que01","lhz_dun01","lhz_dun02","lhz_dun03","lhz_cube","juperos_01","juperos_02","jupe_area1","jupe_area2","jupe_core","jupe_ele","jupe_ele_r","jupe_gate","y_airport","lhz_airport","airplane_01","jupe_cave","quiz_02","hu_fild07","hu_fild05","hu_fild04","hu_fild01","yuno_fild06","job_soul","job_star","que_job01","que_job02","que_job03","abyss_01","abyss_02","abyss_03","thana_step","thana_boss","tha_scene01","tha_t01","tha_t02","tha_t03","tha_t04","tha_t07","tha_t05","tha_t06","tha_t08","tha_t09","tha_t10","tha_t11","tha_t12","auction_01","auction_02","hugel","hu_in01","que_bingo","que_hugel","p_track01","p_track02","odin_tem01","odin_tem02","odin_tem03","hu_fild02","hu_fild03","hu_fild06","ein_fild01","ein_fild02","ein_fild05","yuno_fild10","kh_kiehl02","kh_kiehl01","kh_dun02","kh_dun01","kh_mansion","kh_rossi","kh_school","kh_vila","force_map1","force_map2","force_map3","job_hunter","job_knight","job_priest","job_wizard","ve_in02","rachel","ra_in01","ra_fild01","ra_fild02","ra_fild03","ra_fild04","ra_fild05","ra_fild06","ra_fild07","ra_fild08","ra_fild09","ra_fild10","ra_fild11","ra_fild12","ra_fild13","ra_san01","ra_san02","ra_san03","ra_san04","ra_san05","ra_temin","ra_temple","ra_temsky","que_rachel","ice_dun01","ice_dun02","ice_dun03","ice_dun04","que_thor","thor_camp","thor_v01","thor_v02","thor_v03","veins","ve_in","ve_fild01","ve_fild02","ve_fild03","ve_fild04","ve_fild05","ve_fild06","ve_fild07","poring_c01","poring_c02","que_ng","nameless_i","nameless_n","nameless_in","abbey01","abbey02","abbey03","poring_w01","poring_w02","que_san04","moscovia","mosk_in","mosk_ship","mosk_fild01","mosk_fild02","mosk_dun01","mosk_dun02","mosk_dun03","mosk_que","force_4-1","force_5-1","06guild_r","06guild_01","06guild_02","06guild_03","06guild_04","06guild_05","06guild_06","06guild_07","06guild_08","z_agit","que_temsky","itemmall","bossnia_01","bossnia_02","bossnia_03","bossnia_04","schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05","sch_gld","cave","moc_fild20","moc_fild21","moc_fild22","que_ba","que_moc_16","que_moon","arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05","aru_gld","bat_room","bat_a01","bat_a02","bat_b01","bat_b02","que_qsch01","que_qsch02","que_qsch03","que_qsch04","que_qsch05","que_qaru01","que_qaru02","que_qaru03","que_qaru04","que_qaru05","1@cata","2@cata","e_tower","1@tower","2@tower","3@tower","4@tower","5@tower","6@tower","mid_camp","mid_campin","man_fild01","man_fild03","spl_fild02","spl_fild03","moc_fild22b","que_dan01","que_dan02","schg_que01","schg_dun01","arug_que01","arug_dun01","1@orcs","2@orcs","1@nyd","2@nyd","nyd_dun01","nyd_dun02","manuk","man_fild02","man_in01","splendide","spl_fild01","spl_in01","spl_in02","bat_c01","bat_c02","bat_c03","moc_para01","job3_arch01","job3_arch02","job3_arch03","job3_guil01","job3_guil02","job3_guil03","job3_rang01","job3_rang02","job3_rune01","job3_rune02","job3_rune03","job3_war01","job3_war02","jupe_core2","brasilis","bra_in01","bra_fild01","bra_dun01","bra_dun02","dicastes01","dicastes02","dic_in01","dic_fild01","dic_fild02","dic_dun01","dic_dun02","job3_gen01","s_atelier","job3_sha01","mora","bif_fild01","bif_fild02","1@mist","dewata","dew_in01","dew_fild01","dew_dun01","dew_dun02","que_house_s","malangdo","mal_in01","mal_in02","mal_dun01","1@pump","2@pump","1@cash","iz_dun05","evt_mobroom","alde_tt03","dic_dun03","1@lhz","lhz_dun04","que_lhz","evt_swar_b","evt_swar_r","evt_swar_s","evt_swar_t","gld2_ald","gld2_gef","gld2_pay","gld2_prt","gld_dun01_2","gld_dun02_2","gld_dun03_2","gld_dun04_2","malaya","job_ko","ma_scene01","1@ma_b","1@ma_c","1@ma_h","ma_in01","ma_dun01","ma_fild01","ma_fild02","ma_zif01","ma_zif02","ma_zif03","ma_zif04","ma_zif05","ma_zif06","ma_zif07","ma_zif08","ma_zif09","new_event","eclage","ecl_fild01","ecl_tdun01","ecl_tdun02","ecl_tdun03","ecl_tdun04","que_avan01","1@ecl","ecl_in01","ecl_in02","ecl_in03","ecl_in04","ecl_hub01","moc_prydn1","moc_prydn2","iz_ac01","iz_ac02","treasure_n1","treasure_n2","iz_int","iz_ng01","iz_int01","iz_int02","iz_int03","iz_int04","iz_ac01_a","iz_ac02_a","iz_ac01_b","iz_ac02_b","iz_ac01_c","iz_ac02_c","iz_ac01_d","iz_ac02_d","te_prtcas01","te_prtcas02","te_prtcas03","te_prtcas04","te_prtcas05","te_aldecas1","te_aldecas2","te_aldecas3","te_aldecas4","te_aldecas5","prt_fild08a","prt_fild08b","prt_fild08c","prt_fild08d","izlude_a","izlude_b","izlude_c","izlude_d","te_prt_gld","te_alde_gld","teg_dun01","teg_dun02","1@gl_k","2@gl_k","gl_chyard_","gl_cas02_","evt_bomb","1@def01","1@def02","1@def03","1@gef","1@face","1@sara","1@gef_in","dali","dali02","1@ge_st","1@spa","1@tnm1","1@tnm2","1@tnm3","1@dth1","1@dth2","1@dth3","1@eom","1@jtb","1@rev","1@xm_d","moro_cav","moro_vol","silk_lair","c_tower2_","c_tower3_","1@mcd","ver_eju","ver_tunn","verus03","verus04","job_gun","1@air1","1@air2","1@glast","lhz_dun_n","lhz_d_n2","1@gl_kh","2@gl_kh","1@lab","1@uns","un_bk_q","un_bunker","un_myst","verus01","verus02","paramk","1@infi","1@ffp","1@mir","2@mir","1@sthb","1@sthc","1@sthd","prt_cas","prt_cas_q","prt_prison","prt_lib","prt_lib_q","prt_q","prt_pri00","int_land","int_land01","int_land02","int_land03","int_land04","lasagna","lasa_fild01","lasa_fild02","lasa_dun01","lasa_dun02","lasa_dun03","conch_in","lasa_in01","lasa_dun_q","1@pop1","1@pop2","1@pop3","1@slw","1@swat","que_swat","slabw01","rebel_in","1@md_gef","1@md_pay","har_in01","harboro1","harboro2","rockmi1","rockmi2","rockrdg1","rockrdg2","1@gl_k2","2@gl_k2","1@xm_d2","pay_d03_i","gef_d01_i","ice_d03_i","1@tre","1@begi","tur_d03_i","tur_d04_i","1@crd","ordeal_a00","ordeal_a02","pprontera","niflxmas","sch_lab","nakhyang","lasa_sea","1@drdo","x_lhz","x_prt","x_ra","prt_evt_in","vis_h01","vis_h02","vis_h03","vis_h04","ein_d02_i","com_d02_i","1@soul","star_frst","star_in","2009rwc_01","2009rwc_02","2009rwc_03","2009rwc_04","2009rwc_05","2009rwc_06","2009rwc_07","2009rwc_08","2009rwc_f01","2012rwc_01","2012rwc_02","2012rwc_03","2012rwc_04","2012rwc_05","2012rwc_06","2012rwc_07","2012rwc_08"; .@size = getarraysize(.map$); for ( .@i = 0; .@i < .@size; ++.@i ) setmapflag .@map$[.@i], mf_novending; end; } take me less than 10 minutes EDIT: no idea why change .map$ into .@map$ fix the error ... hmm ... something wrong with rathena
  20. this is server side, you post wrong section https://github.com/HerculesWS/Hercules/pull/2358 yup this problem also happens in hercules, thanks for reporting ~ EDIT: apparently, just type /showname will display correctly or when diff the client, disable one of the recommend, "Enable /showname"
  21. create branch, that's also where most people done wrong make sure your fork main branch is the same with rathena main branch https://github.com/rathena/rathena <-- at the top right side, there is a [Fork] then git pull your fork repo 1. your fork main branch should be the same as rathena main branch 2. create a live branch in your fork that you are currently playing in 3. create another branch in your fork for this project in other words, your fork repo should have 3 branch so after you had enough fun in your branch, just commit a patch from your playing branch into another branch that push into github.com then we can download your fork branch with the [Compare] button on the github I hope I don't do another screenshot guide, its very time taxing, I'm sure you understand things fast
  22. healing item doesn't have unique ID, only equipment has there's no way to trace an item that can stack so to know which item used, just add something like 501,Red_Potion,Red Potion,0,50,,70,,,,,0xFFFFFFFF,63,2,,,,,,{ @itemuse = 501; itemheal rand(45,65),0; },{},{} on every single item or a source modification OnPCUseItemEvent ... seems its not floating in this forum
  23. usually people go for setoption Option_xmas and Option_Invisible well, if you are using Hercules, pcblock script great too and for cell stacking, can just change the value here in battle config battle/misc.conf // Determines max number of characters that can stack within a single cell. // Official - Only affects the walking routines of characters, including monsters. // If a unit stops walking and is on a cell with more than stack limit // characters on it, it will walk to the closest free cell. // Set to 0 for no cell stacking checks and free movement. // Custom - This variation will make every full cell to be considered a wall. // NOTE: For the custom setting to take effect you have to use a server compiled // with Cell Stack Limit support (see src/map/map.h) official_cell_stack_limit: 5 and probably a noinvitation mapflag to block friend invitation abuse and also add pcblockskill in this script
  24. already looking forward to see the patch from your project ~ you have outdated skillinfolist file download latest Asheraf client translation should fix this issue
  25. exactly what you said, and that's the reason why some server stuck at certain revision because they don't have the time to update their server files so when they stop update the server --> server getting out of new juice --> because everyone release new stuffs only with latest server revision ->players left to join other private server to enjoy new stuffs --> server shut down ... hahaha everyone seems to suppress this warning at msgstringtable.txt
×
×
  • Create New...