GmOcean
-
Content Count
371 -
Joined
-
Last visited
-
Days Won
8
Posts posted by GmOcean
-
-
Well, I can get it to successfully show Fakename + Guild / Party name. However, the way herc stores fakenames differs from how rAthena does, so only making these changes results in a client crash when PMing the player while trying to use the fake name as the whisper name. I suggest, taking your request to src_request / plugin_request section as there are far more skilled people there willing to help. Sorry, this was too great a task for me :/
-
Malufett seems to have a working copy available in the form of a plugin O.o; Though, you'll have to pay for it through his paid service. But hey, since it's a plugin you'll never have to worry about it not working when server updates.
-
While, I do like how those commands would overly simplify things. I'm sorry to say that everything you just posted is possible using these commands: ( with the exception of making the monster an ally of a specified player ).
*unitwalk <GID>,<x>,<y>;*unitwalk <GID>,<target_GID>;*unitkill <GID>;*unitwarp <GID>,<Mapname>,<x>,<y>;*unitattack <GID>,<Target ID>;*unitstop <GID>;*unittalk <GID>,<Text>;*unitemote <GID>,<Emote>;*mobcount("<map name>","<event label>")
It would take a bit of thinking of how to map out the algorithms that would do all of that but it's possible already. The main benefit of your suggestion is the simplification of converting those algorithms into a single command that will do it for us.
Again like I said, I like that idea, I just don't think it would be added do to the fact we have such things :/
-
Right now, no. But it is possible to make a command to do that. At least from what I've seen about the channel system that is. However, our channel system here are Herc differs from rAthena from what I can tell. So I don't think that command you linked will be convertable :/
-
Update ~!!
Edit: Due to IP Board Limitations, I'll be slowly migrating these tutorials to my Scripting Academy Blog
so that this topic can continue. As scripts are fully transferred over, I'll be replacing the ones here with a link to the Blog Post. Essentially, this topic will continue to exist, how ever the tutorials will be located at my blog. Thank you for your patience and support.As of this posting, only Basic Healer & Buffer Script has been migrated. The next time I post an update here, will be to notify all followers of the FULL migration of scripts to my blog. Afterwards, I'll be continuing to make updates at this topic with links to new tutorials that have been completed at the blog.
Again, thank you for your patience and support.
-
I see, well I'll take a look at them later, and I'll see if I can port them to Hercules so you can make use of it.
Edit:
Okay, so I took a look at them, and it seems they could easily be converted to Hercules, however i'm not 100% sure if it'll work. And if it does work, you'll still have the same issues as Digos posted when he released the whisper patch. That is, if someone uses @fakename to disguise their name as an existing player name, they won't be PM-able since it checks for real names first then fake names.
Also last thing of note is, I could make a diff for the changes, but I'm too dumb to make them plugins xD. I don't know how to do the pre/post hooking yet.
-
Hmm, can you provide a link to this diff? I can't seem to find it. I can try taking a look at it and see if what they did can easily be applied to packet that deals with PMs.
-
So, you want to include [TAG] into a player's name, while also making it show Guild and Party. BUT, you don't want to have to type [TAG]PlayerName to PM them?
If so, then this currently can't be done with scripting alone as far as I know. You would need to edit the src as well so that the corresponding clif->packet that deals with PM / Public chat will ignore [TAG] as part of name when attempting to PM someone. And I'm not even sure how to do that, if I did I'd release a plugin allowing you to do just that. But, sorry I don't know how.
-
A system where mobs don't attack you while in PvP?
Could you explain more on what your request is.
-
err nvm, it does require compiling, but you only need to delete a // to enable it:
/*** when enabled, reflect damage doesn't bypass devotion (and thus damage is passed to crusader)* uncomment to enable**///#define DEVOTION_REFLECT_DAMAGE
just delete the // before #define DEVOTION_REFLECT_DAMAGE
and then recompile.
-
-
-
You could edit the src code so that Devotion works the way you want, but you'd need to ask for help in source_request section on the forums. I don't have the abilities to make those changes myself :/
-
Paladin's do not receive damage if it was caused through reflect. This holds true on official as well from what I can tell.
Also this has been addressed multiple times in the past and it's been noted it's working as intended after a few fixes in the past.
-
I've already talked to Stevler about that line as well, it was discussed that he would wrap it in an if() statement as well. It's just this was determined after he said the topic was solved.
-
Yes and No.
They are in the forums, but have not been sanctioned by the dev's, nor have they been officially released through src_release, download or plugin system.
You'd have to manually make all the changes yourself, and hope it doesn't break your server. I'm not sure if it still works on the newer revisions though.
-
wrap the mes command in an if() statement that checks against their BaseLevel to see if it's more than 50.
example:
if( BaseLevel > 50 ){ mes "..."; }
-
So, based on what you posted it should look like this:
OnClock2100:OnClock2200:OnClock2300:OnClock0000:OnClock0100:OnClock0200:OnClock0300:OnClock0400:OnClock0500:OnClock0600:OnClock0700:.Rounds = 5;callsub iRound5;end;OnClock0800:OnClock1000:OnClock1200:OnClock1400:OnClock1600:OnClock1800:OnClock2000: set .Rounds,10;iRound5: set .ResetCounter,.ResetCounter+1; set .EventON,1; set .Timer,1; set .Wait,1; announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue; announce "The Event is being held in Prontera.",bc_all | bc_blue; setnpctimer 0; initnpctimer; end;
-
I also agree, you can't use items above 32767 yet in Herc without making a few src modifications first.
-
I updated my post so it displays the proper cost.
Also, BaseLevel and JobLevel are constant variables, that will always have a set value.
These can be found in const.txt located in your db folder.
-
prontera,150,191,5, script Healer 641,{ mes "[^0000FF Healer ^000000]"; mes "Would you like to be healed?"; mes "^FF0000 *Note - It costs "+ (((BaseLevel + JobLevel) / 2) * 5) +" zeny to get healed.* ^000000"; if (select("Yea please.:No thank you.") == 2) { close;}if (Zeny < (((BaseLevel + JobLevel) / 2) * 5) && BaseLevel > 50) { mes "I'm sorry but you don't have enough zeny.";}if (BaseLevel > 50) { Zeny -= (((BaseLevel + JobLevel) / 2) * 5);}percentheal 100,100;close;}
O.o that should do it. Though it looks like you went through my topic to get this, glad it was of help somewhat
-
Okay, so 2 suggestions.
First, I think we should modify *getinventorylist; to push the equip-slot the item is equipped on rather than just passing 1 (equipped) or 0 (not-equipped).
Reason:
1) It'll still be compatible with existing scripts that use a boolean check to see if the item is equipped or not.
2) Currently using existing commands, you'd have to do several more checks + a loop just to confirm that the item in question is equipped on ' X ' slot.
3) It's just more beneficial to do so.
Below is a working src code for the changes, but I'm sure someone could write it better D:
BUILDIN(getinventorylist){ TBL_PC *sd=script->rid2sd(st); char card_var[NAME_LENGTH]; struct item_data *item; int id; int i,j=0,k,l; if(!sd) return true; for(i=0;i<MAX_INVENTORY;i++) { if(sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].amount > 0) { pc->setreg(sd,reference_uid(script->add_str("@inventorylist_id"), j),sd->status.inventory[i].nameid); pc->setreg(sd,reference_uid(script->add_str("@inventorylist_amount"), j),sd->status.inventory[i].amount); if(sd->status.inventory[i].equip) { for (k = 0; k < ARRAYLENGTH(script->equip); k++) { id = pc->checkequip(sd,script->equip[k]); item = sd->inventory_data[id]; if( item != 0 ){ if(item->nameid == sd->status.inventory[i].nameid) { pc->setreg(sd,reference_uid(script->add_str("@inventorylist_equip"), j),k+1); } } } } else { pc->setreg(sd,reference_uid(script->add_str("@inventorylist_equip"), j),0); } pc->setreg(sd,reference_uid(script->add_str("@inventorylist_refine"), j),sd->status.inventory[i].refine); pc->setreg(sd,reference_uid(script->add_str("@inventorylist_identify"), j),sd->status.inventory[i].identify); pc->setreg(sd,reference_uid(script->add_str("@inventorylist_attribute"), j),sd->status.inventory[i].attribute); for (l = 0; l < MAX_SLOTS; l++) { sprintf(card_var, "@inventorylist_card%d",l+1); pc->setreg(sd,reference_uid(script->add_str(card_var), j),sd->status.inventory[i].card[l]); } pc->setreg(sd,reference_uid(script->add_str("@inventorylist_expire"), j),sd->status.inventory[i].expire_time); pc->setreg(sd,reference_uid(script->add_str("@inventorylist_bound"), j),sd->status.inventory[i].bound); j++; } } pc->setreg(sd,script->add_str("@inventorylist_count"),j); return true;}
Second, I think it's about time we got a command for checking cart_inventory. I just don't see why we don't have one O.o; There's just no downside except having 1 extra command in script_commands.txt
Again, here's a write-up that's basically a copy+paste of *getinventorylist; (without the equip-slot modifications since equip will just return 0 anyways).
BUILDIN(getcartinventorylist){ TBL_PC *sd=script->rid2sd(st); char card_var[NAME_LENGTH]; int i,j=0,k; if(!sd) return true; for(i=0;i<MAX_CART;i++) { if(sd->status.cart[i].nameid > 0 && sd->status.cart[i].amount > 0) { pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_id"), j),sd->status.cart[i].nameid); pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_amount"), j),sd->status.cart[i].amount); pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_equip"), j),sd->status.cart[i].equip); pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_refine"), j),sd->status.cart[i].refine); pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_identify"), j),sd->status.cart[i].identify); pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_attribute"), j),sd->status.cart[i].attribute); for (k = 0; k < MAX_SLOTS; k++) { sprintf(card_var, ".@cartinventorylist_card%d",k+1); pc->setreg(sd,reference_uid(script->add_str(card_var), j),sd->status.cart[i].card[k]); } pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_expire"), j),sd->status.cart[i].expire_time); pc->setreg(sd,reference_uid(script->add_str(".@cartinventorylist_bound"), j),sd->status.cart[i].bound); j++; } } pc->setreg(sd,script->add_str(".@cartinventorylist_count"),j); return true;}
-
*setriding {<flag>};
*checkriding()
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ /! This command is deprecated @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
This command is deprecated and it should not be used in new scripts, as it
is scheduled to be removed on or after November 30th, 2014. Please consider
using setmount and checkmount() instead.
It's just letting you know you're using a command that will be removed in the (very)near future.
So you should use these commands instead: *setmount {<flag>}; & *checkmount()
-
Updated ~!!
- Formatting, and revision suggested to make things simpler. ( Special thanks: Haru ).
@Litro -
This has been suggested before, but it probably won't be done until I decide to release each script as a separate public release available for download. Which in turn, would create a support/release topic for each one. But I'm holding off on that for now, else people would just continue to download scripts of interest instead of learning them. Even though I post the finished product here, they will end up reading at least 5% of what I wrote, perhaps making them want to learn more D: ( who knows, just wishful thinking xD ).
@bidolay145 -
While I don't mind helping with something like that, please make a support / request topic with your issue/request.
If you have any questions or concerns with the scripts posted here, then those can be addressed within this topic.
as a side note, I'll write a tutorial for a script based on just the little information provided. When it's done you can check here for it if no one was able to help you before hand.
- Thank you D:
Screenshots gone Haywire?
in Client-Side Support
Posted
Same here, I was able to fix it by just changing my resolution in setup.exe.
Additionally, you mentioned a slight lag/freeze before taking a screenshot... As far as I know, this has always been the case with RO screen shots.
I highly doubt it's a computer power problem since our computers have been increasing in ablility at an exponential rate, while RO hasn't changed that feature at all D: