Jump to content

rawn3cr0

Member
  • Posts

    103
  • Joined

  • Last visited

  • Feedback

    0%

About rawn3cr0

  • Birthday 12/24/1997

Informations

  • Gender
    Male
  • Country
    Romania
  • Nationality
    Romanian

Recent Profile Visitors

973 profile views

rawn3cr0's Achievements

Community Regular

Community Regular (8/16)

  • Dedicated
  • Reacting Well
  • First Post
  • Collaborator
  • Week One Done

Recent Badges

1

Reputation

  1. Wow, nice job. Also old but gold xD Can you upload client please?
  2. I installed skill over P. I tried to assign this skill a different aura color than the normal one. EX: M-G-P normal aura skill / E = red aura skill moded I tried to make a loop, but only I can see it, the other players can't see it. How could I solve it? Code: void CInstanceBase::__Warrior_SetGeomgyeongAffect(bool isVisible) { if (isVisible) { if (IsWearingDress()) return; if (m_kWarrior.m_dwGeomgyeongEffect) __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect); m_GraphicThingInstance.SetReachScale(1.5f); if (m_GraphicThingInstance.IsTwoHandMode()) { DWORD dwSkillGrade = 0, dwSlotIndex = 0; if (CPythonPlayer::Instance().GetSkillSlotIndex(4, &dwSlotIndex)) { if (dwSlotIndex < SKILL_MAX_NUM) { dwSkillGrade = CPythonPlayer::Instance().GetSkillGrade(dwSlotIndex); if (dwSkillGrade == 4) m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+51); // Skill over P 2hands loop else m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_TWOHAND); // Normal skill } } } else { DWORD dwSkillGrade = 0, dwSlotIndex = 0; if (CPythonPlayer::Instance().GetSkillSlotIndex(4, &dwSlotIndex)) { if (dwSlotIndex < SKILL_MAX_NUM) { dwSkillGrade = CPythonPlayer::Instance().GetSkillGrade(dwSlotIndex); if (dwSkillGrade == 4) m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+50); // Skill over P 1hand loop else m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_ONEHAND); // Normal skill } } } } else { m_GraphicThingInstance.SetReachScale(1.0f); __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect); m_kWarrior.m_dwGeomgyeongEffect=0; } }
  3. Search for header 86 and see what system cause this handshake. Maybe you don;t have same packets client/server (packet.h ....)
  4. What does "I had multiple issues with many hosts" mean? Can you give more details about the problems?
  5. rawn3cr0

    New Aeldra

    New scam aeldra read my mind xD My opinion is that it is not the original Aeldra, now all servers look the same. Aeldra always comes with something special in gameplay, which this server does not inspire me.
  6. If someone have nothing to do and want to help me: I need a dungeon quest ( universal ) to use for multiple dungeons (Beran / Nemere / Razador / Alastor ...) # I want dungeon to work for single player and party group # I want to use regen files ( mob.txt / metin.txt / boss.txt ) # Need 30 minutes to complete dungeon, after this time warp all in town. # Need 3 levels: - 1) Kill all mobs (ex: 5 mobs ) - 2) Kill all metin stones (ex: 3mobs ) - 3) Kill boss # After dungeon is done i need a cooldown (ex: 10 minutes) I maked something similar with a dungeon quest + chatgpt and some help from camillo but im not sure is good enought: I have this error ( Save: quest::PC::Save : cannot find . in FlagMap ) with this quest and d.notice is not showing...: quest DragonLair_dungeon begin state start begin when 20090.chat."Dungeon RUN 3 -0" with pc.get_map_index() == 73 begin if pc.get_level() < 75 then say_title("DR:") say("[ENTER]Nivelul tau este prea scazut") elseif pc.get_level() > 127 then say_title("DR:") say("[ENTER]Nivelul tau este prea mare") --[Camilo's code] elseif pc.getqf("last_exit_time") > get_time() then say_title("DR:") local wait_time = pc.getqf("last_exit_time")-get_time() say(string.format("Wait time:%s", get_time_format(wait_time))) elseif party.is_in_dungeon() then say_title("DR:") say("Party is in dungeon now") elseif not party.is_map_member_flag_lt("last_exit_time" , get_time()) then say_title("DR:") say("Someone has to wait cooltime") else if party.is_party() then if party.is_leader() then d.new_jump_party(150, 8435, 10668) --no 00 DragonLair_dungeon.createDungeon() --new line else say("You are not leader group") end else d.new_jump(150, 843500, 1066800)-- Teleport pe harta ( Dungeon Map ) DragonLair_dungeon.createDungeon() --new line end --[Camilo's code] server_timer("timelimit_dungeon_exit", 300, d.get_map_index()) -- Seteaza un timer de 1 minut pentru a termina temnita end end --[STAGE 1] Inceput when login or enter with DragonLair_dungeon.isInDungeon(150) begin-- Când jucatorul se conecteaza ?i se afla pe indexul har?ii temni?ei d.set_warp_location(73, 2418, 12750)--Se seteaza locatia end when 8031.kill or 8032.kill or 8033.kill or 8034.kill with d.getf("DragonLair_stage01") == 1 begin-- Declan?atorul de ucidere a fost interogat cu semnalizarea misiunii local count = d.getf("kill_counter01") -1-- Variabila setata sa numere ?i scazând -1 din a treia d.setf("kill_counter01", count)-- Questflag pentru numarare pe misiune if count >= 1 then-- Întreba?i daca valoarea numarului este mai mare decât 1 d.notice("Ramas: "..count.."")-- Ie?ire text calculata cu valoarea curenta -1 elseif count == 0 then-- este contorul 0 d.notice("Sarcina 1 finalizata.")-- Ie?ire ca a?i finalizat nivelul d.setf("DragonLair_stage02", 1)--Indicatorul de cautare nivelul 2 setat pentru interogare d.setf("kill_counter02", 1)--Contor setat cu valoarea 100 d.regen_file("data/dungeon/dragon_lair/boss.txt")--Regenfile [STAGE 2] end end --[STAGE 1] Sfarsit -- [STAGE 2] Inceput when 2493.kill with d.getf("DragonLair_stage02") == 1 begin local count = d.getf("DragonLair_stage02") -1 d.setf("kill_counter02", count) if count >= 1 then d.notice("Ramas: "..count.."") elseif count == 0 then d.notice("Sarcina 2 finalizata.") server_timer("end_dungeon_exit", 20 , d.get_map_index())--Cateva secunde pentru iesire end d.setqf("last_exit_time" , get_time()+60*10) --[Camilo's code] 10 minutes end --[STAGE 2] Sfarsit -- Functie terminare limita de timp dungeon when timelimit_dungeon_exit.server_timer begin if d.select(get_server_timer_arg()) then DragonLair_dungeon.clearDungeon() d.exit_all() end end -- Functie iesire terminare dungeon when end_dungeon_exit.server_timer begin if d.select(get_server_timer_arg()) then DragonLair_dungeon.clearDungeon() d.exit_all() end end -- Verificare de securitate la deconectare when logout begin d.set_warp_location(73, 2418, 12750) if DragonLair_dungeon.isInDungeon() then DragonLair_dungeon.clearDungeon() end end end -- FUNCTIONS BEGIN state __FUNCTIONS__ begin function isInDungeon() return pc.get_map_index() >= (150 * 10000) and pc.get_map_index() < ((150+1) * 10000)-- Calculul indexului har?ii pentru interogarea de securitate end function clearDungeon() d.setf("DragonLair_stage01", 0) d.setf("DragonLair_stage02", 0) d.kill_all() d.clear_regen() d.clear_regen() clear_server_timer("end_dungeon_exit", get_server_timer_arg()) end function createDungeon() d.regen_file("data/dungeon/dragon_lair/metins.txt")--Regenfile [STAGE 1] d.notice("Distruge toate pietrele de metin.")-- Text d.setf("DragonLair_stage01", 1)--Setul de nivel 1 pentru interogare d.setf("kill_counter01", 4)--Contor setat cu valoarea 3 end end -- FUNCTIONS END end--Quest
  7. EDIT: Solved. If it doesn't work with POISON in SetImmuneFlag go in char_resist.cpp > void CHARACTER::AttackedByPoison(LPCHARACTER pkAttacker) uncomment or put if (IsImmune(IMMUNE_POISON)) return;
  8. Everything else works perfectly but metin stone will have the green bar even if they can't be poisoned. How i can fix this? I put POISON on SetImmuneFlag but nothing.
  9. How can I change the average price to appear in the items in the inventory? For example, put the cursor on an item in the inventory and it will show you the average price that is sold in stores.
  10. Yes. Is working. This is writed by me. Put all ports from core in portfwording table from router. And is working. Configure freebsd with internal ip from router (ex: 192.168.0.104) and in cores config at CONNECTION_IP: external ip (ex: 109.197.77.163) or if you use directly in source without update for CONNECTION_IP ex: memcpy(p.szIP, "109.197.77.163", 16); In client at ip in serverinfo.py put external ip ex: 109.197.77.163 Done!
  11. If I put an object for example at 100k, I look for it, I offer to buy it but I don't accept and then I change the price of the object to 5kk and I agree to buy it, he will buy it at the price of 5kk. I want to do something but I don't know, a kind of price check to not buy if is not same price... I use Mali's Official Private Shop Search Video and code down: void CShopManager::ShopSearchProcess(LPCHARACTER ch, const TPacketCGPrivateShopSearch* p) { if (ch == NULL || ch->GetDesc() == NULL || p == NULL) return; if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]31")); return; } TEMP_BUFFER buf; for (std::map<DWORD, CShop*>::const_iterator it = m_map_pkShopByPC.begin(); it != m_map_pkShopByPC.end(); ++it) { CShop* tShopTable = it->second; if (tShopTable == NULL || tShopTable->LockStatus()) continue; LPCHARACTER GetOwner = tShopTable->GetShopOwner(); if (GetOwner == NULL || ch == GetOwner) continue; const std::vector<CShop::SHOP_ITEM>& vItemVec = tShopTable->GetItemVector(); for (std::vector<CShop::SHOP_ITEM>::const_iterator ShopIter = vItemVec.begin(); ShopIter != vItemVec.end(); ++ShopIter) { LPITEM item = ShopIter->pkItem; if (item == NULL) continue; /*First n character equals(case insensitive)*/ if (strncasecmp(item->GetName(), p->szItemName, strlen(p->szItemName))) continue; if ((p->iMinRefine <= item->GetRefineLevel() && p->iMaxRefine >= item->GetRefineLevel()) == false) continue; if ((p->iMinLevel <= item->GetLevelLimit() && p->iMaxLevel >= item->GetLevelLimit()) == false) continue; if ((p->iMinGold <= ShopIter->price && p->iMaxGold >= ShopIter->price) == false) continue; if (p->bMaskType != ITEM_NONE && p->bMaskType != item->GetType()) // ITEM_NONE: All Categories continue; if (p->iMaskSub != -1 && p->iMaskSub != item->GetSubType()) // -1: No SubType Check continue; switch (p->bJob) { case JOB_WARRIOR: if (item->GetAntiFlag() & ITEM_ANTIFLAG_WARRIOR) continue; break; case JOB_ASSASSIN: if (item->GetAntiFlag() & ITEM_ANTIFLAG_ASSASSIN) continue; break; case JOB_SHAMAN: if (item->GetAntiFlag() & ITEM_ANTIFLAG_SHAMAN) continue; break; case JOB_SURA: if (item->GetAntiFlag() & ITEM_ANTIFLAG_SURA) continue; break; } TPacketGCPrivateShopSearchItem pack2; pack2.item.vnum = ShopIter->vnum; pack2.item.price = ShopIter->price; pack2.item.count = ShopIter->count; pack2.item.display_pos = static_cast<BYTE>(std::distance(vItemVec.begin(), ShopIter)); if (item->GetOwner()) pack2.dwShopPID = item->GetOwner()->GetVID(); else pack2.dwShopPID = 0; std::memcpy(&pack2.szSellerName, GetOwner->GetName(), sizeof(pack2.szSellerName)); std::memcpy(&pack2.item.alSockets, item->GetSockets(), sizeof(pack2.item.alSockets)); std::memcpy(&pack2.item.aAttr, item->GetAttributes(), sizeof(pack2.item.aAttr)); buf.write(&pack2, sizeof(pack2)); } } if (buf.size() <= 0) return; TPacketGCPrivateShopSearch pack; pack.header = HEADER_GC_PRIVATE_SHOP_SEARCH; pack.size = static_cast<WORD>(sizeof(pack) + buf.size()); ch->GetDesc()->BufferedPacket(&pack, sizeof(pack)); ch->GetDesc()->Packet(buf.read_peek(), buf.size()); } #include "unique_item.h" #include "target.h" void CShopManager::ShopSearchBuy(LPCHARACTER ch, const TPacketCGPrivateShopSearchBuyItem* p) { if (ch == NULL || ch->GetDesc() == NULL || p == NULL) return; int32_t shopVid = p->dwShopPID; if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]31")); return; } LPCHARACTER ShopCH = CHARACTER_MANAGER::instance().Find(shopVid); if (ShopCH == NULL) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]753")); return; } if (ch == ShopCH) // what? return; CShop* pkShop = ShopCH->GetMyShop(); if (pkShop == NULL || pkShop->IsPCShop() == false) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]753")); return; } const BYTE bState = ch->GetPrivateShopSearchState(); switch (bState) { case SHOP_SEARCH_LOOKING: { if (ch->CountSpecifyItem(PRIVATE_SHOP_SEARCH_LOOKING_GLASS) == 0) { const TItemTable* GlassTable = ITEM_MANAGER::instance().GetTable(PRIVATE_SHOP_SEARCH_LOOKING_GLASS); if (GlassTable) ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]754"), GlassTable->szLocaleName); return; } if (ch->GetMapIndex() != ShopCH->GetMapIndex()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]755")); return; } if (pkShop->LockStatus()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]948")); return; } const DWORD dwSellerVID(ShopCH->GetVID()); if (CTargetManager::instance().GetTargetInfo(ch->GetPlayerID(), TARGET_TYPE_VID_SHOP_SEARCH, dwSellerVID)) CTargetManager::instance().DeleteTarget(ch->GetPlayerID(), SHOP_SEARCH_INDEX, "__SHOPSEARCH_TARGET__"); CTargetManager::Instance().CreateTarget(ch->GetPlayerID(), SHOP_SEARCH_INDEX, "__SHOPSEARCH_TARGET__", TARGET_TYPE_VID_SHOP_SEARCH, dwSellerVID, 0, ch->GetMapIndex(), LC_TEXT("[LC]949"), 1); if (CTargetManager::instance().GetTargetInfo(ch->GetPlayerID(), TARGET_TYPE_VID_SHOP_SEARCH, dwSellerVID)) ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]756")); break; } case SHOP_SEARCH_TRADING: { if (ch->CountSpecifyItem(PRIVATE_SHOP_SEARCH_TRADING_GLASS) == 0) { const TItemTable* GlassTable = ITEM_MANAGER::instance().GetTable(PRIVATE_SHOP_SEARCH_TRADING_GLASS); if (GlassTable) ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]754"), GlassTable->szLocaleName); return; } if (pkShop->LockStatus()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]948")); return; } ch->SetMyShopTime(); const std::vector<CShop::SHOP_ITEM>& vItemVec = pkShop->GetItemVector(); const CShop::SHOP_ITEM& item = vItemVec[p->bPos]; ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Pret magazin: %u"), item.price); // Here need something like // if (item.price != shop_search_view_price_but_i_dont_know) ///// int ret = pkShop->Buy(ch, p->bPos, true); if (SHOP_SUBHEADER_GC_OK != ret) { TPacketGCShop pack; pack.header = HEADER_GC_SHOP; pack.subheader = static_cast<BYTE>(ret); pack.size = sizeof(TPacketGCShop); ch->GetDesc()->Packet(&pack, sizeof(pack)); } else ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[LC]757")); break; } default: sys_err("ShopSearchBuy ch(%s) wrong state(%d)", ch->GetName(), bState); break; } }
  12. I installed ClientLocaleString. THIS I did all the translation lines manually. ( 1 week every day 8hours of translating ) But I have some Problems with: 1) Horse name: How i can translate ?--> m_chHorse->m_stName += LC_TEXT("님의 말- Horse"); void CHARACTER::HorseSummon(bool bSummon, bool bFromFar, DWORD dwVnum, const char* pPetName) { if ( bSummon ) { //NOTE : summon했는데 이미 horse가 있으면 아무것도 안한다. if( m_chHorse != NULL ) return; if (GetHorseLevel() <= 0) return; // 무언가를 타고 있다면 실패 if (IsRiding()) return; sys_log(0, "HorseSummon : %s lv:%d bSummon:%d fromFar:%d", GetName(), GetLevel(), bSummon, bFromFar); long x = GetX(); long y = GetY(); if (GetHorseHealth() <= 0) bFromFar = false; if (bFromFar) { x += (number(0, 1) * 2 - 1) * number(2000, 2500); y += (number(0, 1) * 2 - 1) * number(2000, 2500); } else { x += number(-100, 100); y += number(-100, 100); } m_chHorse = CHARACTER_MANAGER::instance().SpawnMob( (0 == dwVnum) ? GetMyHorseVnum() : dwVnum, GetMapIndex(), x, y, GetZ(), false, (int)(GetRotation()+180), false); if (!m_chHorse) { LocaleChatPacket(CHAT_TYPE_INFO, 98, " "); return; } if (GetHorseHealth() <= 0) { // 죽은거처럼 있게 하는 처리 m_chHorse->SetPosition(POS_DEAD); // 일정시간있다 사라지게 하자. char_event_info* info = AllocEventInfo<char_event_info>(); info->ch = this; m_chHorse->m_pkDeadEvent = event_create(horse_dead_event, info, PASSES_PER_SEC(60)); } m_chHorse->SetLevel(GetHorseLevel()); const char* pHorseName = CHorseNameManager::instance().GetHorseName(GetPlayerID()); if ( pHorseName != NULL && strlen(pHorseName) != 0 ) { m_chHorse->m_stName = pHorseName; } else { m_chHorse->m_stName = GetName(); m_chHorse->m_stName += LC_TEXT("님의 말"); } if (!m_chHorse->Show(GetMapIndex(), x, y, GetZ())) { M2_DESTROY_CHARACTER(m_chHorse); sys_err("cannot show monster"); m_chHorse = NULL; return; } if ((GetHorseHealth() <= 0)) { TPacketGCDead pack; pack.header = HEADER_GC_DEAD; pack.vid = m_chHorse->GetVID(); PacketAround(&pack, sizeof(pack)); } m_chHorse->SetRider(this); } else { if (!m_chHorse) return; LPCHARACTER chHorse = m_chHorse; chHorse->SetRider(NULL); // m_chHorse assign to NULL if (!bFromFar) { M2_DESTROY_CHARACTER(chHorse); } else { // 멀어지면서 사라지는 처리 하기 chHorse->SetNowWalking(false); float fx, fy; chHorse->SetRotation(GetDegreeFromPositionXY(chHorse->GetX(), chHorse->GetY(), GetX(), GetY())+180); GetDeltaByDegree(chHorse->GetRotation(), 3500, &fx, &fy); chHorse->Goto((long)(chHorse->GetX()+fx), (long) (chHorse->GetY()+fy)); chHorse->SendMovePacket(FUNC_WAIT, 0, 0, 0, 0); } m_chHorse = NULL; } } 2) Dice in party use ChatPacketToAllMember How i can translate ?--> ch->GetParty()->ChatPacketToAllMember(CHAT_TYPE_INFO, LC_TEXT("%s a aruncat zarurile.El/Ea a aruncat %d (%d-%d)."), ch->GetName(), n, start, end); void CParty::ChatPacketToAllMember(BYTE type, const char* format, ...) { char chatbuf[CHAT_MAX_LEN + 1]; va_list args; va_start(args, format); vsnprintf(chatbuf, sizeof(chatbuf), format, args); va_end(args); TMemberMap::iterator it; for (it = m_memberMap.begin(); it != m_memberMap.end(); ++it) { TMember & rMember = it->second; if (rMember.pCharacter) { if (rMember.pCharacter->GetDesc()) { rMember.pCharacter->ChatPacket(type, "%s", chatbuf); } } } } 3) PvP Arena use SendChatPacketToObserver How i can translate ?--> pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("대련 상대가 사라져 대련을 종료합니다.")); void CArena::SendChatPacketToObserver(BYTE type, const char * format, ...) { char chatbuf[CHAT_MAX_LEN + 1]; va_list args; va_start(args, format); vsnprintf(chatbuf, sizeof(chatbuf), format, args); va_end(args); itertype(m_mapObserver) iter = m_mapObserver.begin(); for (; iter != m_mapObserver.end(); iter++) { LPCHARACTER pChar = iter->second; if (pChar != NULL) { if (pChar->GetDesc() != NULL) { pChar->ChatPacket(type, chatbuf); } } } } This is all. I don't know what changes need to be made to go with LocaleChatPacket I just don't want to know that I worked for a week for nothing. Respectfully. And thanks for the help. All the best.
  13. I edited this for Arena PvP void CArena::SendChatPacketToObserver(BYTE type, DWORD dwIndex, const char * format, ...) { char chatbuf[CHAT_MAX_LEN + 1]; va_list args; va_start(args, format); vsnprintf(chatbuf, sizeof(chatbuf), format, args); va_end(args); itertype(m_mapObserver) iter = m_mapObserver.begin(); for (; iter != m_mapObserver.end(); iter++) { LPCHARACTER pChar = iter->second; if (pChar != NULL) { if (pChar->GetDesc() != NULL) { pChar->LocaleChatPacket(type, dwIndex, chatbuf); } } } } Is working but not show %s = player Ex: PlayerX win this arena. And show like this: ☐ win this arena.
  14. Update. I make a timer with chatgpt xD and is working. And i change some.. I still have to do: A) I want to have a waiting time after the dungeon is finished. (Cooldown) B) I want it to be possible to enter both as a group and solo. Thank you and much respect. quest DragonLair_dungeon begin state start begin when 20090.chat."Dungeon RUN" with pc.get_map_index() == 73 begin if pc.get_level() < 75 then -- Daca jucatorul este sub nivel 15 say_title("DR:")--Text cu nume NPC say("[ENTER]Nivelul tau este prea scazut")-- Text cu paragraf elseif pc.get_level() > 150 then--Daca jucatorul este peste nivel 75 say_title("DR:")--Text cu nume NPC say("[ENTER]Nivelul tau este prea mare")-- Text cu paragraf else-- Daca jucatorul are inter lv 15 si lv 75 ( alles andere ) d.new_jump(150, 843500, 1066800)-- Teleport pe harta ( Dungeon Map ) server_timer("timelimit_dungeon_exit", 60, d.get_map_index()) -- Seteaza un timer de 1 minut pentru a termina temnita end end --[STAGE 1] Inceput when login or enter with DragonLair_dungeon.isInDungeon(150) begin-- Când jucatorul se conecteaza ?i se afla pe indexul har?ii temni?ei d.set_warp_location(73, 2418, 12750)--Se seteaza locatia d.regen_file("data/dungeon/dragon_lair/metins.txt")--Regenfile [STAGE 1] d.notice("Distruge toate pietrele de metin.")-- Text d.setf("DragonLair_stage01", 1)--Setul de nivel 1 pentru interogare d.setf("kill_counter01", 4)--Contor setat cu valoarea 3 end when 8031.kill or 8032.kill or 8033.kill or 8034.kill with d.getf("DragonLair_stage01") == 1 begin-- Declan?atorul de ucidere a fost interogat cu semnalizarea misiunii local count = d.getf("kill_counter01") -1-- Variabila setata sa numere ?i scazând -1 din a treia d.setf("kill_counter01", count)-- Questflag pentru numarare pe misiune if count >= 1 then-- Întreba?i daca valoarea numarului este mai mare decât 1 d.notice("Ramas: "..count.."")-- Ie?ire text calculata cu valoarea curenta -1 elseif count == 0 then-- este contorul 0 d.notice("Sarcina 1 finalizata.")-- Ie?ire ca a?i finalizat nivelul d.setf("DragonLair_stage02", 1)--Indicatorul de cautare nivelul 2 setat pentru interogare d.setf("kill_counter02", 1)--Contor setat cu valoarea 100 d.regen_file("data/dungeon/dragon_lair/boss.txt")--Regenfile [STAGE 2] end end --[STAGE 1] Sfarsit -- [STAGE 2] Inceput when 2493.kill with d.getf("DragonLair_stage02") == 1 begin local count = d.getf("DragonLair_stage02") -1 d.setf("kill_counter02", count) if count >= 1 then d.notice("Ramas: "..count.."") elseif count == 0 then d.notice("Sarcina 2 finalizata.") server_timer("end_dungeon_exit", 20 , d.get_map_index())--Cateva secunde pentru iesire end end --[STAGE 2] Sfarsit -- Functie terminare limita de timp dungeon when timelimit_dungeon_exit.server_timer begin if d.select(get_server_timer_arg()) then DragonLair_dungeon.clearDungeon() d.exit_all() end end -- Functie iesire terminare dungeon when end_dungeon_exit.server_timer begin if d.select(get_server_timer_arg()) then DragonLair_dungeon.clearDungeon() d.exit_all() end end -- Verificare de securitate la deconectare when logout begin if DragonLair_dungeon.isInDungeon() then DragonLair_dungeon.clearDungeon() end end end -- FUNCTIONS BEGIN state __FUNCTIONS__ begin function isInDungeon(idx) return pc.get_map_index() >= (idx * 10000) and pc.get_map_index() < ((idx+1) * 10000)-- Calculul indexului har?ii pentru interogarea de securitate end function clearDungeon() d.setf("DragonLair_stage01", 0) d.setf("DragonLair_stage02", 0) d.kill_all() d.clear_regen() d.clear_regen() clear_server_timer("end_dungeon_exit", get_server_timer_arg()) end end -- FUNCTIONS END end--Quest
×
×
  • 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.