11 Commits

Author SHA1 Message Date
rtw1x1
7a59fdd7b4 fix: Better support UTF8 & Arabic
Increase CHARACTER_NAME_MAX_LEN from 24 to 64 for better support with UTF8 Arabic
2025-12-27 19:00:42 +00:00
rtw1x1
11ba72d2e2 Merge pull request #46 from MindRapist/mr-4
Fixed PK mode bugs, fixed logout cancellation from using skills
2025-12-27 08:25:29 +00:00
Mind Rapist
3b712002a9 Fixed PK mode bugs, fixed logout cancellation from using skills 2025-12-27 10:23:45 +02:00
Mind Rapist
11ef2f5780 Fixed PK mode bugs, fixed logout cancellation from using skills 2025-12-27 10:17:04 +02:00
rtw1x1
7a69f13439 Merge pull request #42 from savisxss/main
Guard netinet/tcp.h include for non-Windows platforms
2025-12-27 07:15:41 +00:00
rtw1x1
baa4d7dd69 Merge pull request #45 from rtw1x1/main
Update item_length.h
2025-12-27 07:15:28 +00:00
rtw1x1
1003dffdd6 Update item_length.h 2025-12-27 07:10:38 +00:00
savis
0f21118ad7 Guard netinet/tcp.h include for non-Windows platforms 2025-12-27 01:19:42 +01:00
rtw1x1
db097e3ba2 Merge pull request #41 from rtw1x1/main
TCP_NODELAY undeclared
2025-12-26 07:28:34 +00:00
rtw1x1
366d97dbac TCP_NODELAY undeclared 2025-12-26 07:27:50 +00:00
rtw1x1
1b46b8cc26 Merge pull request #40 from d1str4ught/rtw1x1-patch-1 2025-12-26 07:11:59 +00:00
6 changed files with 38 additions and 79 deletions

View File

@@ -3,7 +3,7 @@
enum EItemMisc
{
ITEM_NAME_MAX_LEN = 24,
ITEM_NAME_MAX_LEN = 64,
ITEM_VALUES_MAX_NUM = 6,
ITEM_SMALL_DESCR_MAX_LEN = 256,
ITEM_LIMIT_MAX_NUM = 2,

View File

@@ -10,7 +10,7 @@ enum EMisc
PASSWD_MAX_LEN = 16,
PLAYER_PER_ACCOUNT = 4,
ACCOUNT_STATUS_MAX_LEN = 8,
CHARACTER_NAME_MAX_LEN = 24,
CHARACTER_NAME_MAX_LEN = 64,
SHOP_SIGN_MAX_LEN = 32,
INVENTORY_MAX_NUM = 90,
ABILITY_MAX_NUM = 50,

View File

@@ -1659,6 +1659,14 @@ void CHARACTER::EnterCombat()
if (!IsPosition(POS_FIGHTING))
SetPosition(POS_FIGHTING);
// MR-3: Cancel logout on use skill
if (m_pkTimedEvent)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("전투가 시작 되어 취소 되었습니다."));
event_cancel(&m_pkTimedEvent);
}
// MR-3: -- END OF -- Cancel logout on use skill
SetNextStatePulse(1);
}
// tw1x1: end

View File

@@ -2525,14 +2525,6 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
ComputeSkill(dwVnum, pkVictim);
RemoveAffect(dwVnum);
// MR-3: Cancel logout on use skill
if (m_pkTimedEvent)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("취소 되었습니다."));
event_cancel(&m_pkTimedEvent);
}
// MR-3: -- END OF -- Cancel logout on use skill
return true;
}
}
@@ -2551,14 +2543,6 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
// Toggle 할 때는 SP를 쓰지 않음 (SelfOnly로 구분)
if ((0 != pkSk->dwAffectFlag || pkSk->dwVnum == SKILL_MUYEONG) && (pkSk->dwFlag & SKILL_FLAG_TOGGLE) && RemoveAffect(pkSk->dwVnum))
{
// MR-3: Cancel logout on use skill
if (m_pkTimedEvent)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("취소 되었습니다."));
event_cancel(&m_pkTimedEvent);
}
// MR-3: -- END OF -- Cancel logout on use skill
return true;
}
@@ -2657,6 +2641,14 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
}
}
// MR-3: Cancel logout on use skill
if (IsPC() && m_pkTimedEvent)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("취소 되었습니다."));
event_cancel(&m_pkTimedEvent);
}
// MR-3: -- END OF -- Cancel logout on use skill
if (dwVnum == SKILL_CHAIN)
{
ResetChainLightningIndex();
@@ -2670,14 +2662,6 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
// prevent POS_FIGHTING from expiring when skills deal 0 damage (miss, block, imun, etc.)
UpdateLastCombatTime();
EnterCombat();
// MR-3: Cancel logout on use skill
if (pkVictim->m_pkTimedEvent)
{
pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("취소 되었습니다."));
event_cancel(&pkVictim->m_pkTimedEvent);
}
// MR-3: -- END OF -- Cancel logout on use skill
}
// tw1x1: end
@@ -2692,14 +2676,6 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
m_dwLastSkillTime = get_dword_time();
// MR-3: Cancel logout on use skill
if (m_pkTimedEvent)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("취소 되었습니다."));
event_cancel(&m_pkTimedEvent);
}
// MR-3: -- END OF -- Cancel logout on use skill
return true;
}

