Jump to content

Search the Community

Showing results for tags 'lua'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Mt2Academy
    • News
  • Community
    • Community
    • المحظورون
  • Metin2 Development
    • Metin2 Guides and Tutorials
    • Serverfiles & Client Files.
    • Systems
    • Metin2 Quests
    • Metin2 Designs
    • Questions & Answers
    • Files Requests
    • Tools
    • Off-Topic
  • Private Servers
    • Metin2 Private Servers
    • Find a Team Member
  • Answered topics
  • Archive
    • Archive

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 6 results

  1. الإستعمال : عند تطوير بند معين when refine begin *يمكنك تحديد مستوى البند. (الفيديو : عند تطوير السام يتم إلى +9 يتم الإعلان) [Hidden Content] الشرح مرفق في التحميل: [Hidden Content]
  2. السلام عليكم ورحمة الله وبركاته النظام يشارك جدول الميزات مع الكويست من السورس ## في item_attribute.cpp قم بإضافتها إلى أسفل الملف bool CItem::IsEnchantable(LPITEM item) { if (!item) return false; // If you have more enchantable equipment make sure to add them. switch (item->GetType()) { case ITEM_WEAPON: switch (item->GetSubType()) { case WEAPON_SWORD: case WEAPON_DAGGER: case WEAPON_BOW: case WEAPON_TWO_HANDED: case WEAPON_BELL: case WEAPON_FAN: #ifdef ENABLE_WOLFMAN_CHARACTER case WEAPON_CLAW: #endif return true; } case ITEM_ARMOR: switch (item->GetSubType()) { case ARMOR_BODY: case ARMOR_HEAD: case ARMOR_SHIELD: case ARMOR_WRIST: case ARMOR_FOOTS: case ARMOR_NECK: case ARMOR_EAR: return true; } default: return false; } } std::vector<int> CItem::GetAvailableAttr() { int iAttributeSet = GetAttributeSetIndex(); if (iAttributeSet < 0) return {}; std::vector<int> avail; for (int i = 0; i < MAX_APPLY_NUM; ++i) { const TItemAttrTable& r = g_map_itemAttr[i]; if (r.bMaxLevelBySet[iAttributeSet] //&& !HasAttr(i) // the attribute will be removed no need for the check. ) { if (HasProtoAttr(i)) continue; avail.push_back(i); } } return avail; } void CItem::RemoveAttrByApply(BYTE bApply) { bool bUpdated = false; for(int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i) { if (m_aAttr[i].bType == bApply) { m_aAttr[i].bType = 0; m_aAttr[i].sValue = 0; bUpdated = true; } } if (bUpdated) UpdatePacket(); } WORD CItem::GetMaxAttrValue(BYTE bApply) { const TItemAttrTable& r = g_map_itemAttr[bApply]; return r.lValues[_countof(r.lValues) - 1]; } bool CItem::HasProtoAttr(BYTE bApply) { for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i) if (m_pProto->aApplies[i].bType == bApply) return true; return false; } ## في ملف item.h ابحث عن DWORD GetSIGVnum() const { return m_dwSIGVnum; } ## أضف هذه تحتها public: bool IsEnchantable(LPITEM item); bool HasProtoAttr(BYTE bApply); std::vector<int> GetAvailableAttr(); void RemoveAttrByApply(BYTE bApply); WORD GetMaxAttrValue(BYTE bApply); ## في ملف questlua_item.cpp ابحث عن void RegisterITEMFunctionTable() ## أضف هذه فوقها int item_get_attr_table(lua_State * L) { CQuestManager& q = CQuestManager::instance(); LPITEM item = q.GetCurrentItem(); if (!item) return 0; std::vector<int> vecAvailableAttrs = item->GetAvailableAttr(); lua_newtable(L); // adds a new table to the top of the stack. for (int i = 0; i < vecAvailableAttrs.size(); ++i) { lua_pushnumber(L, i + 1); // pushes the index to the top of the stack. lua_pushnumber(L, vecAvailableAttrs.at(i)); // pushes the value to the top of the stack lua_settable(L, -3); // gets the index (-2) and the value (-1) and pushes them to the table in (-3) of the stack } return 1; } int item_remove_attr(lua_State * L) { CQuestManager& q = CQuestManager::instance(); LPITEM item = q.GetCurrentItem(); if (!item) return 0; if (!lua_isnumber(L, 1)) return 0; BYTE bApply = lua_tonumber(L, 1); item->RemoveAttrByApply(bApply); return 0; } int item_get_attr_max_value(lua_State * L) { CQuestManager& q = CQuestManager::instance(); LPITEM item = q.GetCurrentItem(); if (!item) return 0; if (!lua_isnumber(L, 1)) return 0; BYTE bApply = lua_tonumber(L, 1); WORD wMaxValue= item->GetMaxAttrValue(bApply); lua_pushnumber(L, wMaxValue); return 1; } int item_addon_type(lua_State * L) { CQuestManager& qMgr = CQuestManager::instance(); LPITEM pkItem = qMgr.GetCurrentItem(); if (!pkItem) { lua_pushboolean(L, 0); return 1; } const TItemTable* pProto = pkItem->GetProto(); if (!pProto) { lua_pushboolean(L, 0); return 1; } if (pProto->bType != ITEM_WEAPON) { lua_pushboolean(L, 0); return 1; } lua_pushboolean(L, pProto->sAddonType); return 1; } int item_is_enchantable(lua_State * L) { CQuestManager& qMgr = CQuestManager::instance(); LPITEM pkItem = qMgr.GetCurrentItem(); if (pkItem) { if (pkItem->IsEnchantable(pkItem)) lua_pushboolean(L, 1); else lua_pushboolean(L, 0); } else lua_pushboolean(L, 0); return 1; } # في نفس الملف ابحث عن { NULL, NULL } ## أضف هذه فوقها { "get_attr_table", item_get_attr_table }, { "get_attr_max_value", item_get_attr_max_value }, { "remove_attr", item_remove_attr }, { "addon_type", item_addon_type }, { "is_enchantable", item_is_enchantable }, ## أضف هذه لملف quest_function item.get_attr_table item.get_attr_max_value item.remove_attr item.is_enchantable item.addon_type apply_names ملف questlua.lib أضف apply_names = { [1] = "نقاط الحياة القصوى ", [2] = "أقصى MP نقاط الأسلوب ", [3] = "حيوية ", [4] = "ذكاء ", [5] = "قوة ", [6] = "مناورة ", [7] = "سرعة الهجوم ", [8] = "سرعة التحرك ", [9] = "سرعة السحر ", [10] = "تجديد نقاط الحياة ", [11] = "تجديد نقاط الأسلوب ", [12] = "فرصة التسمم ", [13] = "فرص الإغماء ", [14] = "فرص التبطيء ", [15] = "فرص الإصابة بضربة حرجة ", [16] = "فرص تحصيل ضربة خارقة ", [17] = "قوي ضد نصف بشر ", [18] = "قوي ضد الحيوانات ", [19] = "قوي ضد الغيلان ", [20] = "قوي ضد الطائفة السرية ", [21] = "قوي ضد الزومبي ", [22] = "قوي ضد الشيطان ", [23] = "إستيعاب نقاط الحياة ", [24] = "إستيعاب نقاط الأسلوب ", [25] = "فرص نهب نقاط الأسلوب ", [27] = "فرصة صَد الهجوم عن قرب ", [28] = "فرص تفادي الهجوم بالسهام ", [29] = "دفاع سيفي ", [30] = "دفاع سيف اليدين ", [31] = "دفاع خنجري ", [32] = "دفاع جرسي ", [33] = "دفاع مروحي ", [34] = "مقاومة السهم ", [37] = "مقاومة السحر ", [39] = "فرصُ عكس ضربات الهجمات عن قرب ", [41] = "مقاومة السموم ", [43] = "فرص الحصول على نقاط خبرة إضافية ", [44] = "فرص إسقاط ضعف كمية اليانغ ", [45] = "فرص إسقاط ضعف كمية الأشياء ", [48] = "دفاع ضد الإغماء ", [49] = "الدفاع ضد التباطؤ ", [53] = "قيمة الهجوم ", } ## ملف الكويست quest enchant_item begin state start begin when 20090.take begin say_title ("تاجرة السحر ") if not item.is_enchantable() then say("لايمكنن سحر هذا البند.") return end local i = 0 if item.addon_type() then item.set_value(0, 72, 55) i = i + 1 item.set_value(1, 71, -12) i = i + 1 end local attr_table = item.get_attr_table() while i <= 4 do local select_attr = {} for i,v in ipairs(attr_table) do table.insert(select_attr, i, apply_names[v]) end table.insert(select_attr, "Cancel") local bonus = select_table(select_attr) if bonus == table.getn(select_attr) then return end local apply = attr_table[bonus] if item.get_attr_max_value(apply) == 0 then return end item.remove_attr(apply) item.set_value(i, apply, item.get_attr_max_value(apply)) table.remove(attr_table, bonus) i = i + 1 end end end end شكر خاص ل @AstroMetin2 على إضافة التحقق من الميزات الثابتة للأداة رابط تحميل الشرح: [Hidden Content]
  3. No More (Random) Help Unless You're Trusted.. أرجو من الإدارة أرشفة الموضوع, وأعتذر.
  4. No More (Random) Help Unless You're Trusted.. أرجو من الإدارة أرشفة الموضوع, وأعتذر.
  5. الإستعمال : عندما ينعش اللاعب when revive begin [Hidden Content] الشرح مرفق في التحميل: [Hidden Content]
  6. الإستعمال :عندما يموت اللاعب when death begin [Hidden Content] Char_battle.cpp -إبحث عن : //CHECK_FORKEDROAD_WAR if (IsPC()) { أضف: quest::CQuestManager::instance().Death(GetPlayerID()); //DEATH EVENT الشكل الكامل: //CHECK_FORKEDROAD_WAR if (IsPC()) { quest::CQuestManager::instance().Death(GetPlayerID()); //DEATH EVENT if (CThreeWayWar::instance().IsThreeWayWarMapIndex(GetMapIndex())) isForked = true; } //END_CHECK_FORKEDROAD_WAR Quest.h قبل: QUEST_EVENT_COUNT -أضف: QUEST_DEATH_EVENT, //DEATH EVENT Questmanager.cpp -بعد: m_mapEventName.insert(TEventNameMap::value_type("item_informer", QUEST_ITEM_INFORMER_EVENT)); -اضف: m_mapEventName.insert(TEventNameMap::value_type("death", QUEST_DEATH_EVENT)); // DEATH EVENT -قبل: void CQuestManager::Letter(DWORD pc, DWORD quest_index, int state) -أضف: // DEATH EVENT void CQuestManager::Death(DWORD pc) { PC * pPC; if ((pPC = GetPC(pc))) { if (!CheckQuestLoaded(pPC)) return; m_mapNPC[QUEST_NO_NPC].OnDeath(*pPC); } else { sys_err("QUEST no such pc id : %d", pc); } } Questmanager.h -بعد: void Kill(unsigned int pc, unsigned int npc); -أضف: void Death(DWORD pc); // DEATH EVENT Questnpc.cpp -قبل: bool NPC::OnLevelUp(PC& pc) -أضف: // DEATH EVENT bool NPC::OnDeath(PC& pc) { return HandleReceiveAllEvent(pc, QUEST_DEATH_EVENT); } Questnpc.h -بعد: bool OnPartyKill(PC& pc); -أضف: bool OnDeath(PC& pc); // DEATH EVENT
×
×
  • Create New...