private static void LoadCharInfo(string charID, ref Packet result) { KODatabase db = new KODatabase(); var user = db.USERDATA.Where(u => u.strUserID == charID).First(); int nHair = 0; short sClass = 0; byte bRace = 0, bLevel = 0, bFace = 0, bZone = 0; string strItem = String.Empty; byte[] ItemArray = new byte[INVENTORY_TOTAL * 8];// = ToBytes(strItem); if (user != null) { result.SetString(user.strUserID); result.SetByte(user.Race); result.SetShort(user.Class); result.SetByte(user.Level); result.SetByte(user.Face); result.SetDword(user.HairRGB); result.SetByte(user.Zone); Packet item = new Packet(); item.append(user.strItem, user.strItem.Length); for (int i = 0; i < SLOT_MAX; i++) { int nItemID; short sDurability, sCount; nItemID = item.GetDWORD(); sDurability = item.GetShort(); sCount = item.GetShort(); if (i == HEAD || i == BREAST || i == SHOULDER || i == LEG || i == GLOVE || i == FOOT || i == RIGHTHAND || i == LEFTHAND) { result.SetDword(nItemID); result.SetShort(sDurability); } } } else { result.SetString(charID); result.SetByte(bRace); result.SetShort(sClass); result.SetByte(bLevel); result.SetByte(bFace); result.SetDword(nHair); result.SetByte(bZone); for (int i = 0; i < SLOT_MAX; i++) { if (i == HEAD || i == BREAST || i == SHOULDER || i == LEG || i == GLOVE || i == FOOT || i == RIGHTHAND || i == LEFTHAND) { result.SetDword(0); result.SetShort(0); } } } }
public void GetRegionUserList(int x, int z, ref Packet result, ref short user_count, short nEventRoom, User pSendUser) { foreach (Pair <short, User, int> itr in m_arUserList) { User pUser = itr.Second; //if (pUser == null && !pUser.isInGame()) // continue; // if (pUser.GetRegionX() != x || pUser.GetRegionZ() != z) continue; if (nEventRoom > 0 && nEventRoom != pUser.GetEventRoom()) { continue; } // Regionlar kontrol edilecek result.SetByte(0); result.SetShort(pUser.GetSocketID()); pUser.GetUserInfo(ref result); user_count++; } }
private void HandleVersion(Packet pkt) { Packet result = new Packet((byte)LogonOpcodes.LS_VERSION_REQ); result.SetShort(g_pMain.version); Send(result); }
internal void NpcInOutForMe(User pSendUser) { Packet result = new Packet(WIZ_REQ_NPCIN); result.SetShort(0); pSendUser.Send(result); }
internal void MerchantUserInOutForMe(User pSendUser) { Packet result = new Packet(WIZ_MERCHANT_INOUT); result.SetShort(0); pSendUser.Send(result); }
private void HandleLogin(Packet pkt) { KODatabase db = new KODatabase(); string AccountID = pkt.GetString(), Passwd = pkt.GetString(); short resultCode = 1; if (AccountID == string.Empty || AccountID.Length >= Define.MAX_ID_SIZE || Passwd == string.Empty || Passwd.Length >= Define.MAX_PW_SIZE) { resultCode = 2; } else { resultCode = db.TB_USER.Where(u => u.strAccountID == AccountID && u.strPasswd == Passwd).Count() > 0 ? (short)1 : (short)2; } Packet result = new Packet((byte)LogonOpcodes.LS_LOGIN_REQ); result.SetByte((byte)resultCode); if (resultCode == 1) { result.SetShort((short)db.ACCOUNT_PREMIUM(AccountID)); result.SetString(AccountID); } Send(result); Debug.WriteLine("Kullanıcı girişi : {1} - {0}", resultCode, AccountID); }
internal static void VersionCheck(User user) { Packet resut = new Packet(15); resut.SetByte(WIZ_VERSION_CHECK); resut.SetByte(0); resut.SetShort(__VERSION); resut.SetInt64(0); user.Send(resut); }
private void HandeleServerList(Packet pkt) { short echo = pkt.GetShort(); Packet result = new Packet((byte)LogonOpcodes.LS_SERVERLIST); result.SetShort(echo); g_pMain.GetServerList(ref result); Send(result); }
internal void UserInOutForMe(User pSendUser) { Packet result = new Packet(WIZ_REQ_USERIN); short user_count = 0; Packet temp = new Packet(); short rx = pSendUser.GetRegionX(), rz = pSendUser.GetRegionZ(); for (int x = -3; x <= 3; x++) { for (int z = -3; z <= 3; z++) { GetRegionUserList(rx + x, rz + z, ref temp, ref user_count, pSendUser.GetEventRoom(), pSendUser); } } result.SetShort(user_count); result.append(temp.send_byte, temp.send_index); pSendUser.Send(result); }
internal void GetServerList(ref Packet result) { KODatabase db = new KODatabase(); short CurrentUserCount = (short)db.CURRENTUSER.Count(); result.SetByte((byte)ServerList.Count); foreach (SERVER_INFO server in ServerList) { result.SetString(server.strServerIP); result.SetString(server.strLanIP); result.SetString(server.strServerName); if (CurrentUserCount <= server.sPlayerCap) { result.SetShort(CurrentUserCount); } else { result.SetShort(-1); } result.SetShort(server.sServerID); result.SetShort(server.sGroupID); result.SetShort(server.sPlayerCap); result.SetShort(server.sFreePlayerCap); result.SetByte(0); result.SetString(server.strKarusKingName); result.SetString(server.strKarusNotice); result.SetString(server.strElMoradKingName); result.SetString(server.strElMoradNotice); } }
public void SendItemMove(byte subcommand) { Packet result = new Packet(WIZ_ITEM_MOVE, 0x01); result.SetByte(subcommand); if (m_bAttackAmount == 0) m_bAttackAmount = 100; // If the subcommand is not error, send the stats. if (subcommand != 0) { result.SetShort((short)(m_sTotalHit * m_bAttackAmount / 100)); result.SetShort((short)(m_sTotalAc + m_sACAmount)); result.SetDword(m_sMaxWeight); result.SetShort(m_iMaxHp); result.SetShort(m_iMaxMp); result.SetShort(GetStatBonusTotal(StatType.STAT_STR)); result.SetShort(GetStatBonusTotal(StatType.STAT_STA)); result.SetShort(GetStatBonusTotal(StatType.STAT_DEX)); result.SetShort(GetStatBonusTotal(StatType.STAT_INT)); result.SetShort(GetStatBonusTotal(StatType.STAT_CHA)); result.SetShort((short)(((m_sFireR + m_bAddFireR) * m_bPctFireR / 100) + m_bResistanceBonus)); result.SetShort((short)(((m_sColdR + m_bAddColdR) * m_bPctColdR / 100) + m_bResistanceBonus)); result.SetShort((short)(((m_sLightningR + m_bAddLightningR) * m_bPctLightningR / 100) + m_bResistanceBonus)); result.SetShort((short)(((m_sMagicR + m_bAddMagicR) * m_bPctMagicR / 100) + m_bResistanceBonus)); result.SetShort((short)(((m_sDiseaseR + m_bAddDiseaseR) * m_bPctDiseaseR / 100) + m_bResistanceBonus)); result.SetShort((short)(((m_sPoisonR + m_bAddPoisonR) * m_bPctPoisonR / 100) + m_bResistanceBonus)); } Send(result); }
public void SendDeathAnimation() { Packet result = new Packet(WIZ_DEAD); result.SetShort(GetID()); SendToRegion(result); }
internal void GetUserInfo(ref Packet result) { Knights pKnights = null; result.SByte(); result.SetString(GetName()); result.SetShort(GetNation()); result.SetShort(m_bKnights); result.SetByte(GetFame()); pKnights = g_pMain.GetClanPtr(m_bKnights); if (pKnights == null) { result.SetDword(0); result.SetShort(0); result.SetByte(0); result.SetShort(-1); result.SetDword(0); result.SetByte(0); } else { result.SetShort(pKnights.GetAllianceID()); result.SetString(pKnights.m_strName); result.SetByte(pKnights.m_byGrade); result.SetByte(pKnights.m_byRanking); result.SetShort(pKnights.m_sMarkVersion); result.SetShort(pKnights.m_sCape); result.SetByte(pKnights.m_bCapeR); result.SetByte(pKnights.m_bCapeG); result.SetByte(pKnights.m_bCapeB); result.SetByte(0); result.SetByte(1); } InvisibilityType bInvisibilityType = (InvisibilityType)m_bInvisibilityType; if (bInvisibilityType != InvisibilityType.INVIS_NONE) bInvisibilityType = InvisibilityType.INVIS_DISPEL_ON_MOVE; result.SetByte(GetLevel()); result.SetByte(m_bRace); result.SetShort(m_sClass); result.SetShort(GetSPosX()); result.SetShort(GetSPosZ()); result.SetShort(GetSPosY()); result.SetByte(m_bFace); result.SetDword(m_nHair); result.SetByte(m_bResHpType); result.SetDword(m_bAbnormalType); result.SetByte(m_bNeedParty); result.SetByte(m_bAuthority); result.SetByte(m_bPartyLeader); result.SetByte((byte)bInvisibilityType); result.SetByte(m_teamColour); result.SetByte(m_bIsHidingHelmet); result.SetByte((byte)bInvisibilityType); result.SetShort(m_sDirection); result.SetByte(m_bIsChicken); result.SetByte(m_bRank); result.SetShort(0); result.SetByte(m_bKnightsRank); result.SetByte(m_bPersonalRank); byte[] equippedItems = { BREAST, LEG, HEAD, GLOVE, FOOT, SHOULDER, RIGHTHAND, LEFTHAND, CWING, CHELMET, CRIGHT, CLEFT, CTOP, CFAIRY }; foreach (byte i in equippedItems) { _ITEM_DATA pItem = GetItem(i); if (pItem == null) continue; result.SetDword(pItem.nNum); result.SetShort(pItem.sDuration); result.SetByte(pItem.bFlag); } result.SetByte(GetZoneID()); result.SetShort(-1); result.SetDword(0); result.SetShort(0); result.SetByte(0); result.SetByte(isGenieActive()); if (__VERSION > 2000) { result.SetByte(isRebirth()); result.SetShort(GetAchieveTitle()); result.SetShort(0); result.SetByte(0); result.SetByte(1); } }
public void SelectCharacter(byte bResult, byte bInit) { Packet result = new Packet(WIZ_SEL_CHAR); if (m_bAuthority == 255) // Bannet { OnDisconnect(); return; } result.SetByte(bResult); if (bResult == 0 || m_bZone <= 0) goto fail_return; result.SetByte(m_bZone); result.SetShort(Convert.ToInt16(m_curx)); result.SetShort(Convert.ToInt16(m_curz)); result.SetShort(Convert.ToInt16(m_cury)); result.SetByte(KARUS); bSelectChar = true; Send(result); return; fail_return: Send(result); }
public void ServerIndex(Packet pkt) { Packet result= new Packet(WIZ_SERVER_INDEX); result.SetShort(1).SetShort(1); // Server index eklenecek Send(result); }
public void SendMyInfo() { SetUserAbility(false); Packet result = new Packet(WIZ_MYINFO); result.SByte(); result.SetShort(sSid); result.SetString(GetName()); result.SetShort(Convert.ToInt16(m_curx * 10)); result.SetShort(Convert.ToInt16(m_curz * 10)); result.SetShort(Convert.ToInt16(m_cury * 10)); result.SetByte(m_bNation); result.SetByte(m_bRace); result.SetShort(m_sClass); result.SetByte(m_bFace); result.SetDword(m_nHair); result.SetByte(m_bRank); result.SetByte(m_bTitle); result.SetShort(0); result.SetByte(GetLevel()); result.SetShort(m_sPoints); result.SetInt64(1/*SetMaxExp()*/); result.SetInt64(m_iExp); result.SetDword(m_iLoyalty); result.SetDword(m_iLoyaltyMonthly); result.SetShort(GetClanID()); result.SetByte(GetFame()); Knights pKnights = g_pMain.GetClanPtr(GetClanID()); if (pKnights == null) { result.SetInt64(0); result.SetShort(-1); result.SetDword(0); } else { pKnights.OnLogin(this); Knights pAllyClan = null; if (pKnights.GetAllianceID() > 0) pAllyClan = g_pMain.GetClanPtr(pKnights.GetAllianceID()); result.SetShort(pKnights.GetAllianceID()); result.SetByte(pKnights.m_byFlag); result.SetString(pKnights.m_strName); result.SetByte(pKnights.m_byGrade); result.SetByte(pKnights.m_byRanking); result.SetShort(pKnights.m_sMarkVersion); if (pAllyClan == null) result.SetShort(pKnights.m_sCape); else result.SetShort(pAllyClan.m_sCape); result.SetByte(pKnights.m_bCapeR); result.SetByte(pKnights.m_bCapeG); result.SetByte(pKnights.m_bCapeB); result.SetByte(0); } result.SetByte(2); result.SetByte(3); result.SetByte(4); result.SetByte(5); result.SetShort(m_iMaxHp); result.SetShort(m_sHp); result.SetShort(m_iMaxMp); result.SetShort(m_sMp); result.SetDword(m_sMaxWeight); result.SetDword(m_sItemWeight); result.SetByte(m_bStats[(int)StatType.STAT_STR]); result.SetByte((byte)GetStatItemBonus(StatType.STAT_STR)); result.SetByte(m_bStats[(int)StatType.STAT_STA]); result.SetByte((byte)GetStatItemBonus(StatType.STAT_STA)); result.SetByte(m_bStats[(int)StatType.STAT_DEX]); result.SetByte((byte)GetStatItemBonus(StatType.STAT_DEX)); result.SetByte(m_bStats[(int)StatType.STAT_INT]); result.SetByte((byte)GetStatItemBonus(StatType.STAT_INT)); result.SetByte(m_bStats[(int)StatType.STAT_CHA]); result.SetByte((byte)GetStatItemBonus(StatType.STAT_CHA)); result.SetShort(m_sTotalHit); result.SetShort(m_sTotalAc); result.SetByte((byte)m_sFireR); result.SetByte((byte)m_sColdR); result.SetByte((byte)m_sLightningR); result.SetByte((byte)m_sMagicR); result.SetByte((byte)m_sDiseaseR); result.SetByte((byte)m_sPoisonR); result.SetDword(m_iGold); result.SetByte(m_bAuthority); result.SetByte(m_bKnightsRank); result.SetByte(m_bPersonalRank); result.append(m_bstrSkill, 9); for (int i = 0; i < INVENTORY_TOTAL; i++) { _ITEM_DATA pItem = GetItem(i); if (pItem == null) { pItem = new _ITEM_DATA(); } if (pItem.sRemainingRentalTime < UNIXTIME) pItem.sRemainingRentalTime = 0; if (pItem.nExpirationTime < UNIXTIME) pItem.nExpirationTime = 0; result.SetDword(pItem.nNum); result.SetShort(pItem.sDuration); result.SetShort(pItem.sCount); result.SetByte(pItem.bFlag); // item type flag (e.g. rented) result.SetShort(pItem.sRemainingRentalTime); // remaining time result.SetDword(0); // unknown result.SetDword(pItem.nExpirationTime); // expiration date in unix time } result.SetByte(m_bAccountStatus); result.SetByte(m_bPremiumType); result.SetShort(m_sPremiumTime); result.SetByte(m_bIsChicken); // Yumurta result.SetDword(m_iMannerPoint); result.SetShort(0); result.SetDword(0); // Military Camp result.SetShort(m_sGenieTime);// Genie Send(result); if (!g_pMain.AddUserInGame(GetID(), this)) OnDisconnect(); else bGameStart = true; Console.WriteLine("Send My info Gönderildi."); }
public void SendTime() { Packet result = new Packet(WIZ_TIME); result.SetShort((short)DateTime.Now.Year); result.SetShort((short)DateTime.Now.Month); result.SetShort((short)DateTime.Now.Day); result.SetShort((short)DateTime.Now.Hour); result.SetShort((short)DateTime.Now.Minute); Send(result); }
public void SendWeather() { Packet result = new Packet(WIZ_WEATHER); result.SetByte(1); result.SetShort(10 * 60); Send(result); }
public void StateChangeServerDirect(byte type, int buff) { if (type == 5 && m_bAuthority != 0) return; // Operators only!!! if (type == 1) { m_bResHpType = Convert.ToByte(buff); } else if (type == 2) { m_bNeedParty = Convert.ToByte(buff); } else if (type == 3) { m_bAbnormalType = buff; } else if (type == 6) { m_bPartyLeader = Convert.ToBoolean(buff); } Packet result = new Packet(WIZ_STATE_CHANGE); result.SetShort(GetSocketID()); result.SetByte(type); if (type == 1) { result.SetDword(m_bResHpType); } else if (type == 2) { result.SetDword(m_bNeedParty); } // else if (type == 3) { result.SetDword(m_bAbnormalType); } else { // Just plain echo :) result.SetDword(buff); // N3_SP_STATE_CHANGE_ACTION = 0x04, // 1 - 인사, 11 - 도발 // N3_SP_STATE_CHANGE_VISIBLE = 0x05 }; // 투명 0 ~ 255 } g_pMain.Send_All(result); /* switch (bType) { case 1: m_bResHpType = buff; break; case 2: m_bNeedParty = buff; break; case 3: m_nOldAbnormalType = m_bAbnormalType; // If we're a GM, we need to show ourselves before transforming. // Otherwise the visibility state is completely desynced. if (isGM()) StateChangeServerDirect(5, 1); m_bAbnormalType = buff; break; case 5: m_bAbnormalType = buff; break; case 6: buff = Convert.ToByte(m_bPartyLeader); // we don't set this here. break; case 7: UpdateVisibility((InvisibilityType)buff); break; case 8: // beginner quest break; } Packet result = new Packet(WIZ_STATE_CHANGE); result.SetShort(GetSocketID()); result.SetByte(bType); result.SetByte(buff); SendToRegion(result);*/ }
private void SendTargetHP(byte echo, int tid, int damage) { int hp = 0, maxhp = 0; CNpc npcTarget = null; User userTarget = null; if (tid >= NPC_BAND) { if (g_pMain.m_bPointCheckFlag == false) return; CNpc pNpc = g_pMain.GetNpcPtr(tid); if (pNpc == null) return; hp = pNpc.m_iHP; maxhp = pNpc.m_iMaxHP; npcTarget = pNpc; } else { User pUser = g_pMain.GetUserPtr(tid); if (pUser == null || pUser.isDead()) return; hp = pUser.m_sHp; maxhp = pUser.m_iMaxHp; userTarget = pUser; } Packet result = new Packet(WIZ_TARGET_HP); result.SetShort((short)tid).SetByte(echo).SetDword(maxhp).SetDword(hp).SetShort((short)damage); Send(result); }
public void HpChange(int amount, User pAttacker = null) { Packet result = new Packet(WIZ_HP_CHANGE); short tid = (pAttacker != null ? pAttacker.GetID() : (short)-1); short oldHP = m_sHp; int originalAmount = amount; int mirrorDamage = 0; // No cheats allowed if (pAttacker != null && pAttacker.GetZoneID() != GetZoneID()) return; // Implement damage/HP cap. if (amount < -MAX_DAMAGE) amount = -MAX_DAMAGE; else if (amount > MAX_DAMAGE) amount = MAX_DAMAGE; // If we're taking damage... if (amount < 0) { if (isGM()) return; RemoveStealth(); // Handle the mirroring of damage. //if (m_bMirrorDamage > 0 && isInParty() && GetZoneID() != ZONE_CHAOS_DUNGEON) //{ // _PARTY_GROUP* pParty = nullptr; // CUser* pUser = nullptr; // mirrorDamage = (m_byMirrorAmount * amount) / 100; // amount -= mirrorDamage; // pParty = g_pMain->GetPartyPtr(GetPartyID()); // if (pParty != nullptr) // { // mirrorDamage = mirrorDamage / (GetPartyMemberAmount(pParty) - 1); // for (int i = 0; i < MAX_PARTY_USERS; i++) // { // pUser = g_pMain->GetUserPtr(pParty->uid[i]); // if (pUser == nullptr || pUser == this) // continue; // // pUser->HpChange(mirrorDamage); // } // } //} // Handle mana absorb skills //if (m_bManaAbsorb > 0 && GetZoneID() != ZONE_CHAOS_DUNGEON) //{ // int toBeAbsorbed = 0; // toBeAbsorbed = (originalAmount * m_bManaAbsorb) / 100; // amount -= toBeAbsorbed; // // if (m_bManaAbsorb == 15) // toBeAbsorbed *= 4; // // MSpChange(toBeAbsorbed); //} // Handle mastery passives //if (isMastered() && GetZoneID() != ZONE_CHAOS_DUNGEON) //{ // // Matchless: [Passive]Decreases all damages received by 15% // if (CheckSkillPoint(SkillPointMaster, 10, MAX_LEVEL)) // amount = (85 * amount) / 100; // // Absoluteness: [Passive]Decrease 10 % demage of all attacks // else if (CheckSkillPoint(SkillPointMaster, 5, 9)) // amount = (90 * amount) / 100; //} } // If we're receiving HP and we're undead, all healing must become damage. //else if (m_bIsUndead) //{ // amount = -amount; // originalAmount = amount; //} if (amount < 0 && -amount >= m_sHp) m_sHp = 0; else if (amount >= 0 && m_sHp + amount > m_iMaxHp) m_sHp = m_iMaxHp; else m_sHp += (short)amount; result.SetShort(m_iMaxHp).SetShort(m_sHp).SetShort(tid); if (GetHealth() > 0 && isMastered() && !isMage() && GetZoneID() != ZONE_CHAOS_DUNGEON) { short hp30Percent = (short)((30 * GetMaxHealth()) / 100); if ((oldHP >= hp30Percent && m_sHp < hp30Percent) || (m_sHp > hp30Percent)) { SetUserAbility(); if (m_sHp < hp30Percent) ShowEffect(106800); // skill ID for "Boldness", shown when a player takes damage. } } Send(result); if (isInParty() && GetZoneID() != ZONE_CHAOS_DUNGEON) SendPartyHPUpdate(); if (pAttacker != null) SendTargetHP(0, GetID(), originalAmount); if (m_sHp == 0) OnDeath(pAttacker); }
private void HandleLogin(Packet pkt) { KODatabase db = new KODatabase(); string AccountID = pkt.GetString(), Passwd = pkt.GetString(); short resultCode = 1; if (AccountID == string.Empty || AccountID.Length >= Define.MAX_ID_SIZE || Passwd == string.Empty || Passwd.Length >= Define.MAX_PW_SIZE) resultCode = 2; else resultCode = db.TB_USER.Where(u=> u.strAccountID == AccountID && u.strPasswd == Passwd).Count() > 0 ? (short)1 : (short)2 ; Packet result = new Packet((byte)LogonOpcodes.LS_LOGIN_REQ); result.SetByte((byte)resultCode); if (resultCode == 1) { result.SetShort((short)db.ACCOUNT_PREMIUM(AccountID)); result.SetString(AccountID); } Send(result); Debug.WriteLine("Kullanıcı girişi : {1} - {0}", resultCode, AccountID); }
internal void GetServerList(ref Packet result) { KODatabase db = new KODatabase(); short CurrentUserCount = (short)db.CURRENTUSER.Count(); result.SetByte((byte)ServerList.Count); foreach(SERVER_INFO server in ServerList) { result.SetString(server.strServerIP); result.SetString(server.strLanIP); result.SetString(server.strServerName); if (CurrentUserCount <= server.sPlayerCap) result.SetShort(CurrentUserCount); else result.SetShort(-1); result.SetShort(server.sServerID); result.SetShort(server.sGroupID); result.SetShort(server.sPlayerCap); result.SetShort(server.sFreePlayerCap); result.SetByte(0); result.SetString(server.strKarusKingName); result.SetString(server.strKarusNotice); result.SetString(server.strElMoradKingName); result.SetString(server.strElMoradNotice); } }