Garr
Members-
Content Count
482 -
Joined
-
Last visited
-
Days Won
8
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by Garr
-
Both? I found the wolf head one in data.grf The SC_STOP one is At least if I didn't make a mistake somewhere.
-
Sigh. tl:dr; He wants to make an effect show when skill is active, and for it to disappear when the skill is turned off. Currently a question's raised: can effect on status being active be edited into client without hexing (Like custom status icons, per se)?
-
Well, I'm not really familiar with client-side editing, so there might be a way to add some kind of effect on sc, like it's possible to add icon for custom scs. (My opinion is that those effects are hardcoded). Imo you'll still get more luck trying to figure it client-side rather than server-side. Good luck anyway.
-
Sigh. You didn't get my point. Effects are not done server side. They can be initiated there, and most are, but at the same time all the work on effects is done on client. It's NOT connected to server when they end. The client decides. No matter what you do, whatever variable server-side you reset, it won't affect client-side variables. As I was saying, server can send a packet for client to "reset screen", on which much info is lost, including effects (check clif_refresh, it's the screen resfreshing, and resending the "lost variables" back to client). It's just either you reset everything, or nothing here. No middle ground. So if you can edit the client itself so it could receive some custom packet you make and stop the effect, then go for it. Meddling server-side won't bring you any good. And as I said, steelbody effect will show as long as you have SC_STEELBODY active on character. Just make a script to grand character SC_STEELBODY and you'll see yourself. It's the same as these fancy headgears.
-
I bet many people do, but the thing is effects are set and removed on the client side, so without getting into the client you're pretty much screwed. The reason why effects disappear after map change, @refresh and such is because of "screen reset" that's happening (If you check the code, screen effects are not the only thing client "loses" on screen refresh). I think it's also client-side for Steel Body, since for as long as status is active, client will show the effect. It doesn't matter how you got the status even, be it skill or script.
-
Change that monster strnpcinfo( 4 ), -1, -1, "--ja--", 1708, strnpcinfo( 1 ) + "::OnSummon"; to getmapxy .@m$, .@x, .@y,1;monster strnpcinfo( 4 ), .@x, .@y, "--ja--", 1708, strnpcinfo( 1 ) + "::OnSummon"; Then Thanatos will appear on NPC's cell. Feel free to edit .@x and .@y to the cell you want, or you can edit them with +- so you can duplicate it freely Like this: getmapxy .@m$, .@x, .@y,1;monster strnpcinfo( 4 ), .@x+1, .@y-1, "--ja--", 1708, strnpcinfo( 1 ) + "::OnSummon";
-
You do realize that it summons MVP on random cell on map?
-
Help with an old Script, will let you use it if you can fix it
Garr replied to Aeromesi's question in Script Support
Wow, now that looks fun. I'm up to help especially since there are holidays ahead (for me they are still ahead). /no1 -
But he did mention it in the opening post. First two lines...
-
Stop "Magnus Exorcismus" damage after Fly Wing (or out of range)
Garr replied to Nebraskka's question in Source Requests
Try to do this in src/map/skill.c: int skill_attack(int attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag) {... nullpo_ret(src); // Source is the master behind the attack (player/mob/pet) nullpo_ret(dsrc); // dsrc is the actual originator of the damage, can be the same as src, or a skill casted by src. nullpo_ret(bl); //Target to be attacked. if (src != dsrc) { //When caster is not the src of attack, this is a ground skill, and as such, do the relevant target checking. [Skotlex] if (!status->check_skilluse(battle_config.skill_caster_check?src:NULL, bl, skill_id, 2)) return 0; if( skill_id == PR_MAGNUS && !check_distance_bl(src,dsrc,battle_config.area_size) ) //If distance between "damage source" ME and "source" aka player exceeds view range, it has no effect. return 0; }...} Add the 2nd check, the one with if( skill_id == PR_MAGNUS ...) Not tested, sorry. -
Disabling auto respawn on death in pvp maps.
Garr replied to anjasoleil0's question in Source Requests
Try to comment these lines in src/map/skill.c: int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag) {... case ALL_RESURRECTION: /* if(sd && (map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground)) { // Comment starting here //No reviving in WoE grounds! clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; } */ // To here...} Also, for PvP try to change all return 1|8; to return 0; after the commented lines. I think that should do the trick. Yet again, lazy to test -
It's pretty simple, first thing you'll need to know is that max for tick_def is 10000 (100%). Out of this and luk that you want immunity on you solve simple equation: x = 10000 / ChosenLuk; After that just change this line: tick_def = st->luk*40; to tick_def = st->luk*x; Where x is the result of equation. Example: You want immunity on 300 luk, that means x = 10000 / 300; x = 34; (It's for you to decide where to round, up or down. I rounded up. That measn that actual luk you'll need for immunity is 295. If you round it down, then needed luk will be 303) So the resulting line will be: tick_def = st->luk*34;
-
Sigh. The example above will give you at least 2 compiling errors. case SC_FREEZE: sc_def = st->mdef*100; sc_def2 = st->luk*10 + SCDEF_LVL_DIFF(bl, src, 99, 10); tick_def = st->luk*40; Try this one, should reduce it in % manner. Every 25 luk will reduce duration by additinal 10%. Like this: 25 luk -> 10% freeze time reduction 50 -> 20% 75 -> 30% and so on. On 250 you'll reach immunity.
-
Disabling auto respawn on death in pvp maps.
Garr replied to anjasoleil0's question in Source Requests
int pc_dead(struct map_session_data *sd,struct block_list *src) {... // pvp // disable certain pvp functions on pk_mode [Valaris] if( map->list[sd->bl.m].flag.pvp && !battle_config.pk_mode && !map->list[sd->bl.m].flag.pvp_nocalcrank ) { sd->pvp_point -= 5; sd->pvp_lost++; if( src && src->type == BL_PC ) { struct map_session_data *ssd = (struct map_session_data *)src; ssd->pvp_point++; ssd->pvp_won++; } if( sd->pvp_point < 0 ) { timer->add(tick+1, pc->respawn_timer,sd->bl.id,0); // Comment this line if you want to disable respawning in PvP return 1|8; } } //GvG if( map_flag_gvg2(sd->bl.m) ) { timer->add(tick+1, pc->respawn_timer, sd->bl.id, 0); //Comment this line if you want to disable respawn in WoE return 1|8; } else if( sd->bg_id ) { struct battleground_data *bgd = bg->team_search(sd->bg_id); if( bgd && bgd->mapindex > 0 ) { // Respawn by BG timer->add(tick+1000, pc->respawn_timer, sd->bl.id, 0); //Comment this line if you want to disable respawn in BG return 1|8; } }...} Comment the lines as told in src/map/pc.c. Untested, but i think it should work. -
Wait wait wait. According to the code you gave there was no reduction to the freeze time whatsoever, just after 250 luk you were pretty much immune to the status change. Like with curse and 100 vit - status still strikes, but is removed same moment. Can you clearify what do you want? So that luk would bring linear reduction to freeze time? Or % reduction? How much each point of luck should reduce?
-
Umm, tick_def is the reduction. In your case, you just set it up to 0 Of course it had no effect. Try it like this: case SC_FREEZE: sc_def = st->mdef*100; sc_def2 = st->luk*10 + SCDEF_LVL_DIFF(bl, src, 99, 10); tick_def = (st->luk>249)?10000:0;
-
I think you need these settings fixed in conf/char-server.conf // Manage possible letters/symbol in the name of charater. Control character (0x00-0x1f) are never accepted. Possible values are:// NOTE: Applies to character, party and guild names.// 0: no restriction (default)// 1: only letters/symbols in 'char_name_letters' option.// 2: Letters/symbols in 'char_name_letters' option are forbidden. All others are possibles.char_name_option: 1// Set the letters/symbols that you want use with the 'char_name_option' option.// Note: Don't add spaces unless you mean to add 'space' to the list.char_name_letters: abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
-
There's a tool made just for that, called Unbollox. As an alternative, you can create a new grf and place it inside, as the korean named sprites are recognized inside of grf, and add that grf to your client readings.
-
Try this out. prontera,154,186,6 script Daddy Christmas 718,{ mes "[Daddy Christmas]"; mes "Hello there!"; mes "Ho! Ho! Ho!"; mes "Have you been naughty or nice this year?"; next; if (select("I've been nice,Daddy Christmas.:Naughty, you fat prick!.") == 2) { mes "[Daddy Christmas]"; mes "See you around."; close; } else { mes "[Daddy Christmas]"; mes "Very well then!Since you have been nice this year, I will let you enjoy the presents I have in my bag. Here, take a look:"; next; mes "[Daddy Christmas]"; mes "So which one would you like to have?"; next; switch(select("10x Santa Bag:1x Goblin Egg:1x Santa Poring Hat")) { case 1: mes "[Daddy Christmas]"; mes "For the Santa Bag, you’ll need to bring me the following:"; mes "^00FF0010x Well-baked cookie^000000"; mes "^00FF0010x Candy Cane^000000"; mes "^00FF0010x Candy^000000"; mes "^00FF005x Poring Doll^000000"; mes "^00FF001x Santa Hat^000000"; next; mes "[Daddy Christmas]"; mes "Let me check if you have all that I need."; if (select("Yes!:Not Yet!.") == 2) { mes "[Daddy Christmas]"; mes "See you around."; close; } if( countitem(2236) < 1 || countitem(538) < 10 || countitem(530) < 10 || countitem(529) < 10 || countitem(741) < 5 ) { mes "You don't have the requirements."; close; } else { mes "[Daddy Christmas]"; mes "Exactly what I wanted. Here’s your present! Merry Christmas! Ho! Ho! Ho"; delitem 2236, 1; delitem 538, 10; delitem 530, 10; delitem 529, 10; delitem 741, 5; getitem 12132, 10; close; } case 2: mes "[Daddy Christmas]"; mes "For the Christmas Goblin Egg, you’ll need to bring me the following:"; mes "^00FF001x Santa Hat^000000"; mes "^00FF0020x Star Dust^000000"; mes "^00FF0020x Old Broom^000000"; mes "^00FF0010x Witched Starsand^000000"; mes "^00FF0010x Rainbow Carrot^000000"; next; mes "[Daddy Christmas]"; mes "Let me check if you have all that I need."; if (select("Yes!:Not Yet!.") == 2) { mes "[Daddy Christmas]"; mes "See you around."; close; } if( countitem(2236) < 1 || countitem(1148) < 20 || countitem(637) < 20 || countitem(1061) < 10 || countitem(622) < 10 ) { mes "You don't have the requirements."; close; } else { mes "[Daddy Christmas]"; mes "Ho ho ho! *cough *cough"; delitem 2236, 1; delitem 1148, 20; delitem 637, 20; delitem 1061, 10; delitem 622, 10; getitem 9029, 1; mes "[Daddy Christmas]"; mes "Exactly what I wanted. Here’s your present! Merry Christmas! Ho! Ho! Ho"; close; } case 3: mes "[Daddy Christmas]"; mes "For the Santa Poring Hat, you’ll need to bring me the following:"; mes "^00FF001x Santa Poring Card^000000"; mes "^00FF0010x Wrapping Paper^000000"; mes "^00FF0010x Wrapping Lace^000000"; mes "^00FF00Santa Hat^000000"; mes "^00FF001x Stellar^000000"; mes "^00FF00100x Fabric^000000"; mes "^00FF001x Event Ticket^000000"; next; mes "[Daddy Christmas]"; mes "Let me check if you have all that I need."; if (select("Yes!:Not Yet!.") == 2) { mes "[Daddy Christmas]"; mes "See you around."; close; } if( countitem(4005) < 1 || countitem(7175) < 10 || countitem(7174) < 10 || countitem(2294) < 1 || countitem(2236) < 1 || countitem(1059) < 100 || countitem(30802) < 1 ) { mes "You don't have the requirements."; close; } else { mes "[Daddy Christmas]"; mes "Exactly what I wanted. Here’s your present! Merry Christmas! Ho! Ho! Ho"; delitem 4005, 1; delitem 7175, 10; delitem 7174, 10; delitem 2294, 1; delitem 2236, 1; delitem 1059, 1; delitem 3082, 1; getitem 5381, 1; close; } } }close;}
-
If this is still relevant, you might want to know that Hercules is caching the packages, which can be the issue here. Open your server folder, and delete file cache/(pre-)re/item_packages.conf. That way it should read the package file anew. Not tested, so can't say for sure that it will help.
-
I can't help you with 1st one without more info (did you alter it? Are you using Hercules? Latest version of it?). But about 2nd one, when you execute map/login/char servers, or all servers at once, use this: bash map-server.sh(char-server.sh/login-server.sh/athena-start) start > path/to/log.txt 2>&1 For you starting all servers at once with path you provided would look like bash athena-start start > /var/log/hercules.txt 2>&1 If you want the file not to be restarted every time you restart servers, you can change it into bash athena-start start >> /var/log/hercules.txt 2>&1 Then it will append the current session to the previous one. But be warned, it can grow way too big if you'll use that.
-
Trade: { (defaults to no restrictions) override: GroupID (int, defaults to 100) }
-
As I said, altering the group_id is useless while character is online, and by your script he's online during your queries. The thing is, it DOES alter the login table, but when the player logs off or some time passes, his group will reset to 0, as it is initialised in his session data. That's why I offered you to kick the player, and then perform queries on the login table.
-
Umm, corect me if I'm wrong, but isn't performing queries on online character data is useless? It'll get resaved again on log off. I think you'd be better off kicking the character before sql query. mes "Okay!";.@account_id = getcharid(3);.@usedPoints = 3;.nivelVip = 1;.diasVip = 1;$verificaVip = 1;query_sql("UPDATE `cp_v4p_voters` SET points=(points-"+.@usedPoints+") WHERE account_id='"+.@account_id+"'");atcommand "@kick " + strcharinfo(0);if (getgroupid() == 0){query_sql "UPDATE `login` SET `group_id` = "+.nivelVip+", `dt_vip` = DATE_ADD(`dt_vip`,INTERVAL "+.diasVip+" DAY) WHERE `group_id` = "+.nivelVip+" AND `account_id` = "+getcharid(3);} else {query_sql "UPDATE `login` SET `group_id` = "+.nivelVip+", `dt_vip` = DATE_ADD(`dt_vip`,INTERVAL "+.diasVip+" DAY) WHERE `group_id` = "+.nivelVip+" AND `account_id` = "+getcharid(3);}end;
-
No, I mean if all 3 servers (login, map and char) are running on the same PC (like you're doing with starting run-server.bat), you'll do a better job connecting them via localhost, instead of sending them out to first DNS server that will guide them right back where they came from. That prevents multiple problems with firewalls, routers, and whatever else connection side may bring at you.