Jump to content

Den

Inactive Member
  • Posts

    110
  • Joined

  • Last visited

  • Days Won

    5
  • Feedback

    0%

Everything posted by Den

  1. I had some problems with this trigger because it happens for every single player on map and it didn't work good for me. Some contitions were executed more than one time. If someone wants here is how to trigger it only for the first player on the dungeon's character list: In struct FWarpToPosition remove quest::CQuestManager::instance().Jump(ch->GetPlayerID()); Then after if (!pMap) { sys_err("cannot find map by index %d", lFromMapIndex); return; } in void CDungeon::JumpAll(long lFromMapIndex, int x, int y) dungeon.cpp add if (!m_set_pkCharacter.empty()) { itertype(m_set_pkCharacter) it = m_set_pkCharacter.begin(); LPCHARACTER ch = *it; quest::CQuestManager::instance().Jump(ch->GetPlayerID()); } Then do the same for void CDungeon::JumpParty(LPPARTY pParty, long lFromMapIndex, int x, int y) if you want to. I also made a function that takes current dungeon as argument instead of player but in this case you can't use pc functions in when jump trigger(e.g. pc.get_map_index()) and you have to use only dungeon functions (e.g. d.get_map_index()) so for it wouldn't be good for begginers.
  2. Maybe root/colorinfo.py TITLE_RGB_GOOD_1 etc?
  3. I had this problem before. You must have d:/ymir work/special folder to get it working.
  4. For players it almost doesn't matter I think. You can use whatever you want, I'm just saying that some of these methods are just not good looking in code. If I were you I wouldn't do this in quest.
  5. There are lots of ways to enable that. 1. Setting language skills to max in quest in which you select your job. 2. Searching for ConvertEmpireText() in server source and commenting it. 3. Searching for conditions with UNIQUE_GROUP_RING_OF_LANGUAGE and SKILL_LANGUAGE1 and changing them. 4. bool CHARACTER::IsEquipUniqueGroup(DWORD dwGroupVnum) const On the beggining add: if (dwGroupVnum == UNIQUE_GROUP_RING_OF_LANGUAGE) return true; Maybe 4th method looks kinda shitty but should do the job.
  6. In my client when I'm adding new objects, maps, etc. I have to rename everything to lowercase letters. For example: folder/Folder/Object.gr2 to folder/folder/object2.gr2 Maybe try this.
  7. Didn't test but find in char_battle.cpp: else if (1 == number(1, iGold10DropPct)) { // // µ· ĆřĹş˝Ä µĺ·Ó // for (int i = 0; i < 10; ++i) { int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax); iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100; iGold *= iGoldMultipler; if (iGold == 0) { continue; } // NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ˝ if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold))) { pos.x = GetX() + (number(-7, 7) * 20); pos.y = GetY() + (number(-7, 7) * 20); item->AddToGround(GetMapIndex(), pos); item->StartDestroyEvent(); iTotalGold += iGold; // Total gold } } } Try to remove whole else if and check if it's working (save it somewhere maybe in case it wouldn't work). @EDIT: I didn't notice you also want to remove it from bosses. I have no time right now to adjust it but you can try it on your own. You have everything around this else if I gave you higher. @EDIT2: char_battle.cpp on the beggining add #include "../../common/service.h" common/service.h on the end add #define DISABLE_YANG_BOMB char_battle.cpp change in Reward() if (GetMobRank() >= MOB_RANK_BOSS && !IsStone() && GetMobTable().dwGoldMax != 0) { if (1 == number(1, iGold10DropPct)) iGoldMultipler *= 10; // 1% Č®·ü·Î µ· 10ąč int iSplitCount = number(25, 35); for (int i = 0; i < iSplitCount; ++i) { int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax) / iSplitCount; if (test_server) sys_log(0, "iGold %d", iGold); iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100; iGold *= iGoldMultipler; if (iGold == 0) { continue ; } if (test_server) { sys_log(0, "Drop Moeny MobGoldAmountRate %d %d", CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker), iGoldMultipler); sys_log(0, "Drop Money gold %d GoldMin %d GoldMax %d", iGold, GetMobTable().dwGoldMax, GetMobTable().dwGoldMax); } // NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ #ifdef DISABLE_YANG_BOMB pkAttacker->GiveGold(iGold / iSplitCount); iTotalGold += iGold; #else if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold))) { pos.x = GetX() + ((number(-14, 14) + number(-14, 14)) * 23); pos.y = GetY() + ((number(-14, 14) + number(-14, 14)) * 23); item->AddToGround(GetMapIndex(), pos); item->StartDestroyEvent(); iTotalGold += iGold; // Total gold } #endif } } // 1% Č®·ü·Î µ·Ŕ» 10°ł ¶łľî ¶ß¸°´Ů. (10ąč µĺ·ÓŔÓ #ifndef DISABLE_YANG_BOMB else if (1 == number(1, iGold10DropPct)) { // // µ· ĆřĹş˝Ä µĺ·Ó // for (int i = 0; i < 10; ++i) { int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax); iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100; iGold *= iGoldMultipler; if (iGold == 0) { continue; } // NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ˝ if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold))) { pos.x = GetX() + (number(-7, 7) * 20); pos.y = GetY() + (number(-7, 7) * 20); item->AddToGround(GetMapIndex(), pos); item->StartDestroyEvent(); iTotalGold += iGold; // Total gold } } } #endif else { // // ŔĎąÝŔűŔÎ ąć˝ÄŔÇ µ· µĺ·Ó // int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax); iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100; iGold *= iGoldMultipler; int iSplitCount; if (iGold >= 3 && !LC_IsYMIR()) iSplitCount = number(1, 3); else if (GetMobRank() >= MOB_RANK_BOSS) { iSplitCount = number(3, 10); if ((iGold / iSplitCount) == 0) iSplitCount = 1; } else iSplitCount = 1; if (iGold != 0) { iTotalGold += iGold; // Total gold for (int i = 0; i < iSplitCount; ++i) { if (isAutoLoot) { pkAttacker->GiveGold(iGold / iSplitCount); } else if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold / iSplitCount))) { pos.x = GetX() + (number(-7, 7) * 20); pos.y = GetY() + (number(-7, 7) * 20); item->AddToGround(GetMapIndex(), pos); item->StartDestroyEvent(); } } } } Didn't test. Yang will be added to character's inventory after killing a boss instead of droping on the ground. Let me know if you want it in another way.
  8. First of all if you have any errors with compilation then simply try to google it. Sometimes you will get an answer in several seconds. You've messed up with braces in void CInstanceBase::RefreshTextTail() after } #endif add }
  9. Maybe try to get next exp instead of current exp? local up = pc.get_next_exp()
  10. char_item.cpp:7580: error: expected unqualified-id before 'if' char_item,cpp, line 7580, paste the wole function.
  11. Hello everyone. One day I was curious how does normal hit bonus and skill bonus are added to item, so I made a simple simulation as console application from source functions. Code: [Hidden Content] Change whatever you want then compile and test. Maybe this will help someone who wants to adjust this.
  12. Like I've said, slot 204 is the correct one. Are you sure that you edited right inventorywindow.py?
  13. Try on uiinventory.py: def SelectItemSlot(self, itemSlotIndex): chat.AppendChat(chat.CHAT_TYPE_INFO, "select item slot") if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1: return itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex) chat.AppendChat(chat.CHAT_TYPE_INFO, "select item slot %d" % itemSlotIndex) Add chat.AppendChat(chat.CHAT_TYPE_INFO, "select item slot %d" % itemSlotIndex) then try click and show chat. Does slot even highlight when over with item?
  14. But after you click on empty belt slot game chat is showing nothing?
  15. In uiinventory.py, function def SelectEmptySlot(self, selectedSlotPos), on the top write like this: def SelectEmptySlot(self, selectedSlotPos): chat.AppendChat(chat.CHAT_TYPE_INFO, "select empty slot %d" % selectedSlotPos) if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1: return Then click on belt slot in game and show what you've got on chat.
  16. Maybe you've edited wrong inventorywindow.py? I have one in uiscript and one in locale/ui. That confused me once so maybe check it.
  17. Ah, try to set itemCount to 0: setItemVNum(204, getItemVNum(204), 0) #setting belt
  18. Tabulations and spaces are really important in python. You must be using them properly like that: [Hidden Content]
  19. The easiest way without touching the sashes is: uiinventory.py (add setItemVNum(204, getItemVNum(204), itemCount)): [Hidden Content] inventorywindow.py: Instead of {"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32}, write {"index":204, "x":39, "y":106, "width":32, "height":32},
  20. Look, you've inserted WEAR_COSTUME_ACCE before so now WEAR_BELT is 24 not 23.
  21. common/length.h in server source: enum EWearPositions -> WEAR_BELT My WEAR_BELT is 23. GameType.h in binary source: const DWORD c_Equipment_Belt = c_New_Equipment_Start + 2; //should equal server WEAR_BELT + 180, c_New_Equipment_Start equals 201 so 201+2=203
  22. Hm... Check in your binary source if item.EQUIPMENT_BELT equals WEAR_BELT + 180 on server source side.
×
×
  • 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.