Kết quả 1 đến 10 của 12
-
28-08-12, 01:00 PM #1
- Ngày tham gia
- Jan 2010
- Bài viết
- 180
- Thanks
- 84
- Thanked 177 Times in 49 Posts
Hưỡng dẫn cơ bản làm hút hít từ source full JX
Tự nhiên mất chùm chìa khóa làm hôm nay đi làm không đc! Thấy rảnh nên vô tìm hiểm về hút hít share cho những bạn cần
Đừng ném gạch em nha huhu
Vào vấn đề chính thui
------------------
Về căn bản thì các option hút hít đã đc Add sẵn h ta chỉ cần gọi tới và sử dụng
Các biến liên quan tới hút hít
+m_CurrentManaStolen : Nội lực
+m_CurrentLifeStolen : Sinh lực
+m_CurrentStaminaStolen : Thể lực
------------------
Mình chỉ làm hút máu thôi còn các cái khác các bạn tự làm nha
Đầu tiên các bạn vào lớp KNpc (.h) làm thêm 1 hàm hồi máu như sau
PHP Code:void DeathPunish(int nMode, int nBelongPlayer);
void RestoreLiveData(int nDamage);
void RestoreDamage2Life(int nDamage); //Hàm mình add để làm hút máu
PHP Code:void KNpc::RestoreLiveData(int nDamage)
{
}
//Đây là hàm mình mới add theo định nghĩ ở trên
void KNpc::RestoreDamage2Life(int nDamage)
{
m_CurrentLife = m_CurrentLife + (nDamage*m_CurrentLifeStolen/100);
if (m_CurrentLife >= m_CurrentLifeMax)
m_CurrentLife = m_CurrentLifeMax;
}
PHP Code:void KNpc::CalcDamage(int nAttacker, int nMin, int nMax, DAMAGE_TYPE nType, BOOL bIsMelee, BOOL bDoHurt /* TRUE */, BOOL bReturn /* = FALSE */)
{
if (m_Doing == do_death || m_RegionIndex < 0)
return;
if (nMin + nMax <= 0)
return;
int nRes = 0;
int nDamageRange = nMax - nMin;
int nDamage = 0;
if (nDamageRange < 0)
{
nDamage = nMax + g_Random(-nDamageRange);
}
else
nDamage = nMin + g_Random(nMax - nMin);
// µÚÒ»²½£¬Í³¼Æ¿¹ÐÔ£¬²¢¼ÆËãÎüÊÕÉ˺¦
switch(nType)
{
case damage_physics:
nRes = m_CurrentPhysicsResist;
if (nRes > m_CurrentPhysicsResistMax)
{
nRes = m_CurrentPhysicsResistMax;
}
if (nRes > MAX_RESIST)
{
nRes = MAX_RESIST;
}
g_DebugLog("[ÊýÖµ]%sÊܵ½%dµãÔʼÎïÀíÉ˺¦£¬ÎïÀí¿¹ÐÔ%d£¬ÎïÀí¶Ü%d", Name, nDamage, nRes, m_PhysicsArmor.nValue[0]);
m_PhysicsArmor.nValue[0] -= nDamage;
if (m_PhysicsArmor.nValue[0] < 0)
{
nDamage = -m_PhysicsArmor.nValue[0];
m_PhysicsArmor.nValue[0] = 0;
m_PhysicsArmor.nTime = 0;
}
else
{
nDamage = 0;
}
if (bIsMelee)
{
nMax = m_CurrentMeleeDmgRetPercent;
}
else
{
nMax = m_CurrentRangeDmgRetPercent;
}
break;
case damage_cold:
nRes = m_CurrentColdResist;
if (nRes > m_CurrentColdResistMax)
{
nRes = m_CurrentColdResistMax;
}
if (nRes > MAX_RESIST)
{
nRes = MAX_RESIST;
}
g_DebugLog("[ÊýÖµ]%sÊܵ½%dµãÔʼ±ùÉ˺¦£¬±ù¿¹ÐÔ%d£¬±ù¶Ü%d", Name, nDamage, nRes, m_ColdArmor.nValue[0]);
m_ColdArmor.nValue[0] -= nDamage;
if (m_ColdArmor.nValue[0] < 0)
{
nDamage = -m_ColdArmor.nValue[0];
m_ColdArmor.nValue[0] = 0;
m_ColdArmor.nTime = 0;
}
else
{
nDamage = 0;
}
nMax = m_CurrentRangeDmgRetPercent;
break;
case damage_fire:
nRes = m_CurrentFireResist;
if (nRes > m_CurrentFireResistMax)
{
nRes = m_CurrentFireResistMax;
}
if (nRes > MAX_RESIST)
{
nRes = MAX_RESIST;
}
g_DebugLog("[ÊýÖµ]%sÊܵ½%dµãÔʼ»ðÉ˺¦£¬»ð¿¹ÐÔ%d£¬»ð¶Ü%d", Name, nDamage, nRes, m_FireArmor.nValue[0]);
m_FireArmor.nValue[0] -= nDamage;
if (m_FireArmor.nValue[0] < 0)
{
nDamage = -m_FireArmor.nValue[0];
m_FireArmor.nValue[0] = 0;
m_FireArmor.nTime = 0;
}
else
{
nDamage = 0;
}
nMax = m_CurrentRangeDmgRetPercent;
break;
case damage_light:
nRes = m_CurrentLightResist;
if (nRes > m_CurrentLightResistMax)
{
nRes = m_CurrentLightResistMax;
}
if (nRes > MAX_RESIST)
{
nRes = MAX_RESIST;
}
g_DebugLog("[ÊýÖµ]%sÊܵ½%dµãÔʼµçÉ˺¦£¬µç¿¹ÐÔ%d£¬µç¶Ü%d", Name, nDamage, nRes, m_LightArmor.nValue[0]);
m_LightArmor.nValue[0] -= nDamage;
if (m_LightArmor.nValue[0] < 0)
{
nDamage = -m_LightArmor.nValue[0];
m_LightArmor.nValue[0] = 0;
m_LightArmor.nTime = 0;
}
else
{
nDamage = 0;
}
nMax = m_CurrentRangeDmgRetPercent;
break;
case damage_poison:
g_DebugLog("[ÊýÖµ]%sÊܵ½%dµãÔʼ¶¾É˺¦", Name, nDamage);
nRes = m_CurrentPoisonResist;
if (nRes > m_CurrentPoisonResistMax)
{
nRes = m_CurrentPoisonResistMax;
}
if (nRes > MAX_RESIST)
{
nRes = MAX_RESIST;
}
g_DebugLog("[ÊýÖµ]%sÊܵ½%dµãÔʼ¶¾É˺¦£¬¶¾¿¹ÐÔ%d£¬¶¾¶Ü%d", Name, nDamage, nRes, m_PoisonArmor.nValue[0]);
m_PoisonArmor.nValue[0] -= nDamage;
if (m_PoisonArmor.nValue[0] < 0)
{
nDamage = -m_PoisonArmor.nValue[0];
m_PoisonArmor.nValue[0] = 0;
m_PoisonArmor.nTime = 0;
}
else
{
nDamage = 0;
}
nMax = m_CurrentRangeDmgRetPercent;
m_nLastPoisonDamageIdx = nAttacker;
break;
case damage_magic:
g_DebugLog("[ÊýÖµ]%sÊܵ½%dµãÔʼħ·¨É˺¦", Name, nDamage);
nRes = 0;
break;
default:
nRes = 0;
break;
}
if (!nDamage)
return;
// µÚ¶þ²½ÅжÏÊÇ·ñÓÐħ·¨¶Ü´æÔÚ
g_DebugLog("[ÊýÖµ]%sħ·¨¶ÜÎüÊÕ±ÈÀý£º%d", Name, m_ManaShield.nValue[0]);
if (m_ManaShield.nValue[0])
{
int nManaDamage = nDamage * m_ManaShield.nValue[0] / 100;
m_CurrentMana -= nManaDamage;
if (m_CurrentMana < 0)
{
nDamage -= m_CurrentMana;
m_CurrentMana = 0;
m_ManaShield.nValue[0] = 0;
m_ManaShield.nTime = 0;
}
else
{
nDamage -= nManaDamage;
}
}
nDamage = nDamage * (100 - nRes) / 100;
g_DebugLog("[ÊýÖµ]%sʵ¼ÊÉ˺¦£º%d", Name, nDamage);
// ·´µ¯É˺¦
if (nAttacker > 0 && bReturn == FALSE)
{
if (bIsMelee)
{
nMin = m_CurrentMeleeDmgRet;
nMin += nDamage * nMax / 100;
Npc[nAttacker].CalcDamage(m_Index, nMin, nMin, damage_magic, FALSE, FALSE, TRUE);
}
else
{
nMin = m_CurrentRangeDmgRet;
nMin += nDamage * nMax / 100;
Npc[nAttacker].CalcDamage(m_Index, nMin, nMin, damage_magic, FALSE, FALSE, TRUE);
}
g_DebugLog("[ÊýÖµ]%s·µ»ØÉ˺¦%d", Name, nMin);
}
// PK´¦Àí£¬É˺¦³ËÒ»¸öϵÊý
if (this->m_Kind == kind_player && Npc[nAttacker].m_Kind == kind_player)
nDamage = nDamage * NpcSet.m_nPKDamageRate / 100;
m_nLastDamageIdx = nAttacker;
if (m_Kind != kind_player && Npc[nAttacker].m_Kind == kind_player && Npc[nAttacker].m_nPlayerIdx > 0)
m_cDeathCalcExp.AddDamage(Npc[nAttacker].m_nPlayerIdx, (m_CurrentLife - nDamage > 0 ? nDamage : m_CurrentLife));
m_CurrentLife -= nDamage;
if (nDamage > 0)
{
//Đây là đoạn mình thêm vô
//Tại đây các bạn có thể xét xem skill là nội công hay ngoại công để cho phép tăng máu
if (m_CurrentLife > 0)
Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].RestoreDamage2Life(nDamage);
else
Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].RestoreDamage2Life(nDamage + m_CurrentLife);
//End add
m_CurrentMana += m_CurrentDamage2Mana * nDamage / 100;
if (m_CurrentMana > m_CurrentManaMax)
{
m_CurrentMana = m_CurrentManaMax;
}
if (bDoHurt)
DoHurt();
}
if (m_CurrentLife < 0)
{
int nMode = DeathCalcPKValue(nAttacker);
DoDeath(nMode);
// if ËÀµÄÊÇÍæ¼Ò£¬¹Ø±ÕËûµÄ³ðɱºÍÇдè״̬
if (m_Kind == kind_player)
Player[m_nPlayerIdx].m_cPK.CloseAll();
}
}
Lần sửa cuối bởi trananh88vt, ngày 28-08-12 lúc 01:13 PM.
Khách viếng thăm hãy cùng trananh88vt xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
The Following 16 Users Say Thank You to trananh88vt For This Useful Post:
assaa (28-08-12), authanhi (28-08-12), debaf9 (30-08-12), ferari (28-08-12), HeavenGames (28-08-12), jxvietnam (28-08-12), kelly (28-08-12), LBLN2N (28-08-12), Learning (28-08-12),
Linh_JX(28-08-12), nhoxmap_b7 (28-08-12), runkissbig (07-09-12), thaihoa91 (28-08-12), tieudieuphong (19-09-12), tieusuquay79 (28-08-12), vipprolc (28-08-12)
-
28-08-12, 01:13 PM #2
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
+m_CurrentManaStolen : Nội lực
+m_CurrentStaminaStolen : Sinh lực
+m_CurrentStaminaStolen : Thể lực
Mình đính chính chút cho thành viên mới hiểu
trện bạn ấy viết nhầm
Hàm sinh lực là này nhé (m_CurrentLifeStolen)Khách viếng thăm hãy cùng kelly xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
The Following 2 Users Say Thank You to kelly For This Useful Post:
Linh_JX(28-08-12), trananh88vt (28-08-12)
-
28-08-12, 01:14 PM #3
- Ngày tham gia
- Jan 2010
- Bài viết
- 180
- Thanks
- 84
- Thanked 177 Times in 49 Posts
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
Khách viếng thăm hãy cùng trananh88vt xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
28-08-12, 01:18 PM #4
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
lớn rồi mà sao cứ xưng em thế anh
Sao? Như nào? Nói luôn.
-
28-08-12, 01:20 PM #5
- Ngày tham gia
- Jan 2010
- Bài viết
- 180
- Thanks
- 84
- Thanked 177 Times in 49 Posts
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
Khách viếng thăm hãy cùng trananh88vt xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
28-08-12, 01:25 PM #6
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
ném thì ném lại. họ ném gạch mình ném táp lô
Sao? Như nào? Nói luôn.
-
Các thành viên gởi lời cảm ơn đến Learning vì bài viết này !
trananh88vt (28-08-12)
-
28-08-12, 06:35 PM #7
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
Tks bạn nhiều lắm. Như thế này thì JX Offline ngày càng phát triển thêm
Khách viếng thăm hãy cùng assaa xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
28-08-12, 06:41 PM #8
- Ngày tham gia
- Jul 2011
- Bài viết
- 99
- Thanks
- 61
- Thanked 3 Times in 2 Posts
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
Nếu rảnh ngâm tiếp cái vụ rồng dí , bổng dí nhé bạn
Khách viếng thăm hãy cùng ferari xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
28-08-12, 06:45 PM #9
- Ngày tham gia
- Jan 2010
- Bài viết
- 180
- Thanks
- 84
- Thanked 177 Times in 49 Posts
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
Khách viếng thăm hãy cùng trananh88vt xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
28-08-12, 06:47 PM #10
- Ngày tham gia
- Jul 2011
- Bài viết
- 99
- Thanks
- 61
- Thanked 3 Times in 2 Posts
Ðề: Hưỡng dẫn cơ bản làm hút hít từ source full JX
Khách viếng thăm hãy cùng ferari xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
Các Chủ đề tương tự
-
Hot Thiếu Vân Web 1.85 Full Source
Bởi Mr.Cuong trong diễn đàn SQL Server & WebsiteTrả lời: 304Bài viết cuối: 11-11-18, 01:23 PM -
Lỗi web TV 1.85 full source
Bởi nhaodzo trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 2Bài viết cuối: 21-02-12, 10:59 PM -
Source full gunny
Bởi phien-nhatrang trong diễn đàn ReleasesTrả lời: 1206Bài viết cuối: 02-08-11, 06:50 PM -
Source Không Full
Bởi thanh159 trong diễn đàn Võ Lâm Truyền Kỳ (Jx Server)Trả lời: 29Bài viết cuối: 09-06-11, 06:32 PM -
SCF 7.11.66b DLL Source Code Full
Bởi Mr.Quy trong diễn đàn ReleasesTrả lời: 3Bài viết cuối: 22-05-10, 05:00 PM