GmOcean
Community Contributors-
Content Count
371 -
Joined
-
Last visited
-
Days Won
8
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by GmOcean
-
Uhh, if this is the issue, then what you need to do is just make 2 different SC_'s. First SC_MAXIMIZE give the buff the player receives. Second SC_WHATEVER show the effect for X seconds, by simply making it last for X seconds. This would solve your problem. So, when they use the skill, have it set 2 effects to them. As it is now, SC_MAXIMIZE doesn't have a visual effect so it'll still last as long as it should. And since you managed to have the client display a custom effect, you can just have it display it for a few seconds using a separate SC_effect. For example: Cast Maximize in game ( on a normal client/server ). Then, cast a skill that has a limited visual effect such as, Assumptio. All you need to do is merely make the second sc_effect not provide buffs but rather just display the effect.
-
This seems to be an issue regarding clients and the langtype you chose to run them on, in your clientinfo.xml. Try changing it to 0, or 1, or 21. If that doesn't work, there are other things to try, but these are the ones that made it work for other people.
-
Why not just use /effect ? Doesn't this just turn effects off? If not, you can try this, but not sure if it'll work as you want it to, think it's user based: Well, simplest way would be to assign a variable to a player, and then just end execution before the effect is displayed. For the command, just add this in there. This will set a player's variable to 1 to turn effects off, or 0 to turn effects back on. if (pc_readglobalreg(sd, script->add_str("disable_effect"))) pc->setregistry(sd, script->add_str("disable_effect"),0;else pc->setregistry(sd, script->add_str("disable_effect"),1; Then, for clif_speacialeffect, all you need to do is add a check to see if they have the variable set to 1. If it is, you just end the execution early, so that no effect is displayed, but if it's 0, then continue with execution. void clif_specialeffect(struct block_list* bl, int type, enum send_target target){unsigned char buf[24];nullpo_retv(bl);if (pc_readglobalreg(sd, script->add_str("disable_effect"))) return;memset(buf, 0, packet_len(0x1f3));WBUFW(buf,0) = 0x1f3;WBUFL(buf,2) = bl->id;WBUFL(buf,6) = type;clif->send(buf, packet_len(0x1f3), bl, target);if (disguised(bl)) {WBUFL(buf,2) = -bl->id;clif->send(buf, packet_len(0x1f3), bl, SELF);}} Like I said, this is the easiest way, but truthfully, I don't think this will work as you want. If i'm not mistaken, all this will do is prevent that selected player, from using the effect. In other words, when he/she uses a skill, no effect will show, but if another player uses a skill, then theirs will show.
-
Sorry, I keep forgetting that the function "Time2Str" already uses gettimetick(2), so it's cancelling out the time with each other. I updated my first post, with the fix.
-
Disable item consumption when hp and sp are full
GmOcean replied to Phenex's question in Script Support
It depends, if you want it to work for ALL healing items, then your best bet is a src edit. However, if you only want to make a select few items have this effect, you can do so with script code. Example of the latter: This is the original Item for 607 (Yggdrasilberry). { Id: 607 AegisName: "Yggdrasilberry" Name: "Yggdrasil Berry" Type: 0 Buy: 5000 Weight: 300 BuyingStore: true Delay: 5000 Script: <" percentheal 100,100; ">}, This is the modified version to fit your request: { Id: 607 AegisName: "Yggdrasilberry" Name: "Yggdrasil Berry" Type: 0 Buy: 5000 Weight: 300 BuyingStore: true Delay: 5000 KeepAfterUse: true Script: <" if (readparam(Hp) == readparam(MaxHP) || readparam(Sp) == readparam(MaxSP)) { end; } else { percentheal 100,100; delitem 607,1; } ">}, You'll notice the KeepAfterUse: true this will prevent the item from being deleted upon using it, even if they had maxHP/SP. Then if they weren't, we heal them, and manually delete the item. -
Find this: if (@HD > gettimetick(2)) end; and replace with this: if (@HD > gettimetick(2)) { message strcharinfo(0),"Please wait: "+callfunc("Time2Str",@HD)+""; end; } That should make it display how much longer they need to wait before getting healed.
-
Okay, so I thought about putting this in Source Support, but I'm not quite confident enough that I'd be able to complete this even if support was provided. That being said, don't hesitate to give support, I'll still try and do my part. Alright, so like the topic title says, I'm looking to make a Second Inventory. Surely this would have to be possible, granted I know displaying it in-game is another matter altogether. This is besides the point, I don't plan on having the second inventory space being accessible by players, strictly through NPC/SRC. Namely through the use of clif_sellitem. To be more specific, it's to create a Buyback feature. I've made a completely beta-working version before here: http://herc.ws/board/topic/7225-npc-buysell/?p=43831 However due to clif_sellitem using the inventory to produce a list of items, I came to the conclusion the current method was lacking something, especially since it fills a player's inventory up with items taking up space. Thus the idea for a Second Inventory. Theoretically if there were to exist a second inventory, accessible through script commands, I'd be able to place those items there. And then have clif_sellitem pull information from the second inventory rather than the first to create the list of items. Though, this is all speculation and hasn't been tested. I'm not sure exactly how the packet's handle it in this case. Meaning even if I provide the location for the list to be pulled from, it doesn't necessarily mean that the client will use the second inventory. Anyone with a vast knowledge of src, know if this is possible, and how to go about it?
-
Personally, I use 2013-12-23, and will continue to do so until a later client comes out ( bug-free ) with newer features ( 2014-10-22 ).
-
You can use the same method you were before, or would use with *goto command. Just simply use *callsub command instead. It'll function much the same way, but with the added benefit of passing information as well, should you choose to do so.
-
With this script, it's not needed to edit lastwarp. Since, last warp information is stored before they actually get warped. in other words, it'll store the 0 0 for x and y, making it repeat random warps.
-
Does this support multiple of 1 item? For instance, say I wanted a combo to require 1 hat, and 2 clips: 2220:2607:2607 would that work? Or does it only count each individual ID as a requirement, not the amount of each?
-
sc_def = bst->int_*20; That should make it -1 for every 20 int. tick_def = bst>int_ * 20 + SCDEF_LVL_CAP(bl, 150) *20; That should make it last about 55% less than normal, but I dunno for sure. Since I don't know what the last *50 is a reference to.
-
Used to let the patcher know it's a button: [Button:Exit] Images to determine what the patcher should display upon (Default 'nothing', OnHover 'Mouse over button', OnDown 'Mouse clicking on button/Held down on button') Default='images/close_default.png'OnHover='images/close_hover.png'OnDown='images/close_down.png' Actual button location, moving from Bottom-Left location out-towards top-right (Atleast, I think thats the way the button travels). Left=577Top=190 Tells the patcher what this button does, this code is already hardset in the code if i'm not mistaken, basically just says to close the patcher lol. Hook='Exit' Although, I doubt this is what you were asking xD @OnTopic - I actually like the first one a lot. I'd give it a solid 8.5/10 (guess that's not so solid since it has half a point).
-
I want to say Yes and No. Without looking directly at the srouce code, I can't give you a definite answer. However, I believe that it is possible to edit the code so that it accepts TCG as a form of currency, however displaying the amount of TCG you have on hand is a different matter all together.
-
Requesting a simple scripts about doing quest together
GmOcean replied to Color Picker's question in Script Requests
Heres a rough draft of your request. You should be able to mess around with it to do what you want. prontera,150,160,4 script NpcName 123,{if ($emperium_donation < 100) { .@needed = 100 - $emperium_donation; mes "This dungeon is still locked.", "We need more donations to unlock it.", "We accept donations in the form of Emperiums."; next; mes "We need, "+ .@needed +" more donations."; mes "Can you support us?"; next; if (select("Yes, I'd like to donate.", "Sorry, maybe another time.") == 2) { close; } mes "How many Emperiums would you like to donate?"; next; switch(select("1 Emperium", ((.@needed >= 5)?"5 Emperium":""), ((.@needed >= 10)?"10 Emperium":""))) { case 1: mes "Are you sure you want to donate 1 Emperium?"; next; if (select("Yes, take it.", "No, I change my mind.") == 2) { close; } if (!countitem(714)) { mes "I'm sorry, but you don't have any Emperium"; close; } delitem 714,1; ++$emperium; break; case 2: mes "Are you sure you want to donate 5 Emperium?"; next; if (select("Yes, take it.", "No, I change my mind.") == 2) { close; } if (countitem(714) < 5) { mes "I'm sorry, but you don't have any Emperium"; close; } delitem 714,5; $emperium += 5; break; case 3: mes "Are you sure you want to donate 10 Emperium?"; next; if (select("Yes, take it.", "No, I change my mind.") == 2) { close; } if (countitem(714) < 10) { mes "I'm sorry, but you don't have any Emperium"; close; } delitem 714,10; $emperium += 10; break; } close2; callsub OnDonation; end;}mes "All donation requirements have been completed.";mes "Would you like to enter the dungeon?";if (select("Yes, take me there.", "No thank you.") == 2) { close;}warp "pay_dun00",0,0;close;OnDonation:if ($emperium < 100) { return; }announce "All 100 Emperium Donations have been completed. The dungeon is now able to be accessed!",bc_all|bc_blue;return;end;} -
O.o Function to create NPC huh. Sounds like something i'd be interested in. Going to mess around with that in a few upcoming days
-
Glad to know I'm not the only one. Though it's a shame, that I may have to file a dispute of payment via paypal for an item purchased through the downloads section if it doesn't come back online soon :/
-
What exactly does Function 3 do? Just check to see if 2 strings of text are exactly the same? If so, you can just use this command: compare(<string>,<substring>)
-
From what I can tell, bitcoin is secure as in it's predicted to only increase in value exponentially from here on out. However, the biggest issue I have with bitcoin really, is it's not a vastly accepted form of currency. And if you wanted to convert your bitcoin to usable currency you can't just do it through sources like paypal. If you could, I'd have jumped on the wagon a long time ago.
-
For the third function code, you linked the same thing as in Second Function Code. Just wanted to let you know that D:
-
Yes, the command I made acts exactly the same way as changebase did, so sadly there's no point in making it. Also, as for it changing when they logout / login again. Just change their disguise whenever they login, if they have a variable set to 1. Then when their VIP time is up, or whatever determines the length of their disguise, just remove the variable and undisguise them. OnPCLoginEvent:if (vip_status) { changebase(vip_disguise);}end;
-
I see, alright well I think I know what the problem is. I'll test some more and release a fix if I'm able too. Edit: After, using the command both the original *changebase(<Job_Id>) and the custom one I made *disguiseclass(<Job_Id>) they both work exactly the same. That is to say, that yes, the skills do vanish, but they instead just go from the 1st/2nd/trans class, and go to the misc section. Before changing class: After Changing Class: So as you can see, you do have your skills, they just get pushed to misc section. This is most likely a client issue than a src one. And yes, before you ask, you are unable to obtain the skills of the new class you're disguised as, even if you tried.
-
@Suzuya - It shouldn't have changed your skills and the like. The documentation clearly says, changes only the sprite and nothing else. So your skills should have stayed intact. If this is truly the case, can you provide screen shots of it happening? A screen of before you used the command, showing your skills, and then after you used the command and showing your skills. Because if this is happening it could be a bug with the command. Otherwise, your only other option as far as I know, would be to make a custom command, or go the long route of making custom classes that use those sprites, but have the skills of the original class. Basically, making Wizard clones, but using Warlock sprite.
-
Just add more checks, but use the newer commands in the recent updates. For instance: for (.@i = 80003; .@i < 80006; .@i++) { if (questprogress(.@i)) { mes "Quest [^0000FF"+ .@i +"^000000] is currently: "+((questprogress(.@i) == 2)?"^0000FFCompleted":(questactive(.@i)?"^FFFF00Inprogress":"^FF0000Inactive"))+"^000000"; } else { mes "Quest [^0000FF"+ .@i +"^000000] hasn't been started yet."; }}close; What that does is check all your quests, one after the other, starting with quest 80003, and ending with 80006. 1. It'll first check to see if the quest has been obtained. 2. If it has, it'll check to see if it's completed, if so say it is. 3. If not completed, check to see whether it's active (inprogress) or inactive. 4. If it hasn't been obtained yet, say so. 5. Repeat for all quests. 6. close;