Bom dia a todos, eu sou iniciante nessa área de programação, estou aprendendo tudo pela internet e pelo ChatGPT e gostaria de ajudar a área pois esta muito parada.
Muitos estão usando a base [Source] The New World 759+ e eu também, por isso vou disponibilizar um código de NPC de teleporte.
ele verifica se o player possui Gold (editado como quiser ), também verifica o IP , sendo possível entrar somente 1 vez na Quest por computador. E também pode ser desativado o NPC somente pela source, caso queira uma Quest temporária.
Esse código tem que ser colocado na parte _MSG_Quest.cpp
Desculpem por qualquer erro, estou aprendendo ainda mas funcionou 100% sem erros. Espero que ajude alguém.
#pragma region FELICIA
case FELICIA:
{
#ifdef _WIN32
__try
{
#endif
if (EventStatus == 1)// 0 = ATIVO 1 = DESATIVADO {
SendClientMessage(conn, "Evento Desativado");
return;
}
// Verificação segura da conexão
if (conn < 0 || conn >= MAX_USER || pUser[conn].Mode != USER_PLAY) {
printf("[ERRO] Conexão inválida: %d\n", conn);
return;
}
// Área de verificação de IP (coordenadas originais da quest)
const int QUEST_X1 = 2067, QUEST_X2 = 2155;
const int QUEST_Y1 = 1973, QUEST_Y2 = 2058;
// Verificação de IPs na área
bool ipBloqueado = false;
for (int z = 0; z < MAX_USER; z++) {
if (z >= 0 && z < MAX_USER &&
pUser[z].Mode == USER_PLAY &&
pUser[z].IP == pUser[conn].IP &&
z != conn)
{
if (pMob[z].TargetX >= QUEST_X1 && pMob[z].TargetX <= QUEST_X2 &&
pMob[z].TargetY >= QUEST_Y1 && pMob[z].TargetY <= QUEST_Y2)
{
ipBloqueado = true;
break;
}
}
}
if (ipBloqueado) {
SendClientMessage(conn, "Limite de 1 conta por IP na área da quest");
return;
}
// Verificação de gold
if (pMob[conn].MOB.Coin < 50000) {
SendClientMessage(conn, "Você precisa de 50.000 de gold");
return;
}
// Coordenadas fixas para teleporte
const int DESTINO_X = 2116 + rand() % 3 - 1;
const int DESTINO_Y = 2043 + rand() % 3 - 1;
printf("[QUEST] Teleportando %s para %d %d\n", pMob[conn].MOB.MobName, DESTINO_X, DESTINO_Y);
SendMsgExp(conn, "Foi teletransportado para a quest!", TNColor::Default, false);
DoTeleport(conn, DESTINO_X, DESTINO_Y);
#ifdef _WIN32
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
printf("[CRASH] Exceção no NPC FELICIA (conn %d)\n", conn);
// Log adicional sem usar _exception_info()
}
#endif
} return;
#pragma endregion
Creditos a BnkBrum