Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 11/24/18 in all areas

  1. Some of my creations made in 2018 Halloween 2018. Image: Video: Desert Map1 Image: Rework Map1 Video: Jurassic Park Video: Christmas Map1 Image JINNO: CHUNJO: SHINSHOO: Rework of all Maps: Video:
    1 point
  2. M2 Download Center Download Here ( Internal ) Hi! Christmas time is coming and there is a little gift for you! Spider dungeon with official textures for better use. Of course implement boss room from offi severs. In pack: 4x4 map Objects and effects property files textures !Don't reuopload to other forums... If I'll want, I'll upload it myself... THANKS! I haven't time to make video, so there is some screens: Download: Have fun!
    1 point
  3. Check PM, I will send you my full code to explain it
    1 point
  4. M2 Download Center Download Here ( Internal ) Download
    1 point
  5. So you can define a new function, before def __GetAttributeColor(self, index, value) like this: def __AppendItemRarity(self, attrSlot): RareList = ["Common","Uncommon","Rare","Legendary","Epic","From other universe"] idxRarity = 0 if 0 != attrSlot: for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): type = attrSlot[i][0] value = attrSlot[i][1] if value == 0: continue # HERE IS WHERE YOU MUST CHECK THE VALUES AND TYPES # # you have type and value, so you can increase idxRarity # like you want # ............... # The next lines is if idxRarity between 0 and 100 if idxRarity == 0: self.AppendTextLine(RareList[0], self.COLOR_RARE_0) elif idxRarity < 20: self.AppendTextLine(RareList[1], self.COLOR_RARE_1) elif idxRarity < 40: self.AppendTextLine(RareList[2], self.COLOR_RARE_2) elif idxRarity < 60: self.AppendTextLine(RareList[3], self.COLOR_RARE_3) elif idxRarity < 80: self.AppendTextLine(RareList[4], self.COLOR_RARE_4) else: self.AppendTextLine(RareList[5], self.COLOR_RARE_5) Search: self.__AppendAttributeInformation(attrSlot) And add after: self.__AppendItemRarity(attrSlot) And don't forget to define the colors in class ToolTip(ui.ThinBoard). ############ Some tips: - You can make a dictionary with some types and ranges of values to simplify. - You can use the same condition in attributes with "same values" (for example in defenses against weapons). ############ Example (i did it to test) :
    1 point
  6. Idk if I understand your question, but if I did -> Search: self.__AppendAttributeInformation(attrSlot) You will find more than one match (for weapon, armor, belt, rings, costume), so select it like you want (in this case costume). Then make a new line and add something like: self.AppendTextLine("some text...", self.MY_NEW_COLOR) And finally search NORMAL_COLOR in class ToolTip(ui.ThinBoard), make a new line and define MY_NEW_COLOR: NORMAL_COLOR = grp.GenerateColor(0.7607, 0.7607, 0.7607, 1.0) MY_NEW_COLOR = grp.GenerateColor(0.6863, 0.9725, 0.3216, 1.0) And change the color like you want...
    1 point
  7. thank you so much you've solved the problem, you're great: D
    1 point
  8. Uhmmm, maybe the problem is in void CInstanceBase::RefreshState(DWORD dwMotIndex, bool isLoop), check this function
    1 point
  9. It doesn't remove the spawn. The spawn continues. See that: else if (p->m_table.bType == CHAR_TYPE_NPC || p->m_table.bType == CHAR_TYPE_WARP || p->m_table.bType == CHAR_TYPE_GOTO) doesn't include CHAR_TYPE_MONSTER and monsters are spawned. ------------------------------------- What it does? Basically we don't add the position of npc with vnum 9004 to m_mapNPCPosition[lMapIndex] (it isn't related with the spawn), so when the game send the packet of npc's positions in each map, it will not contain the position of npc with vnum 9004 and it isn't marked in atlas. You can prove this by seeing the next functions: InsertNPCPosition in sectree_manager.cpp: void SECTREE_MANAGER::InsertNPCPosition(long lMapIndex, BYTE bType, const char* szName, long x, long y) { m_mapNPCPosition[lMapIndex].push_back(npc_info(bType, szName, x, y)); } And SendNPCPosition in the same file: void SECTREE_MANAGER::SendNPCPosition(LPCHARACTER ch) { LPDESC d = ch->GetDesc(); if (!d) return; long lMapIndex = ch->GetMapIndex(); if (m_mapNPCPosition[lMapIndex].empty()) return; TEMP_BUFFER buf; TPacketGCNPCPosition p; p.header = HEADER_GC_NPC_POSITION; p.count = m_mapNPCPosition[lMapIndex].size(); TNPCPosition np; // TODO m_mapNPCPosition[lMapIndex] 를 보내주세요 itertype(m_mapNPCPosition[lMapIndex]) it; for (it = m_mapNPCPosition[lMapIndex].begin(); it != m_mapNPCPosition[lMapIndex].end(); ++it) { np.bType = it->bType; strlcpy(np.name, it->name, sizeof(np.name)); np.x = it->x; np.y = it->y; buf.write(&np, sizeof(np)); } p.size = sizeof(p) + buf.size(); if (buf.size()) { d->BufferedPacket(&p, sizeof(TPacketGCNPCPosition)); d->Packet(buf.read_peek(), buf.size()); } else d->Packet(&p, sizeof(TPacketGCNPCPosition)); } Then go to client -> ../UserInterface/PythonNetworkStreamPhaseGame.cpp and see CPythonNetworkStream::RecvNPCList() bool CPythonNetworkStream::RecvNPCList() { TPacketGCNPCPosition kNPCPosition; if (!Recv(sizeof(kNPCPosition), &kNPCPosition)) return false; assert(int(kNPCPosition.size)-sizeof(kNPCPosition) == kNPCPosition.count*sizeof(TNPCPosition) && "HEADER_GC_NPC_POSITION"); CPythonMiniMap::Instance().ClearAtlasMarkInfo(); for (int i = 0; i < kNPCPosition.count; ++i) { TNPCPosition NPCPosition; if (!Recv(sizeof(TNPCPosition), &NPCPosition)) return false; CPythonMiniMap::Instance().RegisterAtlasMark(NPCPosition.bType, NPCPosition.name, NPCPosition.x, NPCPosition.y); } return true; } If you can see at the start we get the packet of npc position and in the last lines we mark the position in the atlas: CPythonMiniMap::Instance().RegisterAtlasMark(NPCPosition.bType, NPCPosition.name, NPCPosition.x, NPCPosition.y);
    1 point
  10. Open ../game/src/regen.cpp and search: else if (p->m_table.bType == CHAR_TYPE_NPC || p->m_table.bType == CHAR_TYPE_WARP || p->m_table.bType == CHAR_TYPE_GOTO) { SECTREE_MANAGER::instance().InsertNPCPosition(lMapIndex, p->m_table.bType, p->m_table.szLocaleName, (regen->sx+regen->ex) / 2 - base_x, (regen->sy+regen->ey) / 2 - base_y); } And do some like that: else if (p->m_table.bType == CHAR_TYPE_NPC || p->m_table.bType == CHAR_TYPE_WARP || p->m_table.bType == CHAR_TYPE_GOTO) { if (regen->vnum != 9004) { SECTREE_MANAGER::instance().InsertNPCPosition(lMapIndex, p->m_table.bType, p->m_table.szLocaleName, (regen->sx+regen->ex) / 2 - base_x, (regen->sy+regen->ey) / 2 - base_y); } } Or if you want to hide more than one npc, you can do something like that: else if (p->m_table.bType == CHAR_TYPE_NPC || p->m_table.bType == CHAR_TYPE_WARP || p->m_table.bType == CHAR_TYPE_GOTO) { int hideList[] = {9004,9099}; // here you must add the vnums std::vector<int> H(hideList, hideList + sizeof(hideList)/sizeof(hideList[0])); if (find(H.begin(),H.end(),regen->vnum) == H.end()) { SECTREE_MANAGER::instance().InsertNPCPosition(lMapIndex, p->m_table.bType, p->m_table.szLocaleName, (regen->sx+regen->ex) / 2 - base_x, (regen->sy+regen->ey) / 2 - base_y); } }
    1 point
  11. M2 Download Center Download Here ( Internal ) Today I needed the original icon without the text on it, so I prepared it. I put it here on the forum, maybe it will also be useful to someone Download: [Hidden Content]
    1 point
  12. Here is an ugly (but easy) way to solve it: In client pack, go to locale_xx/locale/xx/effect/ and open gm.mse (in my case locale_ro/locale/ro/effect/gm.mse). And replace: StartTime 0.000000 With: StartTime 2.000000 When you login (or teleport) the logo will be shown after 2 secs. So if you are invisibility it will be detached before showing.
    1 point
×
×
  • 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.