Jump to content

GmOcean

Community Contributors
  • Content Count

    371
  • Joined

  • Last visited

  • Days Won

    8

Posts posted by GmOcean


  1. 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:


  2. 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 :/


  3. 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 :/


  4. 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.


  5. 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.


  6. 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.


  7. 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.


  8. 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 :/


  9. 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.


  10. 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;

  11. 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 :D


  12. 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;}

     

     


  13. *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()


  14. 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:

×
×
  • Create New...

Important Information

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