Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/10/24 in all areas

  1. Heya, I've been working on a tool for a few weeks now and I believe it is in a ready enough state to be shown. This software is meant to edit str files, which are mostly used to display skill animations in-game. There may still be bugs left in the tool; reporting them here would be appreciated. You can download the software here: https://www.mediafire.com/file/epu1pr9xjdneupi Generic Ctrl-Z/Ctrl-Y to undo and redo an action. You can edit most shortcuts via File > Settings > Shortcuts. Transformations for the preview panel (same shortcuts as Act Editor) Translate: Left Mouse Button on the selected frame. Rotate: Shift-Left Mouse Button on the selected frame. Preview panel move: Right Mouse Button. Horizontal/vertical scaling: Ctrl-Shift-Left Mouse Button. Uniform scaling: Ctrl-Alt-Left Mouse Button. Unbound scaling: Ctrl-Left Mouse Button. Transformations for the edition panel Each layer can have multiple textures. To add a new one, click the texture combo box and select "Add new...". It will bring you to where the file is currently loaded from. While you can browse elsewhere, the textures must be in the same folder as your str file will be in. You can edit textures more rapidly with the gear button next to it. You can edit some fields by clicking the text before them. If you hold down the Left Mouse Button on this field (P1XY), you will be able to move it freely without moving the entire texture. This is especially handy when dealing with angles as those can give you unwanted results if you are editing them via the preview panel. The FPS property can be changed and saved. However, the client appears to completely ignore it and runs your animations at 60 FPS regardless. Editing an interpolated key frame will automatically create a new key frame on the timeline. Timeline panel A dot represents an existing key frame. An arrow represents an interpolated animation from the left key frame to the right key frame. You can right-click a key frame to bring up options: You can also copy the frame and move it elsewhere. The texture indexes are not re-adjusted. It copies the key frame as is. You can select multiple key frames by holding down the Left Shift key and holding down the Left Mouse Button. The traditional windows shortcuts can also be used for selection. These include: Arrow Key: move to the desired next frame. Ctrl-Arrow Key: move to the next key frame block in the wanted direction. Shift-Arrow Key: move to the next key frame for selection. Ctrl-Shift-Arrow Key: move to the next frame block while selecting what's inbetween. Double-Left Mouse Button: selects an entire frame and its interpolated section. Ctrl-A: selects the entire layer. You can move a key frame by selecting the key frame, clicking on the dot and then moving the key frame to the desired location. The operation above can also be done by selecting multiple rows at the same time. You can do a quick preview of the animation by moving the timeline selector. You can move a layer up and down by holding down the Left Mouse Button and moving it where you want it to. Right-clicking a layer also brings up more options. And I believe that's it! The next "feature" I wanted to implement was editing multiple frames at the same time, but unfortunately this project needs a small break from my end...! Hopefully some of you may have an use for it. Edit: I am most certainly not an animator and I do not know the real needs of those who will actually use the software. That is why it's being posted as a work in progress rather than a finished tool. If you have requests, feel free to post them below and I'll add as much as I can.
    1 point
  2. Max level is the max base level of character. so it will generate statpoint until that level. Max status point is the total status points when it reached the max level that you set. Traitpoints is for 4th job. choose no if you didnt have 4th job and didnt need it.
    1 point
  3. I already told you to change it to 0, and then just set what max points, so all jobs will have the same points as long as their max base level is same. Thats why I give the statpoint generator, so you can set any max points you want.
    1 point
  4. i understand. what if we didnt give trans bonus = 0 ? so all classes will have the same amount of it, am I right ? Just set the points for the max level correctly, and all jobs will have the same points since all have the same max level.
    1 point
  5. They are not trans so they didnt get the bonus. Or maybe set the bonus to 0, and recreate the status point as much as you wish using statpoint generator that I created here : So then all the jobs are having the same statpoints as long as they have the same levels.
    1 point
  6. The script you provided is close to being functional, but there are some issues that need to be addressed to ensure it works correctly. Below is the corrected script with explanations for the changes: Here is the corrected script firstcity,229,87,4 script Salvage NPC 856,{ mes "[Salvage NPC]"; mes "Hello! I can salvage your old weapons and armor."; mes "In return, I'll give you a special item based on the weapon's level."; next; mes "[Salvage NPC]"; mes "Would you like to proceed?"; switch(select("Yes:No")) { case 1: callfunc("salvage_item"); break; case 2: mes "[Salvage NPC]"; mes "Alright, come back if you change your mind."; close; } close; } function script salvage_item { mes "[Salvage NPC]"; mes "Please show me the items you want to salvage."; next; // Fetch player's inventory getinventorylist; // Collect all weapons and armor in the player's inventory set .@item_count, 0; for (.@i = 0; .@i < @inventorylist_count; .@i++) { set .@type, getiteminfo(@inventorylist_id[.@i], ITEMINFO_TYPE); if ((.@type == IT_WEAPON || .@type == IT_ARMOR) && @inventorylist_equip[.@i] == 0) { // Type 4 = Weapon, Type 5 = Armor, and not equipped set .@salvageable_items[.@item_count], @inventorylist_id[.@i]; set .@salvageable_items_qty[.@item_count], @inventorylist_amount[.@i]; set .@item_count, .@item_count + 1; } } if (.@item_count == 0) { mes "[Salvage NPC]"; mes "You don't have any salvageable items."; close; } mes "[Salvage NPC]"; mes "Here is a summary of the items you can salvage:"; for (.@i = 0; .@i < .@item_count; .@i++) { mes "^0000FF" + getitemname(.@salvageable_items[.@i]) + "^000000 x" + .@salvageable_items_qty[.@i]; } next; if (select("Proceed with Salvage:Cancel") == 2) { mes "[Salvage NPC]"; mes "Alright, come back if you change your mind."; close; } // Call the shop callshop "salvage_shop", 1; npcshopattach "salvage_shop"; close; } // Shop definition with placeholder items (you need to fill this with the actual items you want to allow for salvage) - shop salvage_shop -1,501:10000,502:10000,503:10000,504:10000,505:10000,506:10000,507:10000,508:10000,509:10000,510:10000 OnSellItem: // Rewards based on weapon level setarray .@reward_common, 501, 502; // Example common loot item IDs setarray .@reward_rare, 503, 504; // Example rare loot item IDs setarray .@reward_unique, 505, 506; // Example unique loot item IDs setarray .@reward_legendary, 507, 508; // Example legendary loot item IDs setarray .@reward_ancient, 509, 510; // Example ancient loot item IDs set .@item_id, @sold_nameid; set .@weapon_level, getiteminfo(.@item_id, ITEMINFO_WEAPONLV); switch (.@weapon_level) { case 1: // Reward common item/points getitem .@reward_common[rand(getarraysize(.@reward_common))], 1; break; case 2: // Reward rare item/points getitem .@reward_rare[rand(getarraysize(.@reward_rare))], 1; break; case 3: // Reward unique item/points getitem .@reward_unique[rand(getarraysize(.@reward_unique))], 1; break; case 4: // Reward legendary item/points getitem .@reward_legendary[rand(getarraysize(.@reward_legendary))], 1; break; case 5: // Reward ancient item/points getitem .@reward_ancient[rand(getarraysize(.@reward_ancient))], 1; break; default: dispbottom "This item cannot be salvaged."; } dispbottom "Thank you! Here is your reward."; end; The OnSellItem label should be properly defined and hooked into the shop functionality. The shop definition needs to include the items that are eligible for sale. The getiteminfo function needs to fetch the correct item information. Some logic and flow improvements. Key Changes and Fixes: Item Info Fetching: Changed getiteminfo(.@item_id, ITEMINFO_WEAPONLEVEL) to getiteminfo(.@item_id, ITEMINFO_WEAPONLV) to correctly fetch the weapon level. Shop Definition: The salvage_shop now includes example items with prices. Adjust these item IDs and prices according to your server's item database. Shop Invocation: Adjusted callshop "salvage_shop", 1; to make sure the shop is called correctly. Reward Logic: getiteminfo uses ITEMINFO_WEAPONLV to fetch the weapon level correctly. Item Type Constants: Added constants IT_WEAPON and IT_ARMOR for better readability. Make sure the items you want to allow for salvage are included in the salvage_shop definition. Adjust the item IDs and the rewards as per your server's requirements. This should make the script functional and enable the salvage NPC to work correctly.
    1 point
  7. try : yum install -y mysql-devel pcre-devel zlib-devel
    1 point
×
×
  • Create New...