-
Posts
100 -
Joined
-
Last visited
-
Days Won
9
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Posts posted by Mice
-
-
13 minutes ago, romanmydesenyo said:
helo mica, may guide ka din ba pano iuprade ang packetver iba kasi version ng naka install sa ubuntu server ko.
#define PACKETVER 20211103
yan ang packetver version ko.. salamatHello CLIENT DATE yan,, may sinend akong PM sayo check mo
-
Hello sa pag setup ng CLIENT halso andito na sa guide na ito i check mo nalang
-
5 hours ago, Racaae said:
Hello, I don't see the variable being set in your item script.
You can use OnPCLoginEvent on a NPC to reapply the appearance.
Replace changebase with setlook LOOK_BODY2.
Example using a function:Script: | callfunc "F_JobSuit"; UnEquipScript: | callfunc "F_JobSuit",-1;
// callfunc "F_JobSuit"; //Change to evolution sprite // callfunc "F_JobSuit",<Job ID>; //Change to specific sprite // callfunc "F_JobSuit",-1; //Return to default sprite function script F_JobSuit { if (getarg(0,0) != -1) { if (jobname(getarg(0,-1)) != "Unknown Job") .@c = getarg(0); else if (BaseJob == Job_Priest) .@c = JOB_ARCH_BISHOP; else if (BaseJob == Job_Wizard) .@c = JOB_WARLOCK; else if (BaseJob == Job_Blacksmith) .@c = JOB_MECHANIC; else if (BaseJob == Job_Hunter) .@c = JOB_RANGER; else if (BaseJob == Job_Assassin) .@c = JOB_GUILLOTINE_CROSS; else if (BaseJob == Job_Crusader) .@c = JOB_ROYAL_GUARD; else if (BaseJob == Job_Monk) .@c = JOB_SURA; else if (BaseJob == Job_Sage) .@c = JOB_SORCERER; else if (BaseJob == Job_Rogue) .@c = JOB_SHADOW_CHASER; else if (BaseJob == Job_Alchemist) .@c = JOB_GENETIC; else if (BaseJob == Job_Bard) .@c = JOB_MINSTREL; else if (BaseJob == Job_Dancer) .@c = JOB_WANDERER; if (PACKETVER >= 20231220) setlook LOOK_BODY2,.@c; else changebase .@c; JobSuit_active = true; JobSuit_id = .@c; end; } if (PACKETVER >= 20231220) setlook LOOK_BODY2,Class; else changebase Class; JobSuit_active = false; JobSuit_id = 0; end; } - script #JobSuitOnLogin -1,{ OnPCLoginEvent: if (JobSuit_active) F_JobSuit(JobSuit_id); end; }
Thank you, it's working. Now, how can I do it like that? I'm using this for a Japanese Sprite, so how can I make it work using the JRO Sprite? It worked fine with the 2022 EXE. Sorry I didn't include this information in my first post. I thought their implementation was the same.
EquipScript: | changebase (roclass(eaclass()&EAJ_UPPERMASK)+roclass(EAJL_UPPER)); changelook LOOK_BODY2,3; UnEquipScript: | changelook LOOK_BODY2,0; changebase Class;
-
Hello, I just wanted to ask about the changebase or what's known as the 3rd Job suit.
This was working fine with the 2022 EXE, but it's no longer working with the 2023 EXE, which now usesbody
instead ofclass
(also known as bodystyle).I checked the source for bodystyle and created a variable similar to save appearance so that when the suit is unequipped, it would work properly.
However, the problem is that when you relog, the variable gets reset, even though it's stored in a character variable.
Do you happen to have a different method to make it work with bodystyle?
Here is theitemdb
I'm referring to:Script: | if (BaseJob == Job_Priest) changebase JOB_ARCH_BISHOP; if (BaseJob == Job_Wizard) changebase JOB_WARLOCK; if (BaseJob == Job_Blacksmith) changebase JOB_MECHANIC; if (BaseJob == Job_Hunter) changebase JOB_RANGER; if (BaseJob == Job_Assassin) changebase JOB_GUILLOTINE_CROSS; if (BaseJob == Job_Crusader) changebase JOB_ROYAL_GUARD; if (BaseJob == Job_Monk) changebase JOB_SURA; if (BaseJob == Job_Sage) changebase JOB_SORCERER; if (BaseJob == Job_Rogue) changebase JOB_SHADOW_CHASER; if (BaseJob == Job_Alchemist) changebase JOB_GENETIC; if (BaseJob == Job_Bard) changebase JOB_MINSTREL; if (BaseJob == Job_Dancer) changebase JOB_WANDERER; UnEquipScript: | changebase Class;
-
On 6/23/2025 at 7:22 PM, Louis T Steinhil said:
The nightmare amon ra sprite is corrupted also.
I'll review this and re-extract the dead body from the sprites. Thank you very much.
-
1
-
-
-
8 minutes ago, StiveRO said:
And if it's a boss ID other than the one you made, what would it be like?
You can add this, but please note that it's already supported for all MVPs that use the tomb feature up to Renewal. It will appear as a normal tombstone, but if you have a sprite for a custom monster's dead action, you can add it to the source. The format is:
{mvpID, NPCSpriteID}
. -
Just now, oneandonlyblake said:
Do you have discord?
Yes my discord xjayx. with the dot .
-
MVP Tombstone Shows Boss Sprite and Name!
Since someone is claiming that they are the only one who has the right to come up with this idea, and it's become an issue - to be honest, I didn't know that something like this had already been released here. So, I've decided to share this work for free so that everyone can benefit from it.
Just to clarify: this is entirely my own work. I didn’t copy any code from the person claiming they are the only one entitled to ideas like this.
As for the monster GRF, I manually edited each one to extract only the dead sprite actions.
Whenever an MVP dies on the map, a tombstone will appear at the spot where it died — but instead of just saying "Tomb", it now shows the MVP’s name like **"Phreeoni"**, **"Baphomet"**, or **"Ifrit"**
Instantly see which MVP was killed
Great for MVP hunters and competitive players
Makes the game world feel more immersive
Works with any MVP across the server
Example: When **Phreeoni** is defeated, a tombstone labeled **"Phreeoni"** appears where it died — no more guessing!
-
Submitter
-
Submitted06/18/25
-
Category
-
Videohttps://youtu.be/RUD2VJigr88
-
Content AuthorxJayx - A.K.A. Mice
-
1
-
-
This is a Baccarat showcase. I saw a similar system a long time ago — it was the Thai version. A player once requested that I create something like it, so I decided to make my own version.
Note: Baccarat is a gambling game and is strictly not allowed for minors. Only individuals 18 years old and above are permitted to play.
SYSTEM MECHANICS
This is a fully-featured Baccarat mini-game scripted in rAthena, modeled after real-world casino rules. Players place bets, watch a live NPC-based card reveal animation, and receive payouts. It includes persistent rounds, SQL-tracked wagering, crash recovery, audit trails, and anti-abuse mechanisms.
Game Mechanics
Baccarat Core Rules Implemented
Two sides: Player and BankerBet options:
Player
Banker
Draw
Player Pair
Banker PairCard draw rules are implemented accurately per real Baccarat regulations, including:
Natural win (8 or 9)
Player’s 3rd card rules
Banker’s draw based on Player's 3rd cardPayout System
Player bet: 1:1
Banker bet: 0.95:1 (5% commission)
Draw bet: 8:1
Pair bets: 11:1 (if first two cards of side are identical)Script Features
Live Card Drawing
Cards are drawn randomly from a 52-card deck (A–K of 4 suits).
Each round, the system shuffles and draws up to 6 cards
2 for Player (P1, P2), 2 for Banker (B1, B2)
Conditional 3rd cards: P3 and/or B3Cards are shown using NPC representations:
Hidden initially
Revealed one-by-one with delaysRound Flow
Start of Round: Players bet on options via menu.
Timer-based lock: Betting ends after X seconds.
Card Draw Logic: Random cards drawn, rules evaluated.
NPC Animation: Card NPCs display sequentially with delays.
Payout Calculation: All player bets are evaluated and rewarded.
Wager History Logging: All results are logged to SQL.Security & Reliability
Bet Locking
Players cannot place multiple bets in a single round.
Betting only allowed during pre-draw phase.Crash Recovery
All bets are stored database (audit log).
On crash or server restart:
Unprocessed bets are logged as "Refund" in Baccarat Master NPC.
Players can manually claim their refunds via NPC.Persistent Tracking
baccarat database tracks payouts with claimed flag.
Players claim winnings from previous rounds.
Claimed entries are logged into database history.Zeny Overflow Prevention
Before giving a payout, script checks if Zeny + reward exceeds Max_Zeny.
If exceeded, reward is withheld and player is notified.SQL Logging
Full history in database
Includes round ID, bets, results, payout, timestampUsed for:
Wager audit
Daily bet history per player
Pagination & date filtering in NPC menuCard Randomization Logic
Deck is preloaded with all 52 unique cards (e.g., AH, 2D, KC)
A card is selected randomly and removed from the deck to avoid duplicates.
This ensures no duplicate cards, true randomness, and integrity.Player Experience
Main Menu
Players interact with the NPC:
Place Bet
View Game Results (last 20 rounds)
Check Bet History (by date)
Claim Winnings
View Game RulesVisual
Card reveals with animation and delays
Color-coded results:
Banker = Red
Player = Blue
Draw = Green
Pair = Marked with BP / PPFinal Audit
Rule-accurate Baccarat implementation
Random, animated, NPC-based draw engine
SQL-persistent and crash-resilient
Security-audited with overflow protection
-
48 minutes ago, namerpus18 said:
Ah! So everyone is free to copy-paste anyone's idea because we're on private server. But hey, I’m not here to argue or waste time. Just stating the obvious.
Stop crying already. First of all, you're not the only one with a brain who can think. Second, is it really my fault if I had the same idea and acted on it? And lastly, did I even get any code from you? I didn’t even know that thing had already been released.
If you really think your idea was stolen, you should’ve registered it with the USCO to avoid this kind of drama.
Anyway, I'm not here to argue with you. Like I said, I didn’t know someone else already had the same idea. Then all of a sudden, you’re here crying about it—haha.Let’s move on, bro. You’re not the only one gifted with a brain who can come up with ideas. Let others shine too don’t act like you own all the knowledge.
Peace, bro. Next time, if you’re working on something, make sure to register it with the USCO right away.
-
1
-
-
On 6/14/2025 at 7:32 PM, namerpus18 said:
Oh, so it's been all over the forum *since January*, and you just *didn't* see it until you finished? Absolutely impeccable timing. A true masterpiece of delayed realization.
Hello! I have no intention of competing with anyone
I actually got this idea from another player, and to be honest, I didn’t notice your post before since I wasn’t very active here until recently. I’ve only just started coming online more often.
Anyway, I didn’t use any of your code or sprites your work is yours, and my work is mine. If the issue is just about having a similar concept, that’s not a problem for me. I mean, we’re on a private server, and the sprites we’re using aren’t even our own property.
That’s all, really. I hope this rAthena project progresses well and that the loading issue gets resolved. I also hope to see more of your showcases I support you!
-
11 minutes ago, Absinthe said:
I created a new command for the game's visual effects.
There's already /effect, which allows us to no longer see any visual effects in the game.My command lets us choose which effects we no longer want to see.
Example: "@nofx 89 on" will disable the storm gust effect.
The command works very well. I'd like to know how to make my modifications available so that if the community finds it useful, it can be integrated into a future update.It would be better if you add an effect list—for example, @nofx list so that all available effects that players can disable will be displayed. Not all players know how to look up skill IDs like Storm Gust. This way, they can just use a command like /effect instead of opening a browser and searching through our Ragnarok boards for skill or effect IDs.
-
20 hours ago, vferrari said:
Woah I loved it, it looks great!
Is this client side?Hello, this is a SRC edit and custom sprite of MVP monsters. It just uses the frame where they appear dead.
18 hours ago, WhiteEagle said:Nice job!!
But with a small tombstone with RIP would have more "effect" in my opinion.This is actually a great idea adding a small tomb next to the MVP. Thanks for the suggestion!
-
1
-
-
This feature enhances the standard MVP death mechanic by replacing the generic "Tomb" label with the **actual name of the MVP** that was defeated. When an MVP dies on the map, a tombstone NPC appears at the exact spot of death, and instead of showing a generic label, it dynamically displays the **name of the boss** (e.g., "Phreeoni", "Ifrit", "Baphomet").
**How it works for players:**
- When an MVP is killed, a tombstone spawns on the map.
- The tomb now shows the name of the MVP, not just “Tomb”.
- This helps MVP hunters and players identify what boss was recently defeated, even if they arrived late.
- It improves both visual clarity and overall immersion in the game.I created a demo video showcasing how this behaves in-game.
**Note to fellow developers:**
After completing this feature, I discovered that someone had already created a similar concept before me. However, I had no knowledge of that existing implementation during development and did not reference or use any of their code.This version was built independently from scratch based on how I personally wanted it to function. While the **concept is similar**, the **implementation and behavior may differ** between our versions.
I still believe this showcases a useful quality-of-life addition for MVP-related mechanics, and I hope it can serve as inspiration or a base for others who wish to implement their own version.
Feel free to check out the demo video and let me know your thoughts!
-
1
-
2
-
-
8 minutes ago, Racaae said:
The main storage (ID 0) is the only one that's always loaded.
Extra storages (IDs 1, 2, 3...) are only loaded when requested, and only one can be loaded at a time.
When the code requests storage ID 2, it doesn't load fast enough, so the lines that add the item and close the storage are executed too early.
That's why the storage remains open the first time.
The same thing happens when the player opens another extra storage, since storage ID 2 gets switched to a different one.Thank you very much for your beautiful explanation. Now I understand why even if I load in
clif_parse_LoadEndAck
, it still doesn't work properly. It's because of that. I understand it much better now thanks to your explanation. Thank you so much. The code you provided is a big help to me. I will just use it and add a confirmation so that the storage with ID: 2 will automatically open via a script for checking in order to initialize it. -
5 hours ago, Racaae said:
Hello, change storage to premiumStorage.
You can try my changes. I can't test it with just the code provided.// @autostore [Cydh] if (autostoring && sd->state.autostore && !item->expire_time && !id->flag.autoequip && !sd->state.storage_flag && !sd->npc_id) { if ((!sd->autostore_weight || (sd->autostore_weight && get_percentage(sd->weight, sd->max_weight) >= sd->autostore_weight)) && ( (sd->autostore_type&1 && (id->type == IT_HEALING || id->type == IT_USABLE || id->type == IT_DELAYCONSUME || id->type == IT_CASH)) || (sd->autostore_type&2 && (id->type == IT_ARMOR || id->type == IT_WEAPON || id->type == IT_SHADOWGEAR || id->type == IT_PETEGG || id->type == IT_PETARMOR)) || (sd->autostore_type&4 && (id->type == IT_ETC || id->type == IT_AMMO || id->type == IT_UNKNOWN || id->type == IT_UNKNOWN2)) || (sd->autostore_type&8 && id->type == IT_CARD) ) ) { char output[CHAT_SIZE_MAX]; sd->weight += w; clif_updatestatus(*sd, SP_WEIGHT); int32 stor_id = 2; //Storage ID to autostore if (stor_id) storage_premiumStorage_load(sd, stor_id, STOR_MODE_PUT); if (sd->state.storage_flag == 3) { storage_storageadd(sd, &sd->premiumStorage, i, amount); storage_premiumStorage_close(sd); } else { storage_storageadd(sd, &sd->storage, i, amount); storage_storageclose(sd); clif_storageclose(*sd); } sprintf(output, "[ Autostore ] %dx %s", amount, id->ename.c_str()); clif_messagecolor(&sd->bl, color_table[COLOR_LIGHT_GREEN], output, false, SELF); achievement_update_objective(sd, AG_GET_ITEM, 1, id->value_sell); return ADDITEM_SUCCESS; } }
Hello, it works, but there are some issues I can't figure out. Here's what's happening:
On your first login, if you use AutoStore and pick up loot, Storage ID: 2 opens once but doesn't close. However, the item you picked up goes into your main storage instead of Storage ID: 2. After that, any new loot you pick up correctly goes into Storage ID: 2.
But if you relog, the same issue happens again. However, if you open Storage ID: 2 first after relogging, everything works fine.
So overall, the system works it’s just that the first opening of the storage causes the issue.
-
Hello, this is Cydh's @autostore feature.
// @autostore [Cydh] if (autostoring && sd->state.autostore && !item->expire_time && !id->flag.autoequip && !sd->state.storage_flag && !sd->npc_id) { if ((!sd->autostore_weight || (sd->autostore_weight && get_percentage(sd->weight, sd->max_weight) >= sd->autostore_weight)) && ( (sd->autostore_type&1 && (id->type == IT_HEALING || id->type == IT_USABLE || id->type == IT_DELAYCONSUME || id->type == IT_CASH)) || (sd->autostore_type&2 && (id->type == IT_ARMOR || id->type == IT_WEAPON || id->type == IT_SHADOWGEAR || id->type == IT_PETEGG || id->type == IT_PETARMOR)) || (sd->autostore_type&4 && (id->type == IT_ETC || id->type == IT_AMMO || id->type == IT_UNKNOWN || id->type == IT_UNKNOWN2)) || (sd->autostore_type&8 && id->type == IT_CARD) ) ) { char output[CHAT_SIZE_MAX]; sd->weight += w; clif_updatestatus(*sd, SP_WEIGHT); storage_storageadd(sd, &sd->storage, i, amount); storage_storageclose(sd); clif_storageclose(*sd); sprintf(output, "[ Autostore ] %dx %s", amount, id->ename.c_str()); clif_messagecolor(&sd->bl, color_table[COLOR_LIGHT_GREEN], output, false, SELF); achievement_update_objective(sd, AG_GET_ITEM, 1, id->value_sell); return ADDITEM_SUCCESS; } } ---------------------------------------------------------- - ID: 2 Name: "Storage 2" Table: storage2 Max: 300 - ID: 3 Name: "Storage 3" Table: storage3 Max: 300
This is the part where it stores the item in the storage.
storage_storageadd(sd, &sd->storage, i, amount);Any idea how I can call storage ID: 2 or 3 in that part, so that the item to be autostored will go to the custom storage I created?"
-
1 hour ago, dudol said:
Guys sorry mejo visual learner kasi ako nahirapan ako dito https://github.com/rathena/rathena/wiki/Adding-a-Script meron bang video tutorial?
1. Create your own NPC folder and *.conf file. This will make it much easier to keep track of your own scripts and can reduce the hassle when merging new revisions of rA.
eto kasing part na to ung nalito ako, saan ako gagawa ng folder? pag iclone ung git dahil sa update hindi ba mawala ung folders ko?
C:\Users\Tite\Desktop\Ragmanok\2.Emulator\rathena
C:\Users\Tite\Desktop\Ragmanok\2.Emulator\rathena\npc
2. Follow the basic layout of the other *.conf files and remember to import the *.conf in
Etong mga conf files nakita ko panu daw gagawin ung import the *.conf in?
C:\Users\Tite\Desktop\Ragmanok\2.Emulator\rathena\conf
3. Panu ilagay yung NPC? na enable ko na ung gusto kong script dito scripts_custom.conf tamang section po ba ito or mali? ilipat ko nalang if ever. Salamat.
nagkaroon kasi ng error sa map server din eto screenshots.
Hello try lang search sa youtube halos lahat ng guide ginawan na ng ating mga kasamang pinoy
-
1
-
-
On 12/22/2024 at 10:19 PM, ooGubAoo said:
- script RandomWeaponOption -1,{ OnNPCKillEvent: // ตรวจสอบว่า Monster ดรอปอาวุธหรือไม่ if (getiteminfo(killmonsterloot, 2) == 4) { // เช็คว่าของดรอปเป็นประเภทอาวุธ set .@weapon_id, killmonsterloot; // เก็บ Weapon ID ที่ดรอปจากมอนสเตอร์ set .@option_rows, 1; // เริ่มต้นจำนวนแถว Option // สุ่มจำนวนแถว Option if (rand(100) < 50) set .@option_rows, 2; // โอกาส 50% สำหรับแถวที่ 2 if (rand(100) < 30) set .@option_rows, 3; // โอกาส 30% สำหรับแถวที่ 3 if (rand(100) < 10) set .@option_rows, 4; // โอกาส 10% สำหรับแถวที่ 4 // ตั้งค่าตัวแปรสำหรับ Option setarray .@option_id[0], 0, 0, 0, 0; setarray .@option_value[0], 0, 0, 0, 0; // กำหนด Option ให้กับแถวที่มีโอกาสสำเร็จ for (set .@i, 1; .@i <= .@option_rows; set .@i, .@i + 1) { set .@option_id[.@i - 1], rand(4001, 4035); // สุ่ม Option ID (ตัวอย่าง 4001-4035) set .@option_value[.@i - 1], rand(1, 10); // สุ่มค่า Option (1-10) } // สร้างอาวุธพร้อม Option makeitem2 .@weapon_id, 1, getcharid(CHAR_ID_ACCOUNT), 0, 0, .@option_id[0], .@option_value[0], .@option_id[1], .@option_value[1], .@option_id[2], .@option_value[2], .@option_id[3], .@option_value[3]; dispbottom "คุณได้รับอาวุธพร้อม Option!"; } end; }
It Dont Error and Dont work t
Find: for (set .@i, 1; .@i <= .@option_rows; set .@i, .@i + 1) {
Replace: for (.@i = 1; .@i <= .@option_rows; .@i++) {
Find: makeitem2 .@weapon_id, 1, getcharid(CHAR_ID_ACCOUNT), 0, 0,
Replace: makeitem2 .@weapon_id, 1, getcharid(0), 0, 0,
Not tested
-
show fullscript so i can test it
-
Try this
if ( getarraysize(.@liga$) == 0 || .@liga$[0] == "") {
-
57 minutes ago, Dolphin86 said:
This script was created originally by @Winterfox, i currently add a feature which the script will detect if player have an item before he/she can start crafting, everything was doing great and no error was shown, but somehow when the crafting process was completed i did not recive the crafted item, could someone help me what was wrong?
- script Armor Work Table FAKE_NPC,{ .@workbench_id = atoi(strnpcinfo(2)); .@workbench_crafting_state = getd("$workbench_" + .@workbench_id + "_crafting_state"); if(.@workbench_crafting_state == 1) { soundeffect "menu.wav",0; if(countitem(.instant_craft_item_id) > 0) { mes "You have an " + getitemname(.instant_craft_item_id) + "."; mes "Do you want to use it to instantly finish crafting ?"; next; if(select("Yes.:No.")) { delitem(.instant_craft_item_id),1; stopnpctimer; goto(FINISH_CRAFTING); } } mes "Please wait until the armor crafting process is finished."; close; } if(.@workbench_crafting_state == 2) { FINISH_CRAFTING: soundeffect "menu.wav",0; mes "Here are armor."; for(.@i = 0; .@i < getarraysize(getd("$workbench_" + .@workbench_id + "_products")); .@i += 2) { getitem(getd("$workbench_" + .@workbench_id + "_products[" + .@i + "]"), getd("$workbench_" + .@workbench_id + "_products[" + (.@i + 1) + "]")); } delwaitingroom; setd("$workbench_" + .@workbench_id + "_crafting_state", 0); close; } //======================================================= if(countitem(40040) == 1) { callsub(Start_Armor); } soundeffect "menu.wav",0; mes "You will need Armor Crafting Tier 2"; mes "or above."; close; Start_Armor: deletearray(@product_recipe, getarraysize(@product_recipe)); soundeffect "menu.wav",0; mes "^ff0000=============================="; mes "Any item created unattended by using the Public armor can be stolen by other players!"; mes "==============================^000000"; next; soundeffect "menu.wav",0; mes "^ff0000=============================="; mes "Private armor are shared with those who have acsess only!"; mes "==============================^000000"; next; soundeffect "menu.wav",0; mes "Select Armor Crafting."; switch(select("- Normal Armor")){ case 1: clear; soundeffect "menu.wav",0; mes "Select Tools"; switch(select("- Stone Knife")){ case 1: clear; soundeffect "menu.wav",0; mes "Select Armor Location."; switch(select("- Upper:- Middle")){ case 1: setarray(@product_recipe, 40117, 1, 40005, 1, 1, 40115, 0, 1, 40166, 0, 1); break; case 2: setarray(@product_recipe, 40119, 1, 40005, 1, 1, 40115, 0, 1, 40166, 0, 1); break; } } } //===================================================================================== if(getarraysize(@product_recipe) == 0) { end; } .@product_id = @product_recipe[0]; .@product_amount = @product_recipe[1]; for(.@i = 2; .@i < getarraysize(@product_recipe); .@i += 3) { .@next_start_index = getarraysize(.@product_requirements); .@product_requirements[.@next_start_index] = @product_recipe[.@i]; .@product_requirements[.@next_start_index + 1] = @product_recipe[.@i + 1]; .@product_requirements[.@next_start_index + 2] = @product_recipe[.@i + 2]; } clear; soundeffect "menu.wav",0; mes "Require"; for(.@i = 0; .@i < getarraysize(.@product_requirements); .@i += 3) { if(.@product_requirements[.@i + 1] == 1) { .@item_amount = rentalcountitem(.@product_requirements[.@i]); } else { .@item_amount = countitem(.@product_requirements[.@i]); } .@item_requirement_text$ = .@product_requirements[.@i + 2] + " " + getitemname(.@product_requirements[.@i]); if(.@item_amount < .@product_requirements[.@i + 2]) { .@not_enough_items = 1; mes "^ff0000- " + .@item_requirement_text$ + "^000000"; } else { mes "^8fce00- " + .@item_requirement_text$ + "^000000"; } } if(.@not_enough_items == 1) { close; } soundeffect "menu.wav",0; select("- Start"); if(countitem(40040) == 1) { armor_points += 1; dispbottom("Gained +1 Armor Crafting Points"); } for(.@i = 0; .@i < getarraysize(.@product_requirements); .@i += 3) { if(.@product_requirements[.@i + 1] == 0) { delitem(.@product_requirements[.@i], .@product_requirements[.@i + 2]); } } setarray(getd("$workbench_" + .@workbench_id + "_products"), .@product_id, .@product_amount); setd("$workbench_" + .@workbench_id + "_crafting_state", 1); clear; mes "The crafting armor process has started, please wait until it is finished."; OnCraftingStart: waitingroom("CRAFTING...", 0); initnpctimer; end; OnTimer60000: setd("$workbench_" + atoi(strnpcinfo(2)) + "_crafting_state", 2); delwaitingroom; waitingroom("COMPLETED!", 0); end; OnInit: .@workbench_id = atoi(strnpcinfo(2)); if(.@workbench_id < 1) { .instant_craft_item_id = 40014; end; } if(getd("$workbench_" + .@workbench_id + "_crafting_state") == 1) { goto(OnCraftingStart); } end; //============================================================================= } //Duplicate //===================================================== //new_1-3,91,143,6 duplicate(Armor Work Table) Public Armor Work Table#9000 11004 //new_1-3,95,143,6 duplicate(Armor Work Table) Public Armor Work Table#9001 11004 //new_1-3,99,143,6 duplicate(Armor Work Table) Public Armor Work Table#9002 11004 //new_1-3,91,149,6 duplicate(Armor Work Table) Public Armor Work Table#9003 11004 //veil //===================================================== veil,135,45,6 duplicate(Armor Work Table) Public Armor Work Table#9004 11004 veil,140,45,6 duplicate(Armor Work Table) Public Armor Work Table#9005 11004 veil,145,45,6 duplicate(Armor Work Table) Public Armor Work Table#9006 11004 veil,150,45,6 duplicate(Armor Work Table) Public Armor Work Table#9007 11004 veil,135,41,6 duplicate(Armor Work Table) Public Armor Work Table#9008 11004 veil,140,41,6 duplicate(Armor Work Table) Public Armor Work Table#9009 11004 veil,145,41,6 duplicate(Armor Work Table) Public Armor Work Table#9010 11004 veil,150,41,6 duplicate(Armor Work Table) Public Armor Work Table#9011 11004 veil,135,37,6 duplicate(Armor Work Table) Public Armor Work Table#9012 11004 veil,140,37,6 duplicate(Armor Work Table) Public Armor Work Table#9013 11004 veil,145,37,6 duplicate(Armor Work Table) Public Armor Work Table#9014 11004 veil,150,37,6 duplicate(Armor Work Table) Public Armor Work Table#9015 11004 veil,145,33,6 duplicate(Armor Work Table) Public Armor Work Table#9016 11004 veil,150,33,6 duplicate(Armor Work Table) Public Armor Work Table#9017 11004 veil,145,29,6 duplicate(Armor Work Table) Public Armor Work Table#9018 11004 veil,150,29,6 duplicate(Armor Work Table) Public Armor Work Table#9019 11004 //veil,223,55,6 duplicate(Armor Work Table) Public Armor Work Table#9020 11004 //veil,208,55,6 duplicate(Armor Work Table) Public Armor Work Table#9021 11004 //new_1-3,95,149,6 duplicate(Armor Work Table) Public Armor Work Table#9022 11004 //new_1-3,99,149,6 duplicate(Armor Work Table) Public Armor Work Table#9023 11004 //island //=============================================================== neko1,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9024 11004 neko1,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9025 11004 neko1,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9026 11004 neko1,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9027 11004 //=============================================================== neko2,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9030 11004 neko2,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9031 11004 neko2,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9032 11004 neko2,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9033 11004 //=============================================================== neko3,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9036 11004 neko3,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9037 11004 neko3,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9038 11004 neko3,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9039 11004 //=============================================================== neko4,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9042 11004 neko4,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9043 11004 neko4,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9044 11004 neko4,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9045 11004 //=============================================================== neko5,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9048 11004 neko5,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9049 11004 neko5,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9050 11004 neko5,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9051 11004 //=============================================================== neko6,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9054 11004 neko6,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9055 11004 neko6,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9056 11004 neko6,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9057 11004 //============================================================== neko7,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9060 11004 neko7,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9061 11004 neko7,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9062 11004 neko7,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9063 11004 //=============================================================== neko8,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9066 11004 neko8,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9067 11004 neko8,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9068 11004 neko8,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9069 11004 //=============================================================== neko9,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9072 11004 neko9,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9073 11004 neko9,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9074 11004 neko9,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9075 11004 //============================================================== neko10,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9078 11004 neko10,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9079 11004 neko10,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9080 11004 neko10,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9081 11004 //=============================================================== neko11,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9084 11004 neko11,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9085 11004 neko11,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9086 11004 neko11,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9087 11004 //=============================================================== neko12,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9090 11004 neko12,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9091 11004 neko12,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9092 11004 neko12,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9093 11004 //=============================================================== neko13,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9096 11004 neko13,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9097 11004 neko13,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9098 11004 neko13,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9099 11004 //=============================================================== neko14,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9102 11004 neko14,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9103 11004 neko14,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9104 11004 neko14,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9105 11004 //=============================================================== neko15,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9108 11004 neko15,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9109 11004 neko15,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9110 11004 neko15,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9111 11004 //=============================================================== neko16,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9114 11004 neko16,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9115 11004 neko16,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9116 11004 neko16,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9117 11004 //=============================================================== neko17,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9120 11004 neko17,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9121 11004 neko17,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9122 11004 neko17,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9123 11004 //=============================================================== neko18,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9126 11004 neko18,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9127 11004 neko18,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9128 11004 neko18,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9129 11004 //=============================================================== neko19,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9132 11004 neko19,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9133 11004 neko19,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9134 11004 neko19,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9135 11004 //=============================================================== neko20,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9138 11004 neko20,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9139 11004 neko20,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9140 11004 neko20,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9141 11004 //=============================================================== neko21,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9144 11004 neko21,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9145 11004 neko21,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9146 11004 neko21,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9147 11004 //=============================================================== neko22,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9150 11004 neko22,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9151 11004 neko22,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9152 11004 neko22,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9153 11004 //=============================================================== neko23,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9156 11004 neko23,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9157 11004 neko23,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9158 11004 neko23,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9159 11004 //=============================================================== neko24,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9162 11004 neko24,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9163 11004 neko24,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9164 11004 neko24,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9165 11004 //=============================================================== neko25,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9168 11004 neko25,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9169 11004 neko25,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9170 11004 neko25,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9171 11004 //=============================================================== neko26,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9174 11004 neko26,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9175 11004 neko26,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9176 11004 neko26,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9177 11004 //=============================================================== neko27,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9180 11004 neko27,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9181 11004 neko27,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9182 11004 neko27,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9183 11004 //=============================================================== neko28,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9186 11004 neko28,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9187 11004 neko28,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9188 11004 neko28,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9189 11004 //=============================================================== neko29,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9192 11004 neko29,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9193 11004 neko29,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9194 11004 neko29,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9195 11004 //=============================================================== neko30,77,136,6 duplicate(Armor Work Table) Private Armor Work Table#9198 11004 neko30,81,136,6 duplicate(Armor Work Table) Private Armor Work Table#9199 11004 neko30,85,136,6 duplicate(Armor Work Table) Private Armor Work Table#9200 11004 neko30,89,136,6 duplicate(Armor Work Table) Private Armor Work Table#9201 11004
Thank You..
What is the error in the map server after completing the quest and not receiving the reward?
-
6 hours ago, Yukaiii said:
Good morning guys!
Could anyone help me with this script?
I wanted it to announce when the player opened the box and the item was wonI even tried a few ways here but without success.
I am using eAthena emulator.Try it like this
case 0: getitem2 5100,1,1,0,0,0,0,0,0; announce "Player has received a reward!",0; break;
Appearance Suit or 3rd Job Suit
in Scripting Support
Posted
Thank you it work perfectly