-
Posts
106 -
Joined
-
Last visited
-
Feedback
0%
About rawn3cr0

- Birthday 12/24/1997
Informations
-
Gender
Male
-
Country
Romania
-
Nationality
Romanian
Recent Profile Visitors
2094 profile views
rawn3cr0's Achievements
-
rawn3cr0 started following Infinity dungeon (TUTORIAL) by caanmasu , [Bug on all servers] How to fix this? , QuickSell in SpecialInventory Problem and 7 others
-
[Bug on all servers] How to fix this?
rawn3cr0 replied to HFWhite's topic in Community Support - Questions & Answers
I have this but i don't have this bug.. if (!IsEmptyItemGrid(DestCell, item->GetSize(), Cell.cell)) return false; Maybe because of: if (Cell.IsSamePosition(DestCell)) // @fixme196 (check same slot n same window aliases) (05.24/Adapted for overlapping objects: special inventory - inventory and move item if have same slotid SI=I) return false; -
QuickSell in SpecialInventory Problem
rawn3cr0 replied to rawn3cr0's topic in Community Support - Questions & Answers
I solved. I made a separate function for the sale slot in the special inventory. By default, the slot from the normal inventory was also used. Solved -
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; } }
-
- 1
-
-
Server crash on window moving
rawn3cr0 replied to lTz's topic in Community Support - Questions & Answers
Search for header 86 and see what system cause this handshake. Maybe you don;t have same packets client/server (packet.h ....) -
rawn3cr0 changed their profile photo
-
What does "I had multiple issues with many hosts" mean? Can you give more details about the problems?
-
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.
-
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
-
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;
-
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.
-
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.
-
private hosting from home help please
rawn3cr0 replied to RobinHoodye's topic in Community Support - Questions & Answers
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! -
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; } }
