Jump to content

Mumbles

Members
  • Posts

    127
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by Mumbles

  1. I'm aware that /am is a client-side command, but is there anything server-side that can be done to prevent this command from being used? When two players are /am and PM each other, they run an endless loop of automated messages to each other.
  2. Sigh. I mean, the logic seems right in either case; why *Athena doesn't already support variables in item scripts by now is beyond me. ;~; Brian, halp!
  3. Can we use variables in item scripts? o3o if(Class == Job_Assassin || Class == Job_Assassin_Cross) { for(set @var,rand(908,909); countitem(@var) > 0; set @var,rand(908,909) do(bonus2 bAddMonsterDropItem,@var,200;) } I'm at school so I can't exactly test this til later today. Halp ;~;
  4. I'd like to know if such a result is possible: if(Class == Job_Assassin || Class == Job_Assassin_Cross) { bonus2 bAddMonsterDropItem,908,200; || bonus2 bAddMonsterDropItem,909,200; } The objective is: [Assassin, Assassin Cross] Add a 20% chance of gaining 'Jellopy' or 'Spawn' when a monster is killed. Please note this is simply an example. The key word here is "or", with the goal of adding a chance to gain either a Jellopy or Spawn; not a chance to gain both.
  5. Well, I've used @loadnpc to load in new mapflags settings from trunk/conf/mapflag/ before, so that's why I mentioned it. Unfortunately, @reloadbattleconf still appears to have no effect on changes I've made, but thanks for clarifying which folder it should reload.
  6. Which files do @reloadbattleconf actually affect? Is there a way I can reload ~/conf/battle/monster.conf without restarting the server? Running the command and @loadnpc appear to have no effect on that file.
  7. True, in the sense you don't mind sacrificing 1:1 chat windows. That isn't the case here, however.
  8. This is a long dead topic, but I'd like to revive it since I need a bit of help with this myself. Currently, I do not know of a way to completely disable the message; a workaround would be to change this line in your client's data/msgstringtable.txt This character is not your guildsman. Please check the name again.# to this: # Doing so returns no message, but instead creates a line break in your chat window; if you're in a busy conversation with someone via whisper, the line breaks still flood your chat. If you completely remove the line and leave it empty (or otherwise lacking a # symbol), it displays the next message instead. Is there a way to prevent the client from wanting to read that line? @_@
  9. Edit groups.conf in your trunk/conf/ folder. Apply the commands you want to Group ID 0 and define them as true. See the example below. { id: 0 /* group 0 is the default group for every new account */ name: "Player" level: 0 inherit: ( /*empty list*/ ) commands: { /* informational commands */ commands: true charcommands: true help: true rates: true uptime: true showdelay: true exp: true mobinfo: true iteminfo: true whodrops: true time: true jailtime: true hominfo: true homstats: true showexp: true showzeny: true whereis: true } permissions: { /* without this basic permissions regular players could not trade or party */ can_trade: true can_party: true } }, { id: 1 name: "Super Player" inherit: ( "Player" ) /* can do everything Players can and more */ level: 0 commands: { /* feature commands */ refresh: true noask: true noks: true main: true autoloot: true alootid: true autotrade: true request: true go: true breakguild: true } permissions: { } }
  10. I recently made a modification to my source in skill.c, where I allowed a menu bypass for Level 2 Teleport. I made this simple modification: - if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skilllv == 1 ) || skilllv == 3 ) + if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skilllv == 1 ) || skilllv > 1 ) My goal of having the Level 2 menu skip was achieved; however, I managed to break the configuration for player invincibility upon spawn. As it is, my player_invincible_time in player.conf no longer works; I have set to 6000 milliseconds, but you can now be hit upon spawn - likely before your client even fully loads the map. Here's the remaining section of the code: if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skilllv == 1 ) || skilllv > 1 ) { if( skilllv == 1 ) pc_randomwarp(sd,CLR_TELEPORT); else pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT); break; } clif_skill_nodamage(src,bl,skillid,skilllv,1); if( skilllv == 1 ) clif_skill_warppoint(sd,skillid,skilllv, (unsigned short)-1,0,0,0); else clif_skill_warppoint(sd,skillid,skilllv, (unsigned short)-1,sd->status.save_point.map,0,0); Now, I figured at this line - clif_skill_nodamage(src,bl,skillid,skilllv,1); - it checks the timer for the player invincibility. Do I need to add this line within the first condition's output, or...? I'm at a bit of a loss. Any help is appreciated; thanks in advance.
  11. Hey Balmung, Give this a go; should suit exactly what you needed for your coin exchanger. exc.txt // Coin Exchanger // by Via prontera,138,171,5 script Via 704,{ set .Coin,909; // Coin ID set .Coin2,908; // Lesser Coin ID set .ExcName$, "[^FF5555Via^000000]"; // NPC Name set .ExcCoin,1; // Exchange Rate for Coin set .ExcCoin2,10; // Exchange Rate for Lesser Coin mes .ExcName$; mes "Welcome, " + strcharinfo(0) + "."; mes "I can exchange your coins for you."; next; switch( select("Exchange Coins:View Rewards") ) { case 1: mes .ExcName$; mes "Exchange rates are " + .ExcCoin + " " + getitemname(.Coin) + " per " + .ExcCoin2 + " " + getitemname(.Coin2) +"."; mes " "; mes "How many " + getitemname(.Coin) + " would you like?"; next; input .@Exchange; if(countitem(.Coin2) < .@Exchange*.ExcCoin2) { mes .ExcName$; mes "I'm sorry, but you don't have enough " + getitemname(.Coin2) + " for that many " + getitemname(.Coin) + "."; mes " "; mes "Talk to me again when you have at least " + .@Exchange*.ExcCoin2 + " " + getitemname(.Coin2) + " in your inventory."; close; } mes .ExcName$; mes "Looks like you have enough! Are you sure you want to exchange " + .@Exchange*.ExcCoin2 + " " + getitemname(.Coin2) + " for " + .@Exchange + " " + getitemname(.Coin) + "?"; next; if( select("Yes, let's trade!:No, thanks") == 2 ) { mes .ExcName$; mes "Okay. Come again if you change your mind."; close; } if( .@Exchange*.ExcCoin2 > countitem(.Coin2) ) { mes .ExcName$; mes "What's this? Have you lost your purse? Come back when you've got proper funds."; close; } delitem .Coin2,.@Exchange*.ExcCoin2; getitem .Coin,.@Exchange; mes .ExcName$; mes "Here you go! Use your " + getitemname(.Coin) + " wisely!"; close; case 2: setarray .@Items[0], 503, 504, 505; setarray .@Amount[0], 1, 1, 1; setarray .@Value[0], 1, 1, 1; break; } set .@Menu$, ""; for( set .@i, 0; .@i < getarraysize(.@Items); set .@i, .@i + 1 ) set .@Menu$, .@Menu$ + .@Amount[.@i] + " " + getitemname(.@Items[.@i]) + " (" + .@Value[.@i] + " " + getitemname(.Coin) + "):"; set .@j, select(.@Menu$) - 1; mes .ExcName$; mes "How many " + getitemname(.@Items[.@j]) + " do you want to buy? (1 - 50)"; mes " "; mes "It will cost you " + .@Value[.@j] + " " + getitemname(.Coin) + " each."; next; input .@total; if( .@total < 1 || .@total > 50 ) { mes .ExcName$; mes "I'm sorry; please input a value from 1 to 50. Talk to me again when you've made a selection."; close; } set .@vtotal, .@total * .@Value[.@j]; // Value of all items set .@total, .@total * .@Amount[.@j]; // Total Amount of Items // Check Weight Limit if( checkweight(.@Items[.@j],.@total) == 0 ) { mes .ExcName$; mes "It seems that you would be overweight from this sale. Talk to me again after you've placed items in storage."; close; } if( countitem(.Coin) < .@vtotal ) { mes .ExcName$; mes "You do not have enough " + getitemname(.Coin) + ". Participate in events to receive them."; mes " "; mes "Required " + getitemname(.Coin) + ": ^0000FF" + .@vtotal + "^000000"; close; } set .@vcount, .@vtotal; set .@i909, countitem(.Coin); if( .@i909 > .@vcount ) set .@i909,.@vcount; set .@vcount, .@vcount - .@i909; // Final Checks if( .@vcount != 0 ) { mes .ExcName$; mes "Sorry, not enough coins to pay the total value."; close; } mes .ExcName$; mes "To confirm your purchase, you are exchanging ^0000FF" + .@i909 + "^000000 "+ getitemname(.Coin) + " for " + .@total + " " + getitemname(.@Items[.@j]) + ". Is this correct?"; next; if( select("Yes, bring me my " + getitemname(.@Items[.@j]) + "!:No, that's not what I wanted") == 2 ) { mes .ExcName$; mes "Okay. Come again if you change your mind."; close; } if( .@i909 > countitem(.Coin) ) { mes .ExcName$; mes "What's this? Have you lost your purse? Come back when you've got proper funds."; close; } delitem .Coin,.@i909; getitem .@Items[.@j],.@total; mes .ExcName$; mes "Here you go! Use your " + getitemname(.@Items[.@j]) + " wisely!"; close; } You can adjust the NPC's name, coin Item IDs, and exchange rates by modifying the values in these lines: set .Coin,909; // Coin ID set .Coin2,908; // Lesser Coin ID set .ExcName$, "[^FF5555Via^000000]"; // NPC Name set .ExcCoin,1; // Exchange Rate for Coin set .ExcCoin2,10; // Exchange Rate for Lesser Coin Change the Item IDs, amounts, and values in these arrays. case 2: setarray .@Items[0], 503, 504, 505; setarray .@Amount[0], 1, 1, 1; setarray .@Value[0], 1, 1, 1; break; That was so helpful; you totally deserve a +1, and I would definitely recommend you and your services to all of my friends. /sarcasm, if you were too thick to figure that out yourself.
  12. I'd like to be able to use a bindatcmd that can globally kill all MVPs without having to visit each individual map. The reason for this is to allow for use of @reloadscript without worry about MVPs respawning; I'm aware of @loadnpc and @unloadnpc, mind you. I need a Battlegrounds script to be reset without reviving all the dead MVPs; any help is appreciated. Thanks.
  13. I've decided to use this extension on my own board, and it works great - short of one little problem. For some reason, changing the topic prefix using the Topic Multi-Moderation extension deletes the previous prefix and does not apply the new one; if there was no prefix to begin with, there is no problem. In the Admin CP, you're able to create a new Topic Multi-Moderation extension and select what prefix you'd like to append to the topic; you're able to simply remove all topic prefixes as well. Below is topic_prefixes.xml of the extension; if someone could point out the string that removes all topic prefixes and the string that appends the new prefix, it would be really helpful. I would like to be able to add the string the removes all topic prefixes right before where it appends the new one. Pastebin link: http://pastebin.com/NBg5KGZq
  14. Although this returned no errors, it did not function as expected; players are still able to see a GM online who is not @hide, even when I defined hide_GM_sessionLv in gm.conf. I feel like the answer is right around the corner, though. Thanks for your efforts so far guys.
  15. No, what I'm requesting is that an adjustment be made to hide_GM_session so that you can set a minimum level (in eAthena) or group (in rAthena) to be hidden from @who without the GM being required to use @hide. The way it currently works, you can choose yes or no (1 or 0) as values; if you chose yes, hide_GM_session would hide all online GMs. What I'm aiming for is the ability to define the levels/groups hidden. For example, if hide_GM_session was set to 90, all GMs of that command level and higher will be hidden from @who display, regardless of whether or not they use @hide; in rAthena, this would be so that a specific GM group (or groups) would be hidden from @who display. I actually wanna take a look at this myself and see if I can come up with something, but I figured it'd be sensible to ask help from people with more experience than me lol. Someone please correct me if I'm wrong, but this did not work. Did you test this before you posted it? if ( pl_GM_level == ? ) continue; I'm guessing this ? is supposed to be replaced with a number input directly into the source; however, wouldn't it be more convenient to add a check for what was defined for hide_GM_session check if the value defined for hide_GM_session => the GM levels of the players being parsed if this is true, continue to hide the online status
  16. I'd like to request an eAthena source modification regarding online GM sessions. This was previously asked and partially answered back on the old eAthena boards; the difference this time is that I'd like for GMs of a certain level (i.e., developers) to be hidden from @who, even when they are not @hide. What I think would work would be an adjustment to the script that backs hide_GM_session, so that instead of a yes/no option that completely hides all GMs online, allow a number value to be set that defines the minimum level of the GMs being hidden; in rAthena, this could be changed to hide a GM group or an array of groups. Notice: I apologize to those of you who are displeased with requests for eAthena support on the rAthena forum. However, I find that rAthena's boards thrive in activity with the many of you who provide constructive input and working solutions. Thank you all for the help you've given and continue giving. It's amazing seeing what's been accomplished over the last few years.
  17. Correct, in this setup there is only 1 login server, so only one set of login-server configurations. In order to limit who can login to the 2nd char/map server, you need to limit it at the char-server or map-server level. How about in trunk/conf/char_athena.conf // Maximum users able to connect to the server. Set to 0 for unlimited. max_connect_user: 0 // Group ID that is allowed to bypass the server limit of users. // Default: -1 = nobody (there are no groups with ID < 0) // See: conf/groups.conf gm_allow_group: -1 You could set max_connect_user to 1, then use gm_allow_group to allow GMs to override that limit? The only problem I found with that was that a single player could be online if they wanted to, so I just set char_new to 0 to disable character creation. Thanks for that clarification Brian, you've been really helpful. c:
  18. So now that I've got my second channel running as I intended, the last thing I'd like to do is limit who can access it. I figured this would be a simple fix by adding a new value for min_level_to_connect in ~/conf/import/login_conf.txt, but normal players are still able to access the second channel after server restart. My guess is that since my second channel shares the login server with my first channel, it's not importing my login settings. Did I miss something?
  19. For some reason, running those scripts doesn't stop the server, though it tells me it did. I'm using this athena-script to launch my servers, and the scripts your provided didn't kill those processes. Should I tweak my athena-script with the scripts you gave me? What am I missing?
  20. Mumbles

    @sit

    Thanks Brian, that's perfect!
  21. So I was able to setup a second channel as per BrianL's guide on the old eAthena boards, and it works great! However, I've come across an issue where if I run the command ./athena-start start, stop, or restart, it restarts both channels; my goal is to be able to work on the second server on the same machine while utilizing the ease of access two channels provides. Any help would be appreciated; Brian, I hope you see this!
  22. Perhaps you misunderstood the meaning of pre-renewal?
  23. Does anyone have a copy of a pre-renewal itemdesctable.txt? I'm really not looking forward to manually editing a couple thousand item descriptions. :|
×
×
  • Create New...