Jump to content

metin2-factory

Inactive Member
  • Posts

    174
  • Joined

  • Last visited

  • Days Won

    13
  • Feedback

    0%

Everything posted by metin2-factory

  1. M2 Download Center Download Here ( Internal ) I'v been working on a small tool since last week that helps,make it faster and easier to modify & add new item names/icons into item_names/item_list files. It is now finished, and i'd like to share it with the community and get feedback from you for any bugs you have encountered. What can you do with this program? Add item name record into item_name(example screen shot below). Add item record into item_list(example screen shot below). Save logs of every action made. Once insert item button has been clicked,it has a check if an item vnum already exist, if so, nothing happens. ** By having a log file that stores info of every of your action by the tool, you can track your last changes with the exact date and time. this is pretty useful i can say. Enjoy!
  2. open char_skill.cpp look for: case SKILL_NORMAL: add below: if (GetSkillLevel(pkSk->dwVnum) == 10) { SetSkillLevel(pkSk->dwVnum, 20); } You can change 10 to the level you wish it to change to m.
  3. @tierrilopes Atleast if you give an answer, give a proper one. Anyway, open input_login.cpp, look for : add below:
  4. Does it happen only with you move an item that its size is 3 slots?(like the weapon you show). If so, try the following: look for if (busy) { busy->RemoveFromCharacter(); busy->AddToCharacter(this, TItemPos(INVENTORY, bCell1 + (5 * i))); } } add below (if item1->GetSize() == 3) bDestCell -= 5;
  5. Look for: void CNewPetActor::ItemCubeFeed() below if (!itemxp) return; add: if (itemxp->IsEquipped()) return;
  6. There are 2 ways you can modify it. Open item_attribute.cpp look for: int nAttrLevel = 5; First way(totally random): int nAttrLevel = number(1, 6); // Randomize attribute level from 1 to 5 Second way(less random): int randomChance = number(0, 100); if (randomChance < 20) // 20% Chance to get max lvl attr nAttrLevel = 5; else if (randomChance < 50) // 30% chance to get max lvl attr nAttrLevel = 4; .... // etc..
  7. in input_main.cpp look for: if (pkItem->GetCell() >= INVENTORY_MAX_NUM && IS_SET(pkItem->GetFlag(), ITEM_FLAG_IRREMOVABLE)) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â°í> â°í·Î ¿Å±æ ¼ö ¾ø´Â ¾ÆÀÌÅÛ ÀÔ´Ï´Ù.")); return; } Add below: if (pkItem->IsEquipped()) { ch->ChatPacket(CHAT_TYPE_INFO, "You must first unequip this item."); return; }
  8. Open input_main.cpp Look for: if (ch->IsGM()) bType = (bType & 0xF0) | WHISPER_TYPE_GM; Change to: if (ch->IsGM() && (ch->IsAffectFlag(AFF_STAFF_GA) || ch->IsAffectFlag(AFF_STAFF_SGM))) bType = (bType & 0xF0) | WHISPER_TYPE_GM;
  9. in block_item.cpp modify these 2 functions
  10. item_block.cpp line 70 modify to the following: for (BLOCKED_ITEMS::const_iterator it = m_map_BlockedItems.begin(); it != m_map_BlockedItems.end();++it)
  11. This is not a mistake but on purpose. the code as you mentioned will create spaces after the char name so it'd look ingame like: Banderos (X,Y)TopSinner (X,Y) i'v fixed this issue by creating the necessary spaces after cords display per char.
  12. Hey, Using this the gm's are able to view each player local map cords in the map(via the command /user in game). Open cmd_gm.cpp and replace the class user_func with the following: Spoiler class user_func { public: LPCHARACTER m_ch; static int count; static char str[128]; static int str_len; user_func() : m_ch(NULL) {} void initialize(LPCHARACTER ch) { m_ch = ch; str_len = 0; count = 0; str[0] = '\0'; } void operator () (LPDESC d) { if (!d->GetCharacter()) return; TMapSetting& map_setting = SECTREE_MANAGER::instance().GetMap(d->GetCharacter()->GetMapIndex())->m_setting; int len = snprintf(str + str_len, sizeof(str) - str_len, "%s (%ld,%ld)%-16s", d->GetCharacter()->GetName(),(d->GetCharacter()->GetX() - map_setting.iBaseX)/100,(d->GetCharacter()->GetY() - map_setting.iBaseY)/100,""); if (len < 0 || len >= (int) sizeof(str) - str_len) len = (sizeof(str) - str_len) - 1; str_len += len; ++count; if (!(count % 4)) { m_ch->ChatPacket(CHAT_TYPE_INFO, str); str[0] = '\0'; str_len = 0; } } }; That's all, compile and have fun!
  13. We're looking for someone with the following experience: Have been doing programming before, doesn't matter any language,at least 3 month of previous experience. Would like to learn new stuff, how the stuff working behind the scenes. Willing to commit for minimum period of 3 months. We will performing personal "internship" to the chosen person, teaching him/her about the server architecture , quests and game development. Future goal is that the selected person will be a part of our development team. For more info send me either a PM here with your skype ID. Ofcours, monthly payment is included once the internship is done. Best Regards, Factory Team
  14. Missed it,lol. Mod can close this topic, and pin "Expanded reload commands" topic could be nice.
  15. Hey devs, As some of you noticed, /reload p doesn't actually reload the item attr ingame. it does reload ItemAttr vector from database(via query) but that's not enough. With my simple guide,you'll be able to reload item_attr table ingame. Let's begin: Open input_db.cpp, look for: Add below: Open ClientManager.cpp Look for: Replace with: Look for: Add below: That's all! compile game & db and it should work fine now. To reload ingame you could either use the command /reload p or just /reload. Please like this post if it helped you. Regards.
  16. In instance base look for case CItemData::ITEM_TYPE_WEAPON: add below the break; line and above case CItemData::ITEM_TYPE_ARMOR the following: case CItemData::ITEM_TYPE_COSTUME: __ClearWeaponRefineEffect(); if (pItem->GetSubType() == CItemData::WEAPON_COSTUME) { ....(think alone what to fill here) } break; good luck.
  17. As nabHacker mention, your item_proto structure does not fit to your compiled one, if you look at the function CItemManager::LoadItemTable in ItemManager.cpp And take another look at SaveItemProto() at dump_proto.cpp, you can see there's a check condition that checks if the item_proto structrue is the same as the compiled one. The variable Stride stores the item_proto structure size. Basically what it means is that your item_proto.txt structure is missing/having more members than it should be and this causing the error. And also, make sure that the item_proto.txt is compile with dump_proto that match to your client. Look at class TClientItemTable(in dump_proto.cpp) and class TItemTable in ItemData.h and verify they match.
  18. Look in log.c in libthecore\src\log.c, look there for _syserr function and see if it's commented. if you have problems post it here as a file and i'll take a look.
  19. You should write what you did so people with same problem can solve it by reading this topic
  20. Well,if you copied paste what PACI wrote of course it wouldn't work. Modify it to match your functions.. self.itemImage.SAFE_SetStringEvent("MOUSE_OVER_IN", self.ShowTip) self.itemImage.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.HideTip) Does it appear like this in your code? Also,make sure not to add () in the end.
  21. Inside void ITEM_MANAGER::SaveSingleItem(LPITEM item) function (item_manager.cpp) change sys_log line to the following: let me know if it's better now.
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.