-
Content Count
128 -
Joined
-
Last visited
-
Days Won
1
Reputation Activity
-
-
Kuroyama reacted to AnnieRuru in @packetfilter
No more Work in Progress, Please report if there are any bug
Download: 1.0a [Complete]
plugin
What is `@packetfilter` ?
`@packetfilter` is a custom mod originate from eamod
https://github.com/zephyrus-cr/eamod/blob/master/Servers/rAthena/conf/groups.conf#L418-L422
it can actually reduce lag on your live server during woe depends on how many players activate it
it totally depends on the player's side, community effort that every player should together turn on the `@packetfilter` to reduce massive lag during woe
this modification is actually very famous and there are members willingly to pay for it
https://rathena.org/board/topic/121200-packetfilter-battleinfo/
https://rathena.org/board/topic/123203-battleinfo-packetfilter/
https://rathena.org/board/topic/111797-packetfilter-zepyhrus-ramod/
https://rathena.org/board/topic/79995-buy-noactnodelay-partybuff-src-as-it-was-on-pro-ro-or-packetfilter/
this `@packetfilter` is unlike the one you are having, or that is circulating on rathena forum
this one has been written entirely from scratch and added some other flags that the original don't
for example,
`@packetfilter COHM EOHM`
allow block normal chat and emotion from non-related players, pets, homunculus and monsters
but this doesn't block normal chat from party/guild members
a full list of flags are
C = ignore normal Chat, including Dancer's scream, Bard's frost joke, and pet's talk (pet start to talk when intimacy > 900) E = ignore emotion, including monster and pet emotion (but NOT pet performance) I = ignore Item use effect A = ignore normal Attack animation (based on receiving side), your own attack animation are always shown B = Buffing skill animations (based on receiving side), your own casting animation are always shown S = Status effect T = offensive single Target skill/spell animations (based on receiving side), your own casting animation are always shown G = Ground based skills (eg:storm gust), your own casting animation are always shown M = Music dance/songs from Bard/Dancer D = Direction. Recommend filter on Party/Guild type and not enemies. Highly Recommend for supportive type Class. after the Main type, also support additional flags
S = Self P = Party G = Guild B = Battleground C = Clan O = Other players, none of the above H = Homunculus/pets/elementals/mercenary and player's @summon M = Monsters
Why This plugin doesn't block Kaite or Energy Coat ?
2 reasons
No.1 - currently there is a bug with plugin,
struct packet_spawn_unit *p = (struct packet_spawn_unit*)RBUFP(buf, 0); this line will throw error on Linux
so no choice, maybe I'll make a bug report
this bug also has been reported on Dastgir's `@noview`
No.2 - just set p->virtue = 0; isn't really blocking the packet
this goes against the very principle of this plugin, which is NOT send certain packet to the client
OPT3 (including OPT3_KAITE | OPT3_ENERGYCOAT | OPT3_SOULLINK) is part of the idle_unitType, unit_walkingType and spawn_unitType function
and blocking those 3 packet entirely is stupid
in case you don't understand, look under clif_set_unit_walking and clif_set_unit_idle function inside src\map\clif.c file
p.GUID = g_id; p.GEmblemVer = status->get_emblem_id(bl); p.honor = (sd) ? sd->status.manner : 0; // p.virtue = (sc) ? sc->opt3 : 0; <-- change this line p.virtue = 0; p.isPKModeON = (sd && sd->status.karma) ? 1 : 0; p.sex = vd->sex;
Note: about [D]irection type packet
try add a ShowDebug inside clif->send
src/map/clif.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/clif.c b/src/map/clif.c index ab3c4422a..9e245f335 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -450,6 +450,7 @@ static bool clif_send(const void *buf, int len, struct block_list *bl, enum send return true; } +ShowDebug("source:%s buf:0x%x send_target:%d\n", (sd != NULL)? sd->status.name : "NULL", RBUFW(buf, 0), type); switch(type) { case ALL_CLIENT: //All player clients. iter = mapit_getallusers(); you will find 0x9c is being send repeatedly on every attack and every skill cast , getting attack etc
this direction update packet isn't just send by Shift-click, but also including all the actions above
this packet is very spam-able and I think can be safely block on party/guild/clan/bg flags
for supportive class, I also think can block all of them since supportive class doesn't need information from enemies
-
Kuroyama reacted to AnnieRuru in [Urgent Request] @ignoredrop/@seeitems
ok visual studio sux
https://github.com/AnnieRuru/Release/blob/master/plugins/ignoredropitem/ignoredropitem_0.3.c
- fix possible null pointer error
-
Kuroyama reacted to AnnieRuru in Castle Guild Member Limit
oh ok, you are partially right when it kick excess guild members
but it isn't the way you claimed that it count from other guild members
upon close inspection, @astralprojection script has 2 problems which is
1. if the player has multiple characters from the same account join the same guild, it count multiple times instead of 1, it doesn't extend the isloggedin into $@guildmembercid check
2. it checks as long as the guild member enter ANY CASTLE map, not that particular castle map
try this one
https://gist.github.com/AnnieRuru/339e268a8be5370fa7ae1aa2f856ca28
-
Kuroyama got a reaction from AnnieRuru in Castle Guild Member Limit
I already tried this, and it's affecting (kicking) all the guild members when you Ecall them. Once recalled, all the members are affected by limit and they will be warped out even you set the limit to large number.
Sir @astralprojection script works and exclude the ecall issue, but the problem is the script is counting the overall guildmember cap inside the castle/koe map, not per member of the separate guilds so even though the guild A and guild B aren't 3 (or 30) members inside, the script will kick the excess as long as its reach the limit inside the map. It counts all the guild members inside the map.
-
Kuroyama reacted to AnnieRuru in Need support for @market plugin
dastgir has been a big help trying to help maintain some of my plugins,
but this one in particular, I see the version is 1.6, which means he miss the version 1.7 update
yup, the one you posted has memory leak problem because the chat-room doesn't remove properly
eg: only remove the chat-room shown, but the memory still persist
see the remove_chatroom function to see how to remove the chat-room from server memory properly
... which was copy paste from a function from chat.c
anyway here is version 1.9
https://github.com/AnnieRuru/Release/blob/master/plugins/marketclone/marketclone_1.9.c
-
Kuroyama reacted to AnnieRuru in [Urgent Request] @ignoredrop/@seeitems
https://github.com/AnnieRuru/Release/blob/master/plugins/ignoredropitem/ignoredropitem_0.1.c
https://github.com/AnnieRuru/Release/blob/master/plugins/ignoredropitem/ignoredropitem_0.2.c
-
Kuroyama reacted to Samuel in Hidemobhpbar Plugin
Sorry for the late reply, I've been very busy in the past few weeks.
I have updated the plugin. Please try.
-
Kuroyama reacted to astralprojection in Castle Guild Member Limit
- script woelimit HIDDEN_NPC,{ end; OnPCLoadMapEvent: .@rid = playerattached(); if ( !compare(strcharinfo(PC_MAP), "g_cas") || !agitcheck() ) end; getguildmember getcharid(CHAR_ID_GUILD), 1; getguildmember getcharid(CHAR_ID_GUILD), 2; .@count = 0; for ( .@i = 0; .@i < $@guildmembercount; .@i++ ) { if (attachrid($@guildmemberaid[.@i])) { if( compare(strcharinfo(PC_MAP), "g_cas") ) .@count++; } } if ( .@rid ) attachrid(.@rid); else detachrid; if(.@count > .max){ message strcharinfo(0), "WARNING: Max of "+.max+" members can simultaneously join the WOE."; warp "SavePoint",0,0; } end; OnInit: .max = 25; end; } try this
-
Kuroyama reacted to astralprojection in Castle Guild Member Limit
i will try also i will share if i get it right.
-
Kuroyama reacted to Samuel in Hidemobhpbar Plugin
I tried to convert my pull request to disable hp bar on MvP and Emperium into a plugin
hidemobhpbar
-
Kuroyama reacted to Samuel in hit-delay plugin
Try this, haven't tested yet
void pc_damage_received(struct map_session_data **sd, struct block_list **src, unsigned int *hp, unsigned int *sp) { struct warp_delay_tick *delay_data; if ((map_flag_gvg(sd->bl.m)) || (map_flag_gvg2(sd->bl.m))) { return; } if ((delay_data = getFromMSD(*sd, 0)) == NULL) { CREATE(delay_data,struct warp_delay_tick,1); addToMSD(*sd,delay_data,0,true); } delay_data->last_hit = timer->gettick(); if (*src) delay_data->who_hit = (*src)->type; else delay_data->who_hit = BL_NUL; return; }
Replace the pc_damage_received function with that.
Back it up first before replacing.
-
Kuroyama reacted to Samuel in hit-delay plugin
Sorry didn't see it was a Pre hook
void pc_damage_received(struct map_session_data **sd, struct block_list **src, unsigned int *hp, unsigned int *sp) { struct warp_delay_tick *delay_data; if ((map_flag_gvg((*sd)->bl.m)) || (map_flag_gvg2((*sd)->bl.m))) { return; } if ((delay_data = getFromMSD(*sd, 0)) == NULL) { CREATE(delay_data,struct warp_delay_tick,1); addToMSD(*sd,delay_data,0,true); } delay_data->last_hit = timer->gettick(); if (*src) delay_data->who_hit = (*src)->type; else delay_data->who_hit = BL_NUL; return; }
-
Kuroyama reacted to Dastgir in Noob Question about weapon position
The problem is with weapon sprite. you need to edit weapon sprite accordingly.
-
Kuroyama reacted to Rebel in Lord Knight [SL Modification]
Find in skill.c
int skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id, uint16 skill_lv) insert after
int index[MAX_SKILL_ITEM_REQUIRE]; this
struct status_change *sc = &sd->sc; find in skill.c
if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) { clif->skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0); return 0; } change to
if( require.weapon && !(pc_check_weapontype(sd,require.weapon) || (skill_id == LK_PARRYING && sc && sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_KNIGHT && sd->weapontype == W_1HSWORD))) { clif->skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0); return 0; } Find again in skill.c
if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) { clif->skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0); return 0; } change to
if( require.weapon && !(pc_check_weapontype(sd,require.weapon) || (skill_id == LK_PARRYING && sc && sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_KNIGHT && sd->weapontype == W_1HSWORD))) { clif->skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0); return 0; } recompile.
-
Kuroyama reacted to Dastgir in Need NoView Plugin Support
Hello,
I have today released new plugin, namely NoView.
It adds command @noview to disable the headgear views for users (Upper/Mid/Lower headgear views)
Link: https://github.com/dastgirp/HPM-Plugins/blob/master/src/plugins/noview.c
-
Kuroyama reacted to iCORE in HPTable with high Base lvl
http://pastebin.com/dxpD2rKZ All jobs upto level 400 HP and SP table hope it helps
* I use eA forumula
-
Kuroyama got a reaction from ratbugasmati in Help: Gusto ko i-up ulet yung server ko dati
Para sakin, mas better ang updated files etc. Since 2018 naman ang files mo, update mo lang ng unti kasi sobrang daming naimprove ng mga emulators ngayon in terms of securities and bug fixes.
-
Kuroyama reacted to Zeiyan in Utility: GM Tools
@charinfo
A @command (via script) that gives you and your GM Staff (GM level 2 NOT group level)information about Player account informations without having to login to phpmyadmin. I'm quite used to making very simple scripts but this is my first time to give back to the community and also my first time using sql query in scripts (in short i'm a newbie) Please leave comments about what you think . ( I use it on my own server so it includes checking if they have freebies received via account or via mac address)
You can choose to input Character name or Username
NOTE: I know the @accinfo almost do the same thing but i'm a big noob in source editing so i made this for my own use ( then i can include the stuff i want to display)
- script charinfo -1,{OnInit: bindatcmd "charinfo","charinfo::OnCharInfo", 0, 2; end;OnCharInfo: if(getgroupid() >= 2) { mes " [ Character Info ] "; mes " Hello GM ^00CC00"+strcharinfo(0)+"^000000!"; mes " What would you like to check? "; switch (select("Character Name:Username")) { case 1: input .@chrnm$; query_sql "SELECT `account_id` FROM `char` WHERE `name` = '" + .@chrnm$ + "'",.@acid; next; break; case 2: input .@acnme$; query_sql "SELECT `account_id` FROM `login` WHERE `userid` = '" + .@acnme$ + "'",.@acid; next; break; } query_sql "SELECT `userid`,`email`,`group_id`,`last_ip`,`birthdate`,`last_mac` FROM `login` WHERE `account_id` ='" + .@acid + "'", .@usrd$,.@eml$,.@ggm,.@lstip$,.@brtdy$,.@macad$; if ( .@ggm > 0 ) { mes "[ Account Information ]"; mes "GM Account Information are not available"; close; } else if ( .@acid < 2000000 || .@acid > 3000000 ) { mes "[ Account Information ]"; mes "Character Not Found"; close; } query_sql "SELECT `name`, `base_level`, `job_level` FROM `char` WHERE `account_id` =" + .@acid + " ORDER BY `base_level` DESC",.@chrlst$, .@blvl, .@jlvl; mes "[Character List]" ; for(set .@i, 0; .@i < getarraysize(.@chrlst$); set .@i, .@i + 1){ mes .@i+1+". ^00CC00"+.@chrlst$[.@i]+"^000000 "; mes "Level: "+.@blvl[.@i]+"/"+.@jlvl[.@i]+" "; } next; mes "[ Account Information ]"; mes "Account ID: "+.@acid; mes "Username: "+.@usrd$; mes "Email: "+.@eml$; mes "Last IP: ^00CC00"+.@lstip$+"^000000"; mes "Birthdate: "+.@brtdy$; mes "Mac Address: ^FF0000"+.@macad$+"^000000"; query_sql "SELECT `account_id`,`last_mac` FROM `freebies` WHERE `account_id` =" + .@acid + " ",.@rcvfrbs, .@lstmc$; if (.@rcvfrbs > 0) { set .@rcvfrbs, 1; } else { set .@rcvfrbs, 0; } if (.@rcvfrbs > 0) { set .@rcvfrbs$, "^00CC00Yes^000000"; } if (.@rcvfrbs == 0) { set .@rcvfrbs$, "^FF0000No^000000"; } mes "Freebies from account: "+.@rcvfrbs$; for(set .@i1, 0; .@i1 < getarraysize(.@lstmc$); set .@i1, .@i1 + 1){ set .@lstmc, .@lstmc +1; } if (.@lstmc < 1) { set .@lstmc$, "^FF0000No^000000"; } if (.@lstmc > 0) { set .@lstmc$, "^00CC00Yes^000000"; } mes "Freebies from MAC: "+.@lstmc$; close; }} 2. @ipinfo
This one displays all users (displays username) with login count and last login from IP address of a certain character (Input Character name)
- script ipinfo -1,{OnInit: bindatcmd "ipinfo","ipinfo::OnIPInfo", 2, 2; end;OnIPInfo: if(getgroupid() >= 2) { input .@chrnm$; query_sql "SELECT `account_id` FROM `char` WHERE `name` = '" + .@chrnm$ + "'",.@acid; query_sql "SELECT `last_ip`,`group_id` FROM `login` WHERE `account_id` ='" + .@acid + "'", .@lstp$, .@grplvl; query_sql "SELECT `account_id`,`userid`,`logincount`,`lastlogin` FROM `login` WHERE `last_ip` ='" + .@lstp$+ "'", .@acidlip, .@acidlip$, .@lgncnt, .@lstlgn$; if (.@acid < 2000000 || .@acid > 3000000) { mes "Character Not Found"; close; } if (.@grplvl > 0) { mes "GM Accounts Not Available"; close; } mes "Name: ^00CC00"+.@chrnm$+"^000000 "; mes "IP Address: ^FF0000"+.@lstp$+"^000000 "; next; mes "Displaying Users with IP: ^00CC00"+.@lstp$; next; for(set .@i, 0; .@i < getarraysize(.@acidlip$); set .@i, .@i + 1){ mes .@i+1+". ^00CC00"+.@acidlip$[.@i]+"^000000 "; mes "Login Count: "+.@lgncnt[.@i]+" "; mes "Last Login: "+.@lstlgn$[.@i]+" "; } close; }} 3. @macinfo
Same as @ipinfo except this one displays mac address information (if you have harmony or in my case have last_mac table)
- script macinfo -1,{OnInit: bindatcmd "macinfo","macinfo::OnMacInfo", 2, 2; end;OnMacInfo: if(getgroupid() >= 2) { input .@chrnm$; query_sql "SELECT `account_id` FROM `char` WHERE `name` = '" + .@chrnm$ + "'",.@acid; query_sql "SELECT `last_mac`,`group_id` FROM `login` WHERE `account_id` ='" + .@acid + "'", .@lstp$, .@grplvl; query_sql "SELECT `account_id`,`userid`,`logincount`,`lastlogin` FROM `login` WHERE `last_mac` ='" + .@lstp$+ "'", .@acidlmac, .@acidlmac$, .@lgncnt, .@lstlgn$; if (.@acid < 2000000 || .@acid > 3000000) { mes "Character Not Found"; close; } if (.@grplvl > 0) { mes "GM Accounts Not Available"; close; } mes "Name: ^00CC00"+.@chrnm$+"^000000 "; mes "Mac Address: ^FF0000"+.@lstp$+"^000000 "; next; mes "Displaying Users with Mac: ^00CC00"+.@lstp$; next; for(set .@i, 0; .@i < getarraysize(.@acidlmac$); set .@i, .@i + 1){ mes .@i+1+". ^00CC00"+.@acidlmac$[.@i]+"^000000 "; mes "Login Count: "+.@lgncnt[.@i]+" "; mes "Last Login: "+.@lstlgn$[.@i]+" "; } close; }}
-
Kuroyama reacted to malufett in Something bad happened. Report to an administrator ASAP.
try this edit 'module/account/create.php'
so that you can see the full details of the exception....
-
-
Kuroyama reacted to rans in How to hide bindatcmd on showing from @commands?
If the bindatcommand level is higher than the player level. it will not show
-
Kuroyama reacted to Mumbles in @go command
So the documentation for nowarpto is correct, then; lost track of what the original issue was for a sec lol.
In your last reply, you mentioned replacing mf_nowarp with mf_nowarpto:
} else if (getgroupid() < getarg(4) || getmapflag(getarg(0), mf_nowarp)) {
However, the intent of this line is to prevent warping if the player's Group ID isn't high enough OR if the destination has a nowarp flag, regardless of Group ID. You can bypass this for GMs by changing the expression a little (I'm sure there's a prettier way to do it, but I'm not feeling up to it):
} else if (getgroupid() < getarg(4) || getmapflag(getarg(0), mf_nowarp) && getgroupid() < getarg(4)) {
In regard to your original inquiry, the behaviour of nowarp is to prevent the use of @go to a destination; to prevent the use of @go from a map flagged with nowarp (despite this not being the intent of the nowarp flag), you can still prevent warping by adding an expression similar to my original suggestion:
} else if (getmapflag(strcharinfo(3), mf_nowarp)) { message strcharinfo(0), "You are not authorised to warp from this map.";
If you would like to prevent warping from specific maps, I would recommend moving forward with the filter/blacklist route — hell, you could even prevent both nowarp-flagged and specific maps from being warped to if you wanted to.
-
Kuroyama reacted to Aethelingaeg in Aethelingaeg's Plugin Collection
Hi, i cannot reproduce your problem. The command show a message as dispbottom, in green. Maybe you are in the wrong chat? Have you tried equiping your items? The command works as you reequip them to make them disappear, so only those that you reequip become invisible.
@UPDATE: I added the bElementDamage bonus! Please check the main post to see what it does.
-
Kuroyama reacted to Aethelingaeg in Aethelingaeg's Plugin Collection
Thank you for your feedback!
It was a encoding problem.
I updated it and replaced it with a english message.