View File

@@ -464,80 +464,52 @@ bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
{
if (g_protectNormalPlayer)
{
// 범법자는 평화모드인 착한사람을 공격할 수 없다.
if (PK_MODE_PEACE == pkVictim->GetPKMode())
return false;
// 범법자는 평화모드인 착한사람을 공격할 수 없다.
if (PK_MODE_PEACE == pkVictim->GetPKMode())
return false;
}
}
// MR-4: Fix PK mode logic
switch (pkChr->GetPKMode())
{
case PK_MODE_PEACE:
case PK_MODE_REVENGE:
// Cannot attack same guild
if (pkVictim->GetGuild() && pkVictim->GetGuild() == pkChr->GetGuild())
break;
if (pkChr->GetPKMode() == PK_MODE_REVENGE)
{
//if (!g_iUseLocale)
if (1)
{
if (pkChr->GetAlignment() < 0 && pkVictim->GetAlignment() >= 0)
{
pkChr->SetKillerMode(true);
return true;
}
else if (pkChr->GetAlignment() >= 0 && pkVictim->GetAlignment() < 0)
return true;
}
else
{
if (pkChr->GetAlignment() < 0 && pkVictim->GetAlignment() < 0)
break;
else if (pkChr->GetAlignment() >= 0 && pkVictim->GetAlignment() >= 0)
break;
beKillerMode = true;
}
if (
(!pkChr->GetGuild() || (pkVictim->GetGuild() != pkChr->GetGuild())) &&
pkChr->GetPKMode() == PK_MODE_REVENGE && pkVictim->GetAlignment() < 0
)
return true;
}
break;
case PK_MODE_GUILD:
// Same implementation from PK_MODE_FREE except for attacking same guild
if (!pkChr->GetGuild() || (pkVictim->GetGuild() != pkChr->GetGuild()))
{
if (1)
//if (!g_iUseLocale)
// Same implementation from PK_MODE_FREE except for attacking same guild
if (!pkChr->GetGuild() || (pkVictim->GetGuild() != pkChr->GetGuild()))
{
if (pkVictim->GetAlignment() >= 0)
pkChr->SetKillerMode(true);
else if (pkChr->GetAlignment() < 0 && pkVictim->GetAlignment() < 0)
// Only set killer mode if victim is not already attackable
if (!pkVictim->IsKillerMode())
pkChr->SetKillerMode(true);
return true;
}
else
beKillerMode = true;
}
break;
case PK_MODE_FREE:
//if (!g_iUseLocale)
if (1)
{
if (pkVictim->GetAlignment() >= 0)
pkChr->SetKillerMode(true);
else if (pkChr->GetAlignment() < 0 && pkVictim->GetAlignment() < 0)
// Same as GUILD, but allows attacking same guild members
// Only set killer mode if victim is not already attackable
if (!pkVictim->IsKillerMode())
pkChr->SetKillerMode(true);
return true;
}
else
beKillerMode = true;
break;
}
// MR-4: -- END OF -- Fix PK mode logic
}
CPVP kPVP(pkChr->GetPlayerID(), pkVictim->GetPlayerID());

View File

@@ -1,4 +1,7 @@
#include "stdafx.h"
#ifndef OS_WINDOWS
#include <netinet/tcp.h>
#endif
/* Forwards */
void socket_lingeron(socket_t s);