- Create Paste
- Followup Paste
- QR
- #include "stdafx.h"
- #ifdef __FreeBSD__
- #include <md5.h>
- #else
- #include "../../libthecore/include/xmd5.h"
- #endif
- #include "utils.h"
- #include "config.h"
- #include "desc_client.h"
- #include "desc_manager.h"
- #include "char.h"
- #include "char_manager.h"
- #include "motion.h"
- #include "packet.h"
- #include "affect.h"
- #include "pvp.h"
- #include "start_position.h"
- #include "party.h"
- #include "guild_manager.h"
- #include "p2p.h"
- #include "dungeon.h"
- #include "messenger_manager.h"
- #include "war_map.h"
- #include "questmanager.h"
- #include "item_manager.h"
- #include "mob_manager.h"
- #include "dev_log.h"
- #include "item.h"
- #include "arena.h"
- #include "buffer_manager.h"
- #include "unique_item.h"
- #ifdef ENABLE_RONARK_SYSTEM
- #include "ronark_map.h"
- #endif
- #ifdef ENABLE_PLAYTIME_TITLE
- #include "PlayTimeTitle.h"
- #endif
- #include "threeway_war.h"
- #include "log.h"
- #include "../../common/VnumHelper.h"
- #ifdef PK_MODE_FIX
- #include "map_manager.h"
- #endif
- #ifdef ENABLE_ITEM_SHOP_SYSTEM
- #include "item_shop.h"
- #endif
- #include "../../common/service.h"
- #ifdef __PET_SYSTEM__
- #include "PetSystem.h"
- #endif
- ACMD(do_user_horse_ride)
- {
- if (ch->IsObserverMode())
- return;
- if (ch->IsDead() || ch->IsStun())
- return;
- if (ch->IsHorseRiding() == false)
- {
- // ¸»ÀÌ ¾Æ´Ñ ´Ù¸¥Å»°ÍÀ» Ÿ°íÀÖ´Ù.
- if (ch->GetMountVnum())
- {
- ch->ChatInfoTrans(("ÀÌ¹Ì Å»°ÍÀ» ÀÌ¿ëÁßÀÔ´Ï´Ù."));
- return;
- }
- if (ch->GetHorse() == NULL)
- {
- ch->ChatInfoTrans(("¸»À» ¸ÕÀú ¼ÒÈ¯ÇØÁÖ¼¼¿ä."));
- return;
- }
- ch->StartRiding();
- }
- else
- {
- ch->StopRiding();
- }
- }
- #ifdef ENABLE_PLAYTIME_TITLE
- ACMD(do_load_ptime) {
- CPlayTimeTitle::instance().SendToClient(ch);
- }
- ACMD(do_update_ptime) {
- CPlayTimeTitle::instance().UpdateTitle(ch);
- }
- #endif
- ACMD(do_teleportring) //impved
- {
- LPITEM fakeItem = ch->GetWear(WEAR_UNIQUE1); // null or whatever
- quest::CQuestManager::instance().UseItem(ch->GetPlayerID(), fakeItem, false,40004);
- }
- ACMD(do_user_horse_back)
- {
- if (ch->GetHorse() != NULL)
- {
- ch->HorseSummon(false);
- ch->ChatInfoTrans(("¸»À» µ¹·Áº¸³Â½À´Ï´Ù."));
- }
- else if (ch->IsHorseRiding() == true)
- {
- ch->ChatInfoTrans(("¸»¿¡¼ ¸ÕÀú ³»·Á¾ß ÇÕ´Ï´Ù."));
- }
- else
- {
- ch->ChatInfoTrans(("¸»À» ¸ÕÀú ¼ÒÈ¯ÇØÁÖ¼¼¿ä."));
- }
- }
- ACMD(do_user_horse_feed)
- {
- // °³ÀλóÁ¡À» ¿¬ »óÅ¿¡¼´Â ¸» ¸ÔÀ̸¦ ÁÙ ¼ö ¾ø´Ù.
- if (ch->GetMyShop())
- return;
- if (ch->GetHorse() == NULL)
- {
- if (ch->IsHorseRiding() == false)
- ch->ChatInfoTrans(("¸»À» ¸ÕÀú ¼ÒÈ¯ÇØÁÖ¼¼¿ä."));
- else
- ch->ChatInfoTrans(("¸»À» ź »óÅ¿¡¼´Â ¸ÔÀ̸¦ ÁÙ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- DWORD dwFood = ch->GetHorseGrade() + 50054 - 1;
- if (ch->CountSpecifyItem(dwFood) > 0)
- {
- ch->RemoveSpecifyItem(dwFood, 1);
- ch->FeedHorse();
- ch->ChatInfoTrans(("¸»¿¡°Ô %s%s ÁÖ¾ú½À´Ï´Ù."),
- ITEM_MANAGER::instance().GetTable(dwFood)->szNameEN,
- "");
- }
- else
- {
- ch->ChatInfoTrans(("%s ¾ÆÀÌÅÛÀÌ ÇÊ¿äÇÕ´Ï´Ù"), ITEM_MANAGER::instance().GetTable(dwFood)->szNameEN);
- }
- }
- #define MAX_REASON_LEN 128
- EVENTINFO(TimedEventInfo)
- {
- DynamicCharacterPtr ch;
- int subcmd;
- int left_second;
- char szReason[MAX_REASON_LEN];
- TimedEventInfo()
- : ch()
- , subcmd( 0 )
- , left_second( 0 )
- {
- ::memset( szReason, 0, MAX_REASON_LEN );
- }
- };
- struct SendDisconnectFunc
- {
- void operator () (LPDESC d)
- {
- if (d->GetCharacter())
- {
- if (d->GetCharacter()->GetGMLevel() == GM_PLAYER)
- d->GetCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "quit Shutdown(SendDisconnectFunc)");
- }
- }
- };
- struct DisconnectFunc
- {
- void operator () (LPDESC d)
- {
- if (d->GetType() == DESC_TYPE_CONNECTOR)
- return;
- if (d->IsPhase(PHASE_P2P))
- return;
- if (d->GetCharacter())
- d->GetCharacter()->Disconnect("Shutdown(DisconnectFunc)");
- d->SetPhase(PHASE_CLOSE);
- }
- };
- /*
- EVENTINFO(shutdown_event_data)
- {
- int seconds;
- shutdown_event_data()
- : seconds( 0 )
- {
- }
- };
- EVENTFUNC(shutdown_event)
- {
- shutdown_event_data* info = dynamic_cast<shutdown_event_data*>( event->info );
- if ( info == NULL )
- {
- sys_err( "shutdown_event> <Factor> Null pointer" );
- return 0;
- }
- int * pSec = & (info->seconds);
- if (*pSec < 0)
- {
- sys_log(0, "shutdown_event sec %d", *pSec);
- if (--*pSec == -10)
- {
- const DESC_MANAGER::DESC_SET & c_set_desc = DESC_MANAGER::instance().GetClientSet();
- std::for_each(c_set_desc.begin(), c_set_desc.end(), DisconnectFunc());
- return passes_per_sec;
- }
- else if (*pSec < -10)
- return 0;
- return passes_per_sec;
- }
- else if (*pSec == 0)
- {
- const DESC_MANAGER::DESC_SET & c_set_desc = DESC_MANAGER::instance().GetClientSet();
- std::for_each(c_set_desc.begin(), c_set_desc.end(), SendDisconnectFunc());
- g_bNoMoreClient = true;
- --*pSec;
- return passes_per_sec;
- }
- else
- {
- char buf[64];
- snprintf(buf, sizeof(buf), LC_TEXT("¼Ë´Ù¿îÀÌ %dÃÊ ³²¾Ò½À´Ï´Ù."), *pSec);
- SendNotice(buf);
- --*pSec;
- return passes_per_sec;
- }
- }
- void Shutdown(int iSec)
- {
- if (g_bNoMoreClient)
- {
- thecore_shutdown();
- return;
- }
- CWarMapManager::instance().OnShutdown();
- char buf[64];
- snprintf(buf, sizeof(buf), LC_TEXT("%dÃÊ ÈÄ °ÔÀÓÀÌ ¼Ë´Ù¿î µË´Ï´Ù."), iSec);
- SendNotice(buf);
- shutdown_event_data* info = AllocEventInfo<shutdown_event_data>();
- info->seconds = iSec;
- event_create(shutdown_event, info, 1);
- }
- ACMD(do_shutdown)
- {
- if (NULL == ch)
- {
- sys_err("Accept shutdown command from %s.", ch->GetName());
- }
- TPacketGGShutdown p;
- p.bHeader = HEADER_GG_SHUTDOWN;
- P2P_MANAGER::instance().Send(&p, sizeof(TPacketGGShutdown));
- Shutdown(10);
- }
- */
- EVENTFUNC(timed_event)
- {
- TimedEventInfo * info = dynamic_cast<TimedEventInfo *>( event->info );
- if ( info == NULL )
- {
- sys_err( "timed_event> <Factor> Null pointer" );
- return 0;
- }
- LPCHARACTER ch = info->ch;
- if (ch == NULL) { // <Factor>
- return 0;
- }
- LPDESC d = ch->GetDesc();
- if (info->left_second <= 0)
- {
- ch->m_pkTimedEvent = NULL;
- switch (info->subcmd)
- {
- case SCMD_LOGOUT:
- case SCMD_QUIT:
- case SCMD_PHASE_SELECT:
- {
- TPacketNeedLoginLogInfo acc_info;
- acc_info.dwPlayerID = ch->GetDesc()->GetAccountTable().id;
- db_clientdesc->DBPacket( HEADER_GD_VALID_LOGOUT, 0, &acc_info, sizeof(acc_info) );
- LogManager::instance().DetailLoginLog( false, ch );
- #ifdef __INVENTORY_PROTECT_SYSTEM__
- if (ch->GetQuestFlag("abs.INVENTORY_LOCK") == 0)
- ch->SetQuestFlag("abs.INVENTORY_LOCK", 1);
- #endif
- }
- break;
- }
- switch (info->subcmd)
- {
- case SCMD_LOGOUT:
- if (d)
- d->SetPhase(PHASE_CLOSE);
- break;
- case SCMD_QUIT:
- ch->ChatPacket(CHAT_TYPE_COMMAND, "quit");
- break;
- case SCMD_PHASE_SELECT:
- {
- ch->Disconnect("timed_event - SCMD_PHASE_SELECT");
- if (d)
- {
- d->SetPhase(PHASE_SELECT);
- }
- }
- break;
- }
- return 0;
- }
- else
- {
- ch->ChatInfoTrans(("%dÃÊ ³²¾Ò½À´Ï´Ù."), info->left_second);
- --info->left_second;
- }
- return PASSES_PER_SEC(1);
- }
- ACMD(do_cmd)
- {
- /* RECALL_DELAY
- if (ch->m_pkRecallEvent != NULL)
- {
- ch->ChatInfoTrans(("Ãë¼Ò µÇ¾ú½À´Ï´Ù."));
- event_cancel(&ch->m_pkRecallEvent);
- return;
- }
- // END_OF_RECALL_DELAY */
- if (ch->m_pkTimedEvent)
- {
- ch->ChatInfoTrans(("Ãë¼Ò µÇ¾ú½À´Ï´Ù."));
- event_cancel(&ch->m_pkTimedEvent);
- return;
- }
- switch (subcmd)
- {
- case SCMD_LOGOUT:
- ch->ChatInfoTrans(("·Î±×ÀΠȸéÀ¸·Î µ¹¾Æ °©´Ï´Ù. Àá½Ã¸¸ ±â´Ù¸®¼¼¿ä."));
- break;
- case SCMD_QUIT:
- ch->ChatInfoTrans(("°ÔÀÓÀ» Á¾·á ÇÕ´Ï´Ù. Àá½Ã¸¸ ±â´Ù¸®¼¼¿ä."));
- break;
- case SCMD_PHASE_SELECT:
- ch->ChatInfoTrans(("ij¸¯Å͸¦ Àüȯ ÇÕ´Ï´Ù. Àá½Ã¸¸ ±â´Ù¸®¼¼¿ä."));
- break;
- }
- int nExitLimitTime = 10;
- if (ch->IsHack(false, true, nExitLimitTime) &&
- false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()) &&
- (!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
- {
- return;
- }
- switch (subcmd)
- {
- case SCMD_LOGOUT:
- case SCMD_QUIT:
- case SCMD_PHASE_SELECT:
- {
- TimedEventInfo* info = AllocEventInfo<TimedEventInfo>();
- {
- if (ch->IsPosition(POS_FIGHTING))
- info->left_second = 10;
- else
- info->left_second = 3;
- }
- info->ch = ch;
- info->subcmd = subcmd;
- strlcpy(info->szReason, argument, sizeof(info->szReason));
- ch->m_pkTimedEvent = event_create(timed_event, info, 1);
- }
- break;
- }
- }
- ACMD(do_mount)
- {
- /*
- char arg1[256];
- struct action_mount_param param;
- // ÀÌ¹Ì Å¸°í ÀÖÀ¸¸é
- if (ch->GetMountingChr())
- {
- char arg2[256];
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- if (!*arg1 || !*arg2)
- return;
- param.x = atoi(arg1);
- param.y = atoi(arg2);
- param.vid = ch->GetMountingChr()->GetVID();
- param.is_unmount = true;
- float distance = DISTANCE_SQRT(param.x - (DWORD) ch->GetX(), param.y - (DWORD) ch->GetY());
- if (distance > 600.0f)
- {
- ch->ChatInfoTrans(("Á» ´õ °¡±îÀÌ °¡¼ ³»¸®¼¼¿ä."));
- return;
- }
- action_enqueue(ch, ACTION_TYPE_MOUNT, ¶m, 0.0f, true);
- return;
- }
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(atoi(arg1));
- if (!tch->IsNPC() || !tch->IsMountable())
- {
- ch->ChatInfoTrans(("°Å±â¿¡´Â Å» ¼ö ¾ø¾î¿ä."));
- return;
- }
- float distance = DISTANCE_SQRT(tch->GetX() - ch->GetX(), tch->GetY() - ch->GetY());
- if (distance > 600.0f)
- {
- ch->ChatInfoTrans(("Á» ´õ °¡±îÀÌ °¡¼ Ÿ¼¼¿ä."));
- return;
- }
- param.vid = tch->GetVID();
- param.is_unmount = false;
- action_enqueue(ch, ACTION_TYPE_MOUNT, ¶m, 0.0f, true);
- */
- }
- ACMD(do_fishing)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- ch->SetRotation(atof(arg1));
- ch->fishing();
- }
- ACMD(do_console)
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ConsoleEnable");
- }
- ACMD(do_restart)
- {
- if (false == ch->IsDead())
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "CloseRestartWindow");
- ch->StartRecoveryEvent();
- return;
- }
- if (NULL == ch->m_pkDeadEvent)
- return;
- int iTimeToDead = (event_time(ch->m_pkDeadEvent) / passes_per_sec);
- if (subcmd != SCMD_RESTART_TOWN && (!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
- {
- if (!test_server)
- {
- if (ch->IsHack())
- {
- //¼ºÁö ¸ÊÀϰæ¿ì¿¡´Â üũ ÇÏÁö ¾Ê´Â´Ù.
- if (false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
- {
- ch->ChatInfoTrans(("¾ÆÁ÷ Àç½ÃÀÛ ÇÒ ¼ö ¾ø½À´Ï´Ù. (%dÃÊ ³²À½)"), iTimeToDead - (180 - g_nPortalLimitTime));
- return;
- }
- }
- #define eFRS_HERESEC 180 // editedd 180 to 177 3 saniye dogma suresi
- if (iTimeToDead > eFRS_HERESEC)
- {
- ch->ChatInfoTrans(("¾ÆÁ÷ Àç½ÃÀÛ ÇÒ ¼ö ¾ø½À´Ï´Ù. (%dÃÊ ³²À½)"), iTimeToDead - eFRS_HERESEC);
- return;
- }
- }
- }
- //PREVENT_HACK
- //DESC : â°í, ±³È¯ â ÈÄ Æ÷Å»À» »ç¿ëÇÏ´Â ¹ö±×¿¡ ÀÌ¿ëµÉ¼ö ÀÖ¾î¼
- // ÄğŸÀÓÀ» Ãß°¡
- if (subcmd == SCMD_RESTART_TOWN)
- {
- if (ch->IsHack())
- {
- //±æµå¸Ê, ¼ºÁö¸Ê¿¡¼´Â üũ ÇÏÁö ¾Ê´Â´Ù.
- if ((!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG) ||
- false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
- {
- ch->ChatInfoTrans(("¾ÆÁ÷ Àç½ÃÀÛ ÇÒ ¼ö ¾ø½À´Ï´Ù. (%dÃÊ ³²À½)"), iTimeToDead - (180 - g_nPortalLimitTime));
- return;
- }
- }
- #define eFRS_TOWNSEC 173
- if (iTimeToDead > eFRS_TOWNSEC)
- {
- ch->ChatInfoTrans(("¾ÆÁ÷ ¸¶À»¿¡¼ Àç½ÃÀÛ ÇÒ ¼ö ¾ø½À´Ï´Ù. (%d ÃÊ ³²À½)"), iTimeToDead - eFRS_TOWNSEC);
- return;
- }
- }
- //END_PREVENT_HACK
- ch->ChatPacket(CHAT_TYPE_COMMAND, "CloseRestartWindow");
- ch->GetDesc()->SetPhase(PHASE_GAME);
- ch->SetPosition(POS_STANDING);
- ch->StartRecoveryEvent();
- //FORKED_LOAD
- //DESC: »ï°Å¸® ÀüÅõ½Ã ºÎȰÀ» ÇÒ°æ¿ì ¸ÊÀÇ ÀÔ±¸°¡ ¾Æ´Ñ »ï°Å¸® ÀüÅõÀÇ ½ÃÀÛÁöÁ¡À¸·Î À̵¿ÇÏ°Ô µÈ´Ù.
- if (1 == quest::CQuestManager::instance().GetEventFlag("threeway_war"))
- {
- if (subcmd == SCMD_RESTART_TOWN || subcmd == SCMD_RESTART_HERE)
- {
- if (true == CThreeWayWar::instance().IsThreeWayWarMapIndex(ch->GetMapIndex()) &&
- false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
- {
- ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
- ch->ReviveInvisible(5);
- #ifdef __PET_SYSTEM__
- ch->CheckPet();
- #endif
- ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
- ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
- return;
- }
- //¼ºÁö
- if (true == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
- {
- if (CThreeWayWar::instance().GetReviveTokenForPlayer(ch->GetPlayerID()) <= 0)
- {
- ch->ChatInfoTrans(("¼ºÁö¿¡¼ ºÎȰ ±âȸ¸¦ ¸ğµÎ ÀÒ¾ú½À´Ï´Ù! ¸¶À»·Î À̵¿ÇÕ´Ï´Ù!"));
- ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
- }
- else
- {
- ch->Show(ch->GetMapIndex(), GetSungziStartX(ch->GetEmpire()), GetSungziStartY(ch->GetEmpire()));
- }
- ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
- ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
- ch->ReviveInvisible(5);
- #ifdef __PET_SYSTEM__
- ch->CheckPet();
- #endif
- return;
- }
- }
- }
- //END_FORKED_LOAD
- if (ch->GetDungeon())
- ch->GetDungeon()->UseRevive(ch);
- if (ch->GetWarMap() && !ch->IsObserverMode())
- {
- CWarMap * pMap = ch->GetWarMap();
- DWORD dwGuildOpponent = pMap ? pMap->GetGuildOpponent(ch) : 0;
- if (dwGuildOpponent)
- {
- switch (subcmd)
- {
- case SCMD_RESTART_TOWN:
- sys_log(0, "do_restart: restart town");
- PIXEL_POSITION pos;
- if (CWarMapManager::instance().GetStartPosition(ch->GetMapIndex(), ch->GetGuild()->GetID() < dwGuildOpponent ? 0 : 1, pos))
- ch->Show(ch->GetMapIndex(), pos.x, pos.y);
- else
- ch->ExitToSavedLocation();
- ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
- ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
- ch->ReviveInvisible(5);
- #ifdef __PET_SYSTEM__
- ch->CheckPet();
- #endif
- break;
- case SCMD_RESTART_HERE:
- sys_log(0, "do_restart: restart here");
- ch->RestartAtSamePos();
- //ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
- ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
- ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
- ch->ReviveInvisible(5);
- #ifdef __PET_SYSTEM__
- ch->CheckPet();
- #endif
- break;
- }
- return;
- }
- }
- switch (subcmd)
- {
- case SCMD_RESTART_TOWN:
- sys_log(0, "do_restart: restart town");
- PIXEL_POSITION pos;
- if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire(ch->GetMapIndex(), ch->GetEmpire(), pos))
- ch->WarpSet(pos.x, pos.y);
- else
- ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
- ch->PointChange(POINT_HP, 50 - ch->GetHP());
- ch->DeathPenalty(1);
- break;
- case SCMD_RESTART_HERE:
- sys_log(0, "do_restart: restart here");
- ch->RestartAtSamePos();
- //ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
- #ifdef FULL_HP_BORN
- ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
- #else
- ch->PointChange(POINT_HP, 50 - ch->GetHP());
- #endif
- #ifdef ENABLE_RONARK_SYSTEM
- if (CRonarkMapManager::instance().IsRonarkMap(ch->GetMapIndex()))
- {
- ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
- }
- #endif
- ch->DeathPenalty(0);
- ch->ReviveInvisible(5);
- #ifdef __PET_SYSTEM__
- ch->CheckPet();
- #endif
- break;
- }
- }
- #define MAX_STAT g_iStatusPointSetMaxValue
- ACMD(do_stat_reset)
- {
- ch->PointChange(POINT_STAT_RESET_COUNT, 12 - ch->GetPoint(POINT_STAT_RESET_COUNT));
- }
- ACMD(do_stat_minus)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- if (ch->IsPolymorphed())
- {
- ch->ChatInfoTrans(("µĞ°© Áß¿¡´Â ´É·ÂÀ» ¿Ã¸± ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- if (ch->GetPoint(POINT_STAT_RESET_COUNT) <= 0)
- return;
- if (!strcmp(arg1, "st"))
- {
- if (ch->GetRealPoint(POINT_ST) <= JobInitialPoints[ch->GetJob()].st)
- return;
- ch->SetRealPoint(POINT_ST, ch->GetRealPoint(POINT_ST) - 1);
- ch->SetPoint(POINT_ST, ch->GetPoint(POINT_ST) - 1);
- ch->ComputePoints();
- ch->PointChange(POINT_ST, 0);
- }
- else if (!strcmp(arg1, "dx"))
- {
- if (ch->GetRealPoint(POINT_DX) <= JobInitialPoints[ch->GetJob()].dx)
- return;
- ch->SetRealPoint(POINT_DX, ch->GetRealPoint(POINT_DX) - 1);
- ch->SetPoint(POINT_DX, ch->GetPoint(POINT_DX) - 1);
- ch->ComputePoints();
- ch->PointChange(POINT_DX, 0);
- }
- else if (!strcmp(arg1, "ht"))
- {
- if (ch->GetRealPoint(POINT_HT) <= JobInitialPoints[ch->GetJob()].ht)
- return;
- ch->SetRealPoint(POINT_HT, ch->GetRealPoint(POINT_HT) - 1);
- ch->SetPoint(POINT_HT, ch->GetPoint(POINT_HT) - 1);
- ch->ComputePoints();
- ch->PointChange(POINT_HT, 0);
- ch->PointChange(POINT_MAX_HP, 0);
- }
- else if (!strcmp(arg1, "iq"))
- {
- if (ch->GetRealPoint(POINT_IQ) <= JobInitialPoints[ch->GetJob()].iq)
- return;
- ch->SetRealPoint(POINT_IQ, ch->GetRealPoint(POINT_IQ) - 1);
- ch->SetPoint(POINT_IQ, ch->GetPoint(POINT_IQ) - 1);
- ch->ComputePoints();
- ch->PointChange(POINT_IQ, 0);
- ch->PointChange(POINT_MAX_SP, 0);
- }
- else
- return;
- ch->PointChange(POINT_STAT, +1);
- ch->PointChange(POINT_STAT_RESET_COUNT, -1);
- ch->ComputePoints();
- }
- #ifdef ENABLE_HIZLI_STATU
- ACMD(do_stat_val)
- {
- char arg1[256], arg2[256];
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- int val = 0;
- str_to_number(val, arg2);
- if (!*arg1 || val <= 0)
- return;
- if (ch->IsPolymorphed())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change your state as long as you are transformed."));
- return;
- }
- if (ch->GetPoint(POINT_STAT) <= 0)
- return;
- BYTE idx = 0;
- if (!strcmp(arg1, "st"))
- idx = POINT_ST;
- else if (!strcmp(arg1, "dx"))
- idx = POINT_DX;
- else if (!strcmp(arg1, "ht"))
- idx = POINT_HT;
- else if (!strcmp(arg1, "iq"))
- idx = POINT_IQ;
- else
- return;
- if (ch->GetRealPoint(idx) >= MAX_STAT)
- return;
- if (val > ch->GetPoint(POINT_STAT))
- val = ch->GetPoint(POINT_STAT);
- if (ch->GetRealPoint(idx) + val > MAX_STAT)
- val = MAX_STAT - ch->GetRealPoint(idx);
- ch->SetRealPoint(idx, ch->GetRealPoint(idx) + val);
- ch->SetPoint(idx, ch->GetPoint(idx) + val);
- ch->ComputePoints();
- ch->PointChange(idx, 0);
- if (idx == POINT_IQ)
- ch->PointChange(POINT_MAX_HP, 0);
- else if (idx == POINT_HT)
- ch->PointChange(POINT_MAX_SP, 0);
- ch->PointChange(POINT_STAT, -val);
- ch->ComputePoints();
- }
- #endif
- ACMD(do_stat)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- if (ch->IsPolymorphed())
- {
- ch->ChatInfoTrans(("µĞ°© Áß¿¡´Â ´É·ÂÀ» ¿Ã¸± ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- if (ch->GetPoint(POINT_STAT) <= 0)
- return;
- BYTE idx = 0;
- if (!strcmp(arg1, "st"))
- idx = POINT_ST;
- else if (!strcmp(arg1, "dx"))
- idx = POINT_DX;
- else if (!strcmp(arg1, "ht"))
- idx = POINT_HT;
- else if (!strcmp(arg1, "iq"))
- idx = POINT_IQ;
- else
- return;
- // ch->ChatPacket(CHAT_TYPE_INFO, "%s GRP(%d) idx(%u), MAX_STAT(%d), expr(%d)", __FUNCTION__, ch->GetRealPoint(idx), idx, MAX_STAT, ch->GetRealPoint(idx) >= MAX_STAT);
- if (ch->GetRealPoint(idx) >= MAX_STAT)
- return;
- ch->SetRealPoint(idx, ch->GetRealPoint(idx) + 1);
- ch->SetPoint(idx, ch->GetPoint(idx) + 1);
- ch->ComputePoints();
- ch->PointChange(idx, 0);
- if (idx == POINT_IQ)
- {
- ch->PointChange(POINT_MAX_HP, 0);
- }
- else if (idx == POINT_HT)
- {
- ch->PointChange(POINT_MAX_SP, 0);
- }
- ch->PointChange(POINT_STAT, -1);
- ch->ComputePoints();
- }
- ACMD(do_pvp)
- {
- if (ch->GetArena() != NULL || CArenaManager::instance().IsArenaMap(ch->GetMapIndex()) == true)
- {
- ch->ChatInfoTrans(("´ë·ÃÀå¿¡¼ »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- DWORD vid = 0;
- str_to_number(vid, arg1);
- LPCHARACTER pkVictim = CHARACTER_MANAGER::instance().Find(vid);
- if (!pkVictim)
- return;
- if (pkVictim->IsNPC())
- return;
- if (pkVictim->GetArena() != NULL)
- {
- pkVictim->ChatInfoTrans(("»ó´ë¹æÀÌ ´ë·ÃÁßÀÔ´Ï´Ù."));
- return;
- }
- CPVPManager::instance().Insert(ch, pkVictim);
- }
- ACMD(do_guildskillup)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- if (!ch->GetGuild())
- {
- ch->ChatInfoTrans(("<±æµå> ±æµå¿¡ ¼ÓÇØÀÖÁö ¾Ê½À´Ï´Ù."));
- return;
- }
- CGuild* g = ch->GetGuild();
- TGuildMember* gm = g->GetMember(ch->GetPlayerID());
- if (gm->grade == GUILD_LEADER_GRADE)
- {
- DWORD vnum = 0;
- str_to_number(vnum, arg1);
- g->SkillLevelUp(vnum);
- }
- else
- {
- ch->ChatInfoTrans(("<±æµå> ±æµå ½ºÅ³ ·¹º§À» º¯°æÇÒ ±ÇÇÑÀÌ ¾ø½À´Ï´Ù."));
- }
- }
- ACMD(do_skillup)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- DWORD vnum = 0;
- str_to_number(vnum, arg1);
- if (true == ch->CanUseSkill(vnum))
- {
- ch->SkillLevelUp(vnum);
- }
- else
- {
- switch(vnum)
- {
- case SKILL_HORSE_WILDATTACK:
- case SKILL_HORSE_CHARGE:
- case SKILL_HORSE_ESCAPE:
- case SKILL_HORSE_WILDATTACK_RANGE:
- case SKILL_7_A_ANTI_TANHWAN:
- case SKILL_7_B_ANTI_AMSEOP:
- case SKILL_7_C_ANTI_SWAERYUNG:
- case SKILL_7_D_ANTI_YONGBI:
- case SKILL_8_A_ANTI_GIGONGCHAM:
- case SKILL_8_B_ANTI_YEONSA:
- case SKILL_8_C_ANTI_MAHWAN:
- case SKILL_8_D_ANTI_BYEURAK:
- case SKILL_ADD_HP:
- case SKILL_RESIST_PENETRATE:
- ch->SkillLevelUp(vnum);
- break;
- }
- }
- }
- //
- // @version 05/06/20 Bang2ni - Ä¿¸Çµå ó¸® Delegate to CHARACTER class
- //
- ACMD(do_safebox_close)
- {
- ch->CloseSafebox();
- }
- //
- // @version 05/06/20 Bang2ni - Ä¿¸Çµå ó¸® Delegate to CHARACTER class
- //
- ACMD(do_safebox_password)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- ch->ReqSafeboxLoad(arg1);
- }
- ACMD(do_safebox_change_password)
- {
- char arg1[256];
- char arg2[256];
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- if (!*arg1 || strlen(arg1)>6)
- {
- ch->ChatInfoTrans(("<â°í> À߸øµÈ ¾ÏÈ£¸¦ ÀÔ·ÂÇϼ̽À´Ï´Ù."));
- return;
- }
- if (!*arg2 || strlen(arg2)>6)
- {
- ch->ChatInfoTrans(("<â°í> À߸øµÈ ¾ÏÈ£¸¦ ÀÔ·ÂÇϼ̽À´Ï´Ù."));
- return;
- }
- TSafeboxChangePasswordPacket p;
- p.dwID = ch->GetDesc()->GetAccountTable().id;
- strlcpy(p.szOldPassword, arg1, sizeof(p.szOldPassword));
- strlcpy(p.szNewPassword, arg2, sizeof(p.szNewPassword));
- db_clientdesc->DBPacket(HEADER_GD_SAFEBOX_CHANGE_PASSWORD, ch->GetDesc()->GetHandle(), &p, sizeof(p));
- }
- ACMD(do_mall_password)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1 || strlen(arg1) > 6)
- {
- ch->ChatInfoTrans(("<â°í> À߸øµÈ ¾ÏÈ£¸¦ ÀÔ·ÂÇϼ̽À´Ï´Ù."));
- return;
- }
- int iPulse = thecore_pulse();
- if (ch->GetMall())
- {
- ch->ChatInfoTrans(("<â°í> â°í°¡ ÀÌ¹Ì ¿·ÁÀÖ½À´Ï´Ù."));
- return;
- }
- if (iPulse - ch->GetMallLoadTime() < passes_per_sec * 10) // 10ÃÊ¿¡ Çѹø¸¸ ¿äû °¡´É
- {
- ch->ChatInfoTrans(("<â°í> â°í¸¦ ´İÀºÁö 10ÃÊ ¾È¿¡´Â ¿ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- ch->SetMallLoadTime(iPulse);
- TSafeboxLoadPacket p;
- p.dwID = ch->GetDesc()->GetAccountTable().id;
- strlcpy(p.szLogin, ch->GetDesc()->GetAccountTable().login, sizeof(p.szLogin));
- strlcpy(p.szPassword, arg1, sizeof(p.szPassword));
- db_clientdesc->DBPacket(HEADER_GD_MALL_LOAD, ch->GetDesc()->GetHandle(), &p, sizeof(p));
- }
- ACMD(do_mall_close)
- {
- if (ch->GetMall())
- {
- ch->SetMallLoadTime(thecore_pulse());
- ch->CloseMall();
- ch->Save();
- }
- }
- ACMD(do_ungroup)
- {
- if (!ch->GetParty())
- return;
- if (!CPartyManager::instance().IsEnablePCParty())
- {
- ch->ChatInfoTrans(("<ÆÄƼ> ¼¹ö ¹®Á¦·Î ÆÄƼ °ü·Ã 󸮸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- if (ch->GetDungeon())
- {
- ch->ChatInfoTrans(("<ÆÄƼ> ´øÀü ¾È¿¡¼´Â ÆÄƼ¿¡¼ ³ª°¥ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- LPPARTY pParty = ch->GetParty();
- if (pParty->GetMemberCount() == 2)
- {
- // party disband
- CPartyManager::instance().DeleteParty(pParty);
- }
- else
- {
- ch->ChatInfoTrans(("<ÆÄƼ> ÆÄƼ¿¡¼ ³ª°¡¼Ì½À´Ï´Ù."));
- //pParty->SendPartyRemoveOneToAll(ch);
- pParty->Quit(ch->GetPlayerID());
- //pParty->SendPartyRemoveAllToOne(ch);
- }
- }
- ACMD(do_close_shop)
- {
- if (ch->GetMyShop())
- {
- ch->CloseMyShop();
- return;
- }
- }
- ACMD(do_set_walk_mode)
- {
- ch->SetNowWalking(true);
- ch->SetWalking(true);
- }
- ACMD(do_set_run_mode)
- {
- ch->SetNowWalking(false);
- ch->SetWalking(false);
- }
- ACMD(do_war)
- {
- //³» ±æµå Á¤º¸¸¦ ¾ò¾î¿À°í
- CGuild* g = ch->GetGuild();
- if (!g)
- return;
- //ÀüÀïÁßÀÎÁö üũÇѹø!
- if (g->UnderAnyWar())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ÀÌ¹Ì ´Ù¸¥ ÀüÀï¿¡ ÂüÀü Áß ÀÔ´Ï´Ù."));
- return;
- }
- //ÆÄ¶ó¸ŞÅ͸¦ µÎ¹è·Î ³ª´©°í
- #ifdef ENABLE_IMPROVED_GUILD_WAR_SYSTEM
- char arg1[256], arg2[256], arg3[256], arg4[256];
- one_argument(three_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2), arg3, sizeof(arg3)), arg4, sizeof(arg4));
- #else
- char arg1[256], arg2[256];
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- #endif
- DWORD type = GUILD_WAR_TYPE_FIELD; //@fixme101
- if (!*arg1)
- return;
- if (*arg2)
- {
- str_to_number(type, arg2);
- if (type >= GUILD_WAR_TYPE_MAX_NUM)
- type = GUILD_WAR_TYPE_FIELD;
- if (type < 0)// @fixme146
- return;
- }
- //±æµåÀÇ ¸¶½ºÅÍ ¾ÆÀ̵𸦠¾ò¾î¿ÂµÚ
- DWORD gm_pid = g->GetMasterPID();
- //¸¶½ºÅÍÀÎÁö üũ(±æÀüÀº ±æµåÀ常ÀÌ °¡´É)
- if (gm_pid != ch->GetPlayerID())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ±æµåÀü¿¡ ´ëÇÑ ±ÇÇÑÀÌ ¾ø½À´Ï´Ù."));
- return;
- }
- //»ó´ë ±æµå¸¦ ¾ò¾î¿À°í
- CGuild* opp_g = CGuildManager::instance().FindGuildByName(arg1);
- if (!opp_g)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ±×·± ±æµå°¡ ¾ø½À´Ï´Ù."));
- return;
- }
- //»ó´ë±æµå¿ÍÀÇ »óÅ üũ
- switch (g->GetGuildWarState(opp_g->GetID()))
- {
- case GUILD_WAR_NONE:
- {
- if (opp_g->UnderAnyWar())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> »ó´ë¹æ ±æµå°¡ ÀÌ¹Ì ÀüÀï Áß ÀÔ´Ï´Ù."));
- return;
- }
- int iWarPrice = KOR_aGuildWarInfo[type].iWarPrice;
- if (g->GetGuildMoney() < iWarPrice)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> Àüºñ°¡ ºÎÁ·ÇÏ¿© ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- if (opp_g->GetGuildMoney() < iWarPrice)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> »ó´ë¹æ ±æµåÀÇ Àüºñ°¡ ºÎÁ·ÇÏ¿© ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- }
- break;
- case GUILD_WAR_SEND_DECLARE:
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì ¼±ÀüÆ÷°í ÁßÀÎ ±æµåÀÔ´Ï´Ù."));
- return;
- }
- break;
- case GUILD_WAR_RECV_DECLARE:
- {
- if (opp_g->UnderAnyWar())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> »ó´ë¹æ ±æµå°¡ ÀÌ¹Ì ÀüÀï Áß ÀÔ´Ï´Ù."));
- g->RequestRefuseWar(opp_g->GetID()
- #ifdef ENABLE_IMPROVED_GUILD_WAR_SYSTEM
- , 0, 0, 0
- #endif
- );
- return;
- }
- }
- break;
- case GUILD_WAR_RESERVE:
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ÀÌ¹Ì ÀüÀïÀÌ ¿¹¾àµÈ ±æµå ÀÔ´Ï´Ù."));
- return;
- }
- break;
- case GUILD_WAR_END:
- return;
- default:
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ÀÌ¹Ì ÀüÀï ÁßÀÎ ±æµåÀÔ´Ï´Ù."));
- g->RequestRefuseWar(opp_g->GetID()
- #ifdef ENABLE_IMPROVED_GUILD_WAR_SYSTEM
- , 0, 0, 0
- #endif
- );
- return;
- }
- if (!g->CanStartWar(type))
- {
- // ±æµåÀüÀ» ÇÒ ¼ö ÀÖ´Â Á¶°ÇÀ» ¸¸Á·ÇÏÁö¾Ê´Â´Ù.
- if (g->GetLadderPoint() == 0)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ·¹´õ Á¡¼ö°¡ ¸ğÀÚ¶ó¼ ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
- sys_log(0, "GuildWar.StartError.NEED_LADDER_POINT");
- }
- else if (g->GetMemberCount() < GUILD_WAR_MIN_MEMBER_COUNT)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ±æµåÀüÀ» Çϱâ À§Çؼ± ÃÖ¼ÒÇÑ %d¸íÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù."), GUILD_WAR_MIN_MEMBER_COUNT);
- sys_log(0, "GuildWar.StartError.NEED_MINIMUM_MEMBER[%d]", GUILD_WAR_MIN_MEMBER_COUNT);
- }
- else
- {
- sys_log(0, "GuildWar.StartError.UNKNOWN_ERROR");
- }
- return;
- }
- // ÇʵåÀü üũ¸¸ ÇÏ°í ¼¼¼¼ÇÑ Ã¼Å©´Â »ó´ë¹æÀÌ ½Â³«ÇÒ¶§ ÇÑ´Ù.
- if (!opp_g->CanStartWar(GUILD_WAR_TYPE_FIELD))
- {
- if (opp_g->GetLadderPoint() == 0)
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> »ó´ë¹æ ±æµåÀÇ ·¹´õ Á¡¼ö°¡ ¸ğÀÚ¶ó¼ ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
- else if (opp_g->GetMemberCount() < GUILD_WAR_MIN_MEMBER_COUNT)
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> »ó´ë¹æ ±æµåÀÇ ±æµå¿ø ¼ö°¡ ºÎÁ·ÇÏ¿© ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- do
- {
- if (g->GetMasterCharacter() != NULL)
- break;
- CCI* pCCI = P2P_MANAGER::instance().FindByPID(g->GetMasterPID());
- if (pCCI != NULL)
- break;
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> »ó´ë¹æ ±æµåÀÇ ±æµåÀåÀÌ Á¢¼ÓÁßÀÌ ¾Æ´Õ´Ï´Ù."));
- g->RequestRefuseWar(opp_g->GetID()
- #ifdef ENABLE_IMPROVED_GUILD_WAR_SYSTEM
- , 0, 0, 0
- #endif
- );
- return;
- } while (false);
- do
- {
- if (opp_g->GetMasterCharacter() != NULL)
- break;
- CCI* pCCI = P2P_MANAGER::instance().FindByPID(opp_g->GetMasterPID());
- if (pCCI != NULL)
- break;
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> »ó´ë¹æ ±æµåÀÇ ±æµåÀåÀÌ Á¢¼ÓÁßÀÌ ¾Æ´Õ´Ï´Ù."));
- g->RequestRefuseWar(opp_g->GetID()
- #ifdef ENABLE_IMPROVED_GUILD_WAR_SYSTEM
- , 0, 0, 0
- #endif
- );
- return;
- } while (false);
- // #ifdef ENABLE_IMPROVED_GUILD_WAR_SYSTEM
- // int iMaxPlayer = 0;
- // if (!*arg3) iMaxPlayer = 1000;
- // else str_to_number(iMaxPlayer, arg3);
- // if (iMaxPlayer < 1) iMaxPlayer = 1000;
- // int iMaxScore = 0;
- // if (!*arg4) iMaxScore = KOR_aGuildWarInfo[type].iEndScore;
- // else str_to_number(iMaxScore, arg4);
- // if (iMaxScore < 1) iMaxScore = KOR_aGuildWarInfo[type].iEndScore;
- // g->RequestDeclareWar(opp_g->GetID(), type, iMaxPlayer, iMaxScore);
- // #else
- // g->RequestDeclareWar(opp_g->GetID(), type);
- // #endif
- }
- ACMD(do_nowar)
- {
- CGuild* g = ch->GetGuild();
- if (!g)
- return;
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- DWORD gm_pid = g->GetMasterPID();
- if (gm_pid != ch->GetPlayerID())
- {
- ch->ChatInfoTrans(("<±æµå> ±æµåÀü¿¡ ´ëÇÑ ±ÇÇÑÀÌ ¾ø½À´Ï´Ù."));
- return;
- }
- CGuild* opp_g = CGuildManager::instance().FindGuildByName(arg1);
- if (!opp_g)
- {
- ch->ChatInfoTrans(("<±æµå> ±×·± ±æµå°¡ ¾ø½À´Ï´Ù."));
- return;
- }
- g->RequestRefuseWar(opp_g->GetID()
- #ifdef ENABLE_IMPROVED_GUILD_WAR_SYSTEM
- , 0, 0, 0
- #endif
- );
- }
- ACMD(do_detaillog)
- {
- ch->DetailLog();
- }
- ACMD(do_monsterlog)
- {
- ch->ToggleMonsterLog();
- }
- ACMD(do_pkmode)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- if (ch->IsGM()) // Eğer karakter GM ise
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("GameMaster'lar serbest moda geçemez!"));
- return;
- }
- #ifdef PK_MODE_FIX
- if (MapManager::instance().IsPvpMapp(ch))
- {
- ch->ChatInfoTrans(("Bu haritada bu ozelligi kullanamam."));
- return;
- }
- #endif
- BYTE mode = 0;
- str_to_number(mode, arg1);
- if (mode == PK_MODE_PROTECT)
- return;
- if (ch->GetLevel() < PK_PROTECT_LEVEL && mode != 0)
- return;
- ch->SetPKMode(mode);
- }
- ACMD(do_messenger_auth)
- {
- if (ch->GetArena())
- {
- ch->ChatInfoTrans(("´ë·ÃÀå¿¡¼ »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- char arg1[256], arg2[256];
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- if (!*arg1 || !*arg2)
- return;
- char answer = LOWER(*arg1);
- // @fixme130 AuthToAdd void -> bool
- bool bIsDenied = answer != 'y';
- bool bIsAdded = MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, bIsDenied); // DENY
- if (bIsAdded && bIsDenied)
- {
- LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg2);
- if (tch)
- tch->ChatInfoTrans(("%s ´ÔÀ¸·Î ºÎÅÍ Ä£±¸ µî·ÏÀ» °ÅºÎ ´çÇß½À´Ï´Ù."), ch->GetStringName().c_str());
- }
- }
- ACMD(do_setblockmode)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (*arg1)
- {
- BYTE flag = 0;
- str_to_number(flag, arg1);
- ch->SetBlockMode(flag);
- }
- }
- ACMD(do_unmount)
- {
- if (true == ch->UnEquipSpecialRideUniqueItem())
- {
- ch->RemoveAffect(AFFECT_MOUNT);
- ch->RemoveAffect(AFFECT_MOUNT_BONUS);
- if (ch->IsHorseRiding())
- {
- ch->StopRiding();
- }
- }
- else
- {
- ch->ChatInfoTrans(("Àκ¥Å丮°¡ ²Ë Â÷¼ ³»¸± ¼ö ¾ø½À´Ï´Ù."));
- }
- }
- ACMD(do_observer_exit)
- {
- if (ch->IsObserverMode())
- {
- if (ch->GetWarMap())
- ch->SetWarMap(NULL);
- if (ch->GetArena() != NULL || ch->GetArenaObserverMode() == true)
- {
- ch->SetArenaObserverMode(false);
- if (ch->GetArena() != NULL)
- ch->GetArena()->RemoveObserver(ch->GetPlayerID());
- ch->SetArena(NULL);
- ch->WarpSet(ARENA_RETURN_POINT_X(ch->GetEmpire()), ARENA_RETURN_POINT_Y(ch->GetEmpire()));
- }
- else
- {
- ch->ExitToSavedLocation();
- }
- ch->SetObserverMode(false);
- }
- }
- ACMD(do_view_equip)
- {
- if (ch->GetGMLevel() <= GM_PLAYER)
- return;
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (*arg1)
- {
- DWORD vid = 0;
- str_to_number(vid, arg1);
- LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
- if (!tch)
- return;
- if (!tch->IsPC())
- return;
- /*
- int iSPCost = ch->GetMaxSP() / 3;
- if (ch->GetSP() < iSPCost)
- {
- ch->ChatInfoTrans(("Á¤½Å·ÂÀÌ ºÎÁ·ÇÏ¿© ´Ù¸¥ »ç¶÷ÀÇ Àåºñ¸¦ º¼ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- ch->PointChange(POINT_SP, -iSPCost);
- */
- tch->SendEquipment(ch);
- }
- }
- ACMD(do_party_request)
- {
- if (ch->GetArena())
- {
- ch->ChatInfoTrans(("´ë·ÃÀå¿¡¼ »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- if (ch->GetParty())
- {
- ch->ChatInfoTrans(("ÀÌ¹Ì ÆÄƼ¿¡ ¼ÓÇØ ÀÖÀ¸¹Ç·Î °¡ÀÔ½ÅûÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
- return;
- }
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- DWORD vid = 0;
- str_to_number(vid, arg1);
- LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
- if (tch)
- if (!ch->RequestToParty(tch))
- ch->ChatPacket(CHAT_TYPE_COMMAND, "PartyRequestDenied");
- }
- ACMD(do_party_request_accept)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- DWORD vid = 0;
- str_to_number(vid, arg1);
- LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
- if (tch)
- ch->AcceptToParty(tch);
- }
- ACMD(do_party_request_deny)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- return;
- DWORD vid = 0;
- str_to_number(vid, arg1);
- LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
- if (tch)
- ch->DenyToParty(tch);
- }
- // LUA_ADD_GOTO_INFO
- struct GotoInfo
- {
- std::string st_name;
- BYTE empire;
- int mapIndex;
- DWORD x, y;
- GotoInfo()
- {
- st_name = "";
- empire = 0;
- mapIndex = 0;
- x = 0;
- y = 0;
- }
- GotoInfo(const GotoInfo& c_src)
- {
- __copy__(c_src);
- }
- void operator = (const GotoInfo& c_src)
- {
- __copy__(c_src);
- }
- void __copy__(const GotoInfo& c_src)
- {
- st_name = c_src.st_name;
- empire = c_src.empire;
- mapIndex = c_src.mapIndex;
- x = c_src.x;
- y = c_src.y;
- }
- };
- static const char* FN_point_string(int apply_number)
- {
- switch (apply_number)
- {
- case POINT_MAX_HP: return LC_TEXT_TRANS("ÃÖ´ë »ı¸í·Â +%d", "en");
- case POINT_MAX_SP: return LC_TEXT_TRANS("ÃÖ´ë Á¤½Å·Â +%d", "en");
- case POINT_HT: return LC_TEXT_TRANS("ü·Â +%d", "en");
- case POINT_IQ: return LC_TEXT_TRANS("Áö´É +%d", "en");
- case POINT_ST: return LC_TEXT_TRANS("±Ù·Â +%d", "en");
- case POINT_DX: return LC_TEXT_TRANS("¹Îø +%d", "en");
- case POINT_ATT_SPEED: return LC_TEXT_TRANS("°ø°İ¼Óµµ +%d", "en");
- case POINT_MOV_SPEED: return LC_TEXT_TRANS("À̵¿¼Óµµ %d", "en");
- case POINT_CASTING_SPEED: return LC_TEXT_TRANS("ÄğŸÀÓ -%d", "en");
- case POINT_HP_REGEN: return LC_TEXT_TRANS("»ı¸í·Â ȸº¹ +%d", "en");
- case POINT_SP_REGEN: return LC_TEXT_TRANS("Á¤½Å·Â ȸº¹ +%d", "en");
- case POINT_POISON_PCT: return LC_TEXT_TRANS("µ¶°ø°İ %d", "en");
- #ifdef ENABLE_WOLFMAN_CHARACTER
- case POINT_BLEEDING_PCT: return LC_TEXT_TRANS("µ¶°ø°İ %d", "en");
- #endif
- case POINT_STUN_PCT: return LC_TEXT_TRANS("½ºÅÏ +%d", "en");
- case POINT_SLOW_PCT: return LC_TEXT_TRANS("½½·Î¿ì +%d", "en");
- case POINT_CRITICAL_PCT: return LC_TEXT_TRANS("%d%% È®·ü·Î Ä¡¸íŸ °ø°İ", "en");
- case POINT_RESIST_CRITICAL: return LC_TEXT_TRANS("»ó´ëÀÇ Ä¡¸íŸ È®·ü %d%% °¨¼Ò", "en");
- case POINT_PENETRATE_PCT: return LC_TEXT_TRANS("%d%% È®·ü·Î °üÅë °ø°İ", "en");
- case POINT_RESIST_PENETRATE: return LC_TEXT_TRANS("»ó´ëÀÇ °üÅë °ø°İ È®·ü %d%% °¨¼Ò", "en");
- case POINT_ATTBONUS_HUMAN: return LC_TEXT_TRANS("Àΰ£·ù ¸ó½ºÅÍ Å¸°İÄ¡ +%d%%", "en");
- case POINT_ATTBONUS_ANIMAL: return LC_TEXT_TRANS("µ¿¹°·ù ¸ó½ºÅÍ Å¸°İÄ¡ +%d%%", "en");
- case POINT_ATTBONUS_ORC: return LC_TEXT_TRANS("¿õ±ÍÁ· Ÿ°İÄ¡ +%d%%", "en");
- case POINT_ATTBONUS_MILGYO: return LC_TEXT_TRANS("¹Ğ±³·ù Ÿ°İÄ¡ +%d%%", "en");
- case POINT_ATTBONUS_UNDEAD: return LC_TEXT_TRANS("½Ãü·ù Ÿ°İÄ¡ +%d%%", "en");
- case POINT_ATTBONUS_DEVIL: return LC_TEXT_TRANS("¾Ç¸¶·ù Ÿ°İÄ¡ +%d%%", "en");
- case POINT_STEAL_HP: return LC_TEXT_TRANS("Ÿ°İÄ¡ %d%% ¸¦ »ı¸í·ÂÀ¸·Î Èí¼ö", "en");
- case POINT_STEAL_SP: return LC_TEXT_TRANS("Ÿ·ÂÄ¡ %d%% ¸¦ Á¤½Å·ÂÀ¸·Î Èí¼ö", "en");
- case POINT_MANA_BURN_PCT: return LC_TEXT_TRANS("%d%% È®·ü·Î Ÿ°İ½Ã »ó´ë Àü½Å·Â ¼Ò¸ğ", "en");
- case POINT_DAMAGE_SP_RECOVER: return LC_TEXT_TRANS("%d%% È®·ü·Î ÇÇÇØ½Ã Á¤½Å·Â ȸº¹", "en");
- case POINT_BLOCK: return LC_TEXT_TRANS("¹°¸®Å¸°İ½Ã ºí·° È®·ü %d%%", "en");
- case POINT_DODGE: return LC_TEXT_TRANS("Ȱ °ø°İ ȸÇÇ È®·ü %d%%", "en");
- case POINT_RESIST_SWORD: return LC_TEXT_TRANS("ÇÑ¼Õ°Ë ¹æ¾î %d%%", "en");
- case POINT_RESIST_TWOHAND: return LC_TEXT_TRANS("¾ç¼Õ°Ë ¹æ¾î %d%%", "en");
- case POINT_RESIST_DAGGER: return LC_TEXT_TRANS("µÎ¼Õ°Ë ¹æ¾î %d%%", "en");
- case POINT_RESIST_BELL: return LC_TEXT_TRANS("¹æ¿ï ¹æ¾î %d%%", "en");
- case POINT_RESIST_FAN: return LC_TEXT_TRANS("ºÎä ¹æ¾î %d%%", "en");
- case POINT_RESIST_BOW: return LC_TEXT_TRANS("Ȱ°ø°İ ÀúÇ× %d%%", "en");
- #ifdef ENABLE_WOLFMAN_CHARACTER
- case POINT_RESIST_CLAW: return LC_TEXT_TRANS("µÎ¼Õ°Ë ¹æ¾î %d%%", "en");
- #endif
- case POINT_RESIST_FIRE: return LC_TEXT_TRANS("È¿° ÀúÇ× %d%%", "en");
- case POINT_RESIST_ELEC: return LC_TEXT_TRANS("Àü±â ÀúÇ× %d%%", "en");
- case POINT_RESIST_MAGIC: return LC_TEXT_TRANS("¸¶¹ı ÀúÇ× %d%%", "en");
- #ifdef ENABLE_MAGIC_REDUCTION_SYSTEM
- case POINT_RESIST_MAGIC_REDUCTION: return LC_TEXT_TRANS("¸¶¹ı ÀúÇ× %d%%", "en");
- #endif
- case POINT_RESIST_WIND: return LC_TEXT_TRANS("¹Ù¶÷ ÀúÇ× %d%%", "en");
- case POINT_RESIST_ICE: return LC_TEXT_TRANS("³Ã±â ÀúÇ× %d%%", "en");
- case POINT_RESIST_EARTH: return LC_TEXT_TRANS("´ëÁö ÀúÇ× %d%%", "en");
- case POINT_RESIST_DARK: return LC_TEXT_TRANS("¾îµÒ ÀúÇ× %d%%", "en");
- case POINT_REFLECT_MELEE: return LC_TEXT_TRANS("Á÷Á¢ Ÿ°İÄ¡ ¹İ»ç È®·ü : %d%%", "en");
- case POINT_REFLECT_CURSE: return LC_TEXT_TRANS("ÀúÁÖ µÇµ¹¸®±â È®·ü %d%%", "en");
- case POINT_POISON_REDUCE: return LC_TEXT_TRANS("µ¶ ÀúÇ× %d%%", "en");
- #ifdef ENABLE_WOLFMAN_CHARACTER
- case POINT_BLEEDING_REDUCE: return LC_TEXT_TRANS("µ¶ ÀúÇ× %d%%", "en");
- #endif
- case POINT_KILL_SP_RECOVER: return LC_TEXT_TRANS("%d%% È®·ü·Î ÀûÅğÄ¡½Ã Á¤½Å·Â ȸº¹", "en");
- case POINT_EXP_DOUBLE_BONUS: return LC_TEXT_TRANS("%d%% È®·ü·Î ÀûÅğÄ¡½Ã °æÇèÄ¡ Ãß°¡ »ó½Â", "en");
- case POINT_GOLD_DOUBLE_BONUS: return LC_TEXT_TRANS("%d%% È®·ü·Î ÀûÅğÄ¡½Ã µ· 2¹è µå·Ó", "en");
- case POINT_ITEM_DROP_BONUS: return LC_TEXT_TRANS("%d%% È®·ü·Î ÀûÅğÄ¡½Ã ¾ÆÀÌÅÛ 2¹è µå·Ó", "en");
- case POINT_POTION_BONUS: return LC_TEXT_TRANS("¹°¾à »ç¿ë½Ã %d%% ¼º´É Áõ°¡", "en");
- case POINT_KILL_HP_RECOVERY: return LC_TEXT_TRANS("%d%% È®·ü·Î ÀûÅğÄ¡½Ã »ı¸í·Â ȸº¹", "en");
- // case POINT_IMMUNE_STUN: return LC_TEXT_TRANS("±âÀıÇÏÁö ¾ÊÀ½ %d%%");
- // case POINT_IMMUNE_SLOW: return LC_TEXT_TRANS("´À·ÁÁöÁö ¾ÊÀ½ %d%%");
- // case POINT_IMMUNE_FALL: return LC_TEXT_TRANS("³Ñ¾îÁöÁö ¾ÊÀ½ %d%%");
- // case POINT_SKILL: return LC_TEXT_TRANS("");
- // case POINT_BOW_DISTANCE: return LC_TEXT_TRANS("");
- case POINT_ATT_GRADE_BONUS: return LC_TEXT_TRANS("°ø°İ·Â +%d", "en");
- case POINT_DEF_GRADE_BONUS: return LC_TEXT_TRANS("¹æ¾î·Â +%d", "en");
- case POINT_MAGIC_ATT_GRADE: return LC_TEXT_TRANS("¸¶¹ı °ø°İ·Â +%d", "en");
- case POINT_MAGIC_DEF_GRADE: return LC_TEXT_TRANS("¸¶¹ı ¹æ¾î·Â +%d", "en");
- // case POINT_CURSE_PCT: return LC_TEXT_TRANS("");
- case POINT_MAX_STAMINA: return LC_TEXT_TRANS("ÃÖ´ë Áö±¸·Â +%d", "en");
- case POINT_ATTBONUS_WARRIOR: return LC_TEXT_TRANS("¹«»ç¿¡°Ô °ÇÔ +%d%%", "en");
- case POINT_ATTBONUS_ASSASSIN: return LC_TEXT_TRANS("ÀÚ°´¿¡°Ô °ÇÔ +%d%%", "en");
- case POINT_ATTBONUS_SURA: return LC_TEXT_TRANS("¼ö¶ó¿¡°Ô °ÇÔ +%d%%", "en");
- case POINT_ATTBONUS_SHAMAN: return LC_TEXT_TRANS("¹«´ç¿¡°Ô °ÇÔ +%d%%", "en");
- #ifdef ENABLE_WOLFMAN_CHARACTER
- case POINT_ATTBONUS_WOLFMAN: return LC_TEXT_TRANS("¹«´ç¿¡°Ô °ÇÔ +%d%%", "en");
- #endif
- case POINT_ATTBONUS_MONSTER: return LC_TEXT_TRANS("¸ó½ºÅÍ¿¡°Ô °ÇÔ +%d%%", "en");
- case POINT_MALL_ATTBONUS: return LC_TEXT_TRANS("°ø°İ·Â +%d%%", "en");
- case POINT_MALL_DEFBONUS: return LC_TEXT_TRANS("¹æ¾î·Â +%d%%", "en");
- case POINT_MALL_EXPBONUS: return LC_TEXT_TRANS("°æÇèÄ¡ %d%%", "en");
- case POINT_MALL_ITEMBONUS: return LC_TEXT_TRANS("¾ÆÀÌÅÛ µå·ÓÀ² %.1f¹è", "en");
- case POINT_MALL_GOLDBONUS: return LC_TEXT_TRANS("µ· µå·ÓÀ² %.1f¹è", "en");
- case POINT_MAX_HP_PCT: return LC_TEXT_TRANS("ÃÖ´ë »ı¸í·Â +%d%%", "en");
- case POINT_MAX_SP_PCT: return LC_TEXT_TRANS("ÃÖ´ë Á¤½Å·Â +%d%%", "en");
- case POINT_SKILL_DAMAGE_BONUS: return LC_TEXT_TRANS("½ºÅ³ µ¥¹ÌÁö %d%%", "en");
- case POINT_NORMAL_HIT_DAMAGE_BONUS: return LC_TEXT_TRANS("ÆòŸ µ¥¹ÌÁö %d%%", "en");
- case POINT_SKILL_DEFEND_BONUS: return LC_TEXT_TRANS("½ºÅ³ µ¥¹ÌÁö ÀúÇ× %d%%", "en");
- case POINT_NORMAL_HIT_DEFEND_BONUS: return LC_TEXT_TRANS("ÆòŸ µ¥¹ÌÁö ÀúÇ× %d%%", "en");
- // case POINT_PC_BANG_EXP_BONUS: return LC_TEXT_TRANS("");
- // case POINT_PC_BANG_DROP_BONUS: return LC_TEXT_TRANS("");
- // case POINT_EXTRACT_HP_PCT: return LC_TEXT_TRANS("");
- case POINT_RESIST_WARRIOR: return LC_TEXT_TRANS("¹«»ç°ø°İ¿¡ %d%% ÀúÇ×", "en");
- case POINT_RESIST_ASSASSIN: return LC_TEXT_TRANS("ÀÚ°´°ø°İ¿¡ %d%% ÀúÇ×", "en");
- case POINT_RESIST_SURA: return LC_TEXT_TRANS("¼ö¶ó°ø°İ¿¡ %d%% ÀúÇ×", "en");
- case POINT_RESIST_SHAMAN: return LC_TEXT_TRANS("¹«´ç°ø°İ¿¡ %d%% ÀúÇ×", "en");
- #ifdef ENABLE_WOLFMAN_CHARACTER
- case POINT_RESIST_WOLFMAN: return LC_TEXT_TRANS("¹«´ç°ø°İ¿¡ %d%% ÀúÇ×","en");
- #endif
- default: return NULL;
- }
- }
- static bool FN_hair_affect_string(LPCHARACTER ch, char *buf, size_t bufsiz)
- {
- if (NULL == ch || NULL == buf)
- return false;
- CAffect* aff = NULL;
- time_t expire = 0;
- struct tm ltm;
- int year, mon, day;
- int offset = 0;
- aff = ch->FindAffect(AFFECT_HAIR);
- if (NULL == aff)
- return false;
- expire = ch->GetQuestFlag("hair.limit_time");
- if (expire < get_global_time())
- return false;
- // set apply string
- offset = snprintf(buf, bufsiz, FN_point_string(aff->bApplyOn), aff->lApplyValue);
- if (offset < 0 || offset >= (int) bufsiz)
- offset = bufsiz - 1;
- localtime_r(&expire, <m);
- year = ltm.tm_year + 1900;
- mon = ltm.tm_mon + 1;
- day = ltm.tm_mday;
- snprintf(buf + offset, bufsiz - offset, LC_TEXT_TRANS(" (¸¸·áÀÏ : %d³â %d¿ù %dÀÏ)","en"), year, mon, day);
- return true;
- }
- ACMD(do_costume)
- {
- char buf[512];
- const size_t bufferSize = sizeof(buf);
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- CItem* pBody = ch->GetWear(WEAR_COSTUME_BODY);
- CItem* pHair = ch->GetWear(WEAR_COSTUME_HAIR);
- #ifdef ENABLE_MOUNT_COSTUME_SYSTEM
- CItem* pMount = ch->GetWear(WEAR_COSTUME_MOUNT);
- #endif
- #ifdef ENABLE_ACCE_COSTUME_SYSTEM
- CItem* pAcce = ch->GetWear(WEAR_COSTUME_ACCE);
- #endif
- #ifdef ENABLE_WEAPON_COSTUME_SYSTEM
- CItem* pWeapon = ch->GetWear(WEAR_COSTUME_WEAPON);
- #endif
- ch->ChatPacket(CHAT_TYPE_INFO, "COSTUME status:");
- if (pHair)
- {
- const char* itemName = pHair->GetLocaleName(ch);
- ch->ChatPacket(CHAT_TYPE_INFO, " HAIR : %s", itemName);
- for (int i = 0; i < pHair->GetAttributeCount(); ++i)
- {
- const TPlayerItemAttribute& attr = pHair->GetAttribute(i);
- if (0 < attr.bType)
- {
- snprintf(buf, bufferSize, FN_point_string(attr.bType), attr.sValue);
- ch->ChatPacket(CHAT_TYPE_INFO, " %s", buf);
- }
- }
- if (pHair->IsEquipped() && arg1[0] == 'h')
- ch->UnequipItem(pHair);
- }
- if (pBody)
- {
- const char* itemName = pBody->GetLocaleName(ch);
- ch->ChatPacket(CHAT_TYPE_INFO, " BODY : %s", itemName);
- if (pBody->IsEquipped() && arg1[0] == 'b')
- ch->UnequipItem(pBody);
- }
- #ifdef ENABLE_MOUNT_COSTUME_SYSTEM
- if (pMount)
- {
- const char* itemName = pMount->GetName();
- ch->ChatPacket(CHAT_TYPE_INFO, " MOUNT : %s", itemName);
- if (pMount->IsEquipped() && arg1[0] == 'm')
- ch->UnequipItem(pMount);
- }
- #endif
- #ifdef ENABLE_ACCE_COSTUME_SYSTEM
- if (pAcce)
- {
- const char* itemName = pAcce->GetName();
- ch->ChatPacket(CHAT_TYPE_INFO, " ACCE : %s", itemName);
- if (pAcce->IsEquipped() && arg1[0] == 'a')
- ch->UnequipItem(pMount);
- }
- #endif
- #ifdef ENABLE_WEAPON_COSTUME_SYSTEM
- if (pWeapon)
- {
- const char* itemName = pWeapon->GetName();
- ch->ChatPacket(CHAT_TYPE_INFO, " WEAPON : %s", itemName);
- if (pWeapon->IsEquipped() && arg1[0] == 'w')
- ch->UnequipItem(pMount);
- }
- #endif
- }
- ACMD(do_hair)
- {
- char buf[256];
- if (false == FN_hair_affect_string(ch, buf, sizeof(buf)))
- return;
- ch->ChatPacket(CHAT_TYPE_INFO, buf);
- }
- ACMD(do_inventory)
- {
- int index = 0;
- int count = 1;
- char arg1[256];
- char arg2[256];
- LPITEM item;
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- if (!*arg1)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Usage: inventory <start_index> <count>");
- return;
- }
- if (!*arg2)
- {
- index = 0;
- str_to_number(count, arg1);
- }
- else
- {
- str_to_number(index, arg1); index = MIN(index, INVENTORY_MAX_NUM);
- str_to_number(count, arg2); count = MIN(count, INVENTORY_MAX_NUM);
- }
- for (int i = 0; i < count; ++i)
- {
- if (index >= INVENTORY_MAX_NUM)
- break;
- item = ch->GetInventoryItem(index);
- ch->ChatPacket(CHAT_TYPE_INFO, "inventory [%d] = %s",
- index, item ? item->GetLocaleName(ch) : "<NONE>");
- ++index;
- }
- }
- //gift notify quest command
- ACMD(do_gift)
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "gift");
- }
- ACMD(do_cube)
- {
- if (!ch->CanDoCube())
- return;
- dev_log(LOG_DEB0, "CUBE COMMAND <%s>: %s", ch->GetName(), argument);
- int cube_index = 0, inven_index = 0;
- const char *line;
- char arg1[256], arg2[256], arg3[256];
- line = two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- one_argument(line, arg3, sizeof(arg3));
- if (0 == arg1[0])
- {
- // print usage
- ch->ChatPacket(CHAT_TYPE_INFO, "Usage: cube open");
- ch->ChatPacket(CHAT_TYPE_INFO, " cube close");
- ch->ChatPacket(CHAT_TYPE_INFO, " cube add <inveltory_index>");
- ch->ChatPacket(CHAT_TYPE_INFO, " cube delete <cube_index>");
- ch->ChatPacket(CHAT_TYPE_INFO, " cube list");
- ch->ChatPacket(CHAT_TYPE_INFO, " cube cancel");
- ch->ChatPacket(CHAT_TYPE_INFO, " cube make [all]");
- return;
- }
- const std::string& strArg1 = std::string(arg1);
- // r_info (request information)
- // /cube r_info ==> (Client -> Server) ÇöÀç NPC°¡ ¸¸µé ¼ö ÀÖ´Â ·¹½ÃÇÇ ¿äû
- // (Server -> Client) /cube r_list npcVNUM resultCOUNT 123,1/125,1/128,1/130,5
- //
- // /cube r_info 3 ==> (Client -> Server) ÇöÀç NPC°¡ ¸¸µé¼ö ÀÖ´Â ·¹½ÃÇÇ Áß 3¹øÂ° ¾ÆÀÌÅÛÀ» ¸¸µå´Â µ¥ ÇÊ¿äÇÑ Á¤º¸¸¦ ¿äû
- // /cube r_info 3 5 ==> (Client -> Server) ÇöÀç NPC°¡ ¸¸µé¼ö ÀÖ´Â ·¹½ÃÇÇ Áß 3¹øÂ° ¾ÆÀÌÅÛºÎÅÍ ÀÌÈÄ 5°³ÀÇ ¾ÆÀÌÅÛÀ» ¸¸µå´Â µ¥ ÇÊ¿äÇÑ Àç·á Á¤º¸¸¦ ¿äû
- // (Server -> Client) /cube m_info startIndex count 125,1|126,2|127,2|123,5&555,5&555,4/120000@125,1|126,2|127,2|123,5&555,5&555,4/120000
- //
- if (strArg1 == "r_info")
- {
- if (0 == arg2[0])
- Cube_request_result_list(ch);
- else
- {
- if (isdigit(*arg2))
- {
- int listIndex = 0, requestCount = 1;
- str_to_number(listIndex, arg2);
- if (0 != arg3[0] && isdigit(*arg3))
- str_to_number(requestCount, arg3);
- Cube_request_material_info(ch, listIndex, requestCount);
- }
- }
- return;
- }
- switch (LOWER(arg1[0]))
- {
- case 'o': // open
- Cube_open(ch);
- break;
- case 'c': // close
- Cube_close(ch);
- break;
- case 'l': // list
- Cube_show_list(ch);
- break;
- case 'a': // add cue_index inven_index
- {
- if (0 == arg2[0] || !isdigit(*arg2) ||
- 0 == arg3[0] || !isdigit(*arg3))
- return;
- str_to_number(cube_index, arg2);
- str_to_number(inven_index, arg3);
- Cube_add_item (ch, cube_index, inven_index);
- }
- break;
- case 'd': // delete
- {
- if (0 == arg2[0] || !isdigit(*arg2))
- return;
- str_to_number(cube_index, arg2);
- Cube_delete_item (ch, cube_index);
- }
- break;
- case 'm': // make
- if (0 != arg2[0])
- {
- while (true == Cube_make(ch))
- dev_log (LOG_DEB0, "cube make success");
- }
- else
- Cube_make(ch);
- break;
- default:
- return;
- }
- }
- // ÁÖ»çÀ§
- ACMD(do_dice)
- {
- char arg1[256], arg2[256];
- int start = 1, end = 100;
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- if (*arg1 && *arg2)
- {
- start = atoi(arg1);
- end = atoi(arg2);
- }
- else if (*arg1 && !*arg2)
- {
- start = 1;
- end = atoi(arg1);
- }
- end = MAX(start, end);
- start = MIN(start, end);
- int n = number(start, end);
- if (ch->GetParty())
- ch->GetParty()->ChatPacketToAllMember(CHAT_TYPE_INFO, LC_TEXT_TRANS("%s´ÔÀÌ ÁÖ»çÀ§¸¦ ±¼·Á %d°¡ ³ª¿Ô½À´Ï´Ù. (%d-%d)", "en"), ch->GetName(), n, start, end);
- else
- ch->ChatInfoTrans(("´ç½ÅÀÌ ÁÖ»çÀ§¸¦ ±¼·Á %d°¡ ³ª¿Ô½À´Ï´Ù. (%d-%d)"), n, start, end);
- }
- #ifdef ENABLE_NEWSTUFF
- ACMD(do_click_safebox)
- {
- ch->SetSafeboxOpenPosition();
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowMeSafeboxPassword");
- }
- ACMD(do_force_logout)
- {
- LPDESC pDesc=DESC_MANAGER::instance().FindByCharacterName(ch->GetName());
- if (!pDesc)
- return;
- pDesc->DelayedDisconnect(0);
- }
- #endif
- ACMD(do_click_mall)
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowMeMallPassword");
- }
- ACMD(do_ride)
- {
- dev_log(LOG_DEB0, "[DO_RIDE] start");
- if (ch->IsDead() || ch->IsStun())
- return;
- #ifdef FIX_HORSE_SPAM
- int CalcLastMoveSec = (get_dword_time() - ch->GetLastMountTime()) / 1000 + 0.5;
- if (CalcLastMoveSec < 2)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "<Spam> Bu kadar hizli yapamazsin, %d saniye beklemelisin.",(2-CalcLastMoveSec));
- return;
- }
- #endif
- // ³»¸®±â
- {
- if (ch->IsHorseRiding())
- {
- dev_log(LOG_DEB0, "[DO_RIDE] stop riding");
- ch->StopRiding();
- return;
- }
- if (ch->GetMountVnum())
- {
- dev_log(LOG_DEB0, "[DO_RIDE] unmount");
- do_unmount(ch, NULL, 0, 0);
- return;
- }
- }
- // Ÿ±â
- {
- if (ch->GetHorse() != NULL)
- {
- dev_log(LOG_DEB0, "[DO_RIDE] start riding");
- ch->StartRiding();
- return;
- }
- for (BYTE i=0; i<INVENTORY_MAX_NUM; ++i)
- {
- LPITEM item = ch->GetInventoryItem(i);
- if (NULL == item)
- continue;
- // À¯´ÏÅ© Å»°Í ¾ÆÀÌÅÛ
- if (item->IsRideItem())
- {
- if (
- NULL==ch->GetWear(WEAR_UNIQUE1)
- || NULL==ch->GetWear(WEAR_UNIQUE2)
- #ifdef ENABLE_MOUNT_COSTUME_SYSTEM
- || NULL==ch->GetWear(WEAR_COSTUME_MOUNT)
- #endif
- )
- {
- dev_log(LOG_DEB0, "[DO_RIDE] USE UNIQUE ITEM");
- //ch->EquipItem(item);
- ch->UseItem(TItemPos (INVENTORY, i));
- return;
- }
- }
- // ÀÏ¹İ Å»°Í ¾ÆÀÌÅÛ
- // TODO : Å»°Í¿ë SubType Ãß°¡
- switch (item->GetVnum())
- {
- case 71114: // Àú½ÅÀÌ¿ë±Ç
- case 71116: // »ê°ß½ÅÀÌ¿ë±Ç
- case 71118: // ÅõÁö¹üÀÌ¿ë±Ç
- case 71120: // »çÀÚ¿ÕÀÌ¿ë±Ç
- dev_log(LOG_DEB0, "[DO_RIDE] USE QUEST ITEM");
- ch->UseItem(TItemPos (INVENTORY, i));
- return;
- }
- // GF mantis #113524, 52001~52090 ¹ø Å»°Í
- if( (item->GetVnum() > 52000) && (item->GetVnum() < 52091) ) {
- dev_log(LOG_DEB0, "[DO_RIDE] USE QUEST ITEM");
- ch->UseItem(TItemPos (INVENTORY, i));
- return;
- }
- }
- }
- // Ÿ°Å³ª ³»¸± ¼ö ¾øÀ»¶§
- ch->ChatInfoTrans(("¸»À» ¸ÕÀú ¼ÒÈ¯ÇØÁÖ¼¼¿ä."));
- }
- #ifdef __INVENTORY_PROTECT_SYSTEM__
- ACMD(do_inventory_change_password)
- {
- char arg1[256], arg2[256];
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- if (*arg1 && *arg2)
- {
- if (ch->GetInventoryPassword(arg1))
- {
- if (ch->SetInventoryPassword(arg2))
- {
- ch->ChatInfoTrans(("Parola a fost schimbata."));
- return;
- }
- }
- else
- {
- ch->ChatInfoTrans(("Parola este gresita."));
- return;
- }
- }
- }
- ACMD(do_inventory_password)
- {
- if (ch->GetQuestFlag("abs.INVENTORY_LOCK"))
- {
- ch->SendInventoryAsk(0);
- return;
- }
- else if (!ch->GetQuestFlag("abs.INVENTORY_LOCK"))
- {
- ch->SendInventoryAsk(1);
- return;
- }
- }
- ACMD(do_inventory_change_state)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (*arg1)
- {
- if (ch->GetInventoryPassword(arg1))
- {
- if (ch->GetQuestFlag("abs.INVENTORY_LOCK"))
- {
- ch->SetQuestFlag("abs.INVENTORY_LOCK", 0);
- ch->ChatInfoTrans(("Inventarul este deblocat."));
- ch->SendInventoryUnlock();
- return;
- }
- else if (!ch->GetQuestFlag("abs.INVENTORY_LOCK"))
- {
- ch->SetQuestFlag("abs.INVENTORY_LOCK", 1);
- ch->ChatInfoTrans(("<Sistem> Envanter kilitli durumda"));
- ch->SendInventoryLock();
- return;
- }
- }
- else
- {
- ch->ChatInfoTrans(("Parola este gresita."));
- return;
- }
- }
- else
- {
- ch->ChatInfoTrans(("Parola este gresita."));
- }
- }
- #endif
- ACMD(do_daily_reward_reload){
- if (!ch)
- return;
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ManagerGiftSystem DeleteRewards|");
- char* time = "";
- char* rewards = "";
- char* items;
- char* counts;
- SQLMsg * pkMsg(DBManager::instance().DirectQuery("SELECT UNIX_TIMESTAMP(time),reward from player.daily_reward_status where pid = %u",ch->GetPlayerID()));
- SQLResult * pRes = pkMsg->Get();
- if (pRes->uiNumRows > 0){
- SQLMsg * pkMsg9(DBManager::instance().DirectQuery("SELECT UNIX_TIMESTAMP(time),reward from player.daily_reward_status where pid = %u and (time + INTERVAL 1 DAY < NOW()) limit 1;", ch->GetPlayerID()));
- SQLResult * pRes9 = pkMsg9->Get();
- if (pRes9->uiNumRows > 0){
- DBManager::Instance().DirectQuery("DELETE FROM player.daily_reward_status where pid = %u", ch->GetPlayerID());
- DBManager::Instance().DirectQuery("INSERT INTO player.daily_reward_status (pid,time,reward,total_rewards) VALUES(%u,NOW(),0,0)", ch->GetPlayerID());
- ch->ChatPacket(CHAT_TYPE_INFO, "You didnt take the item in the last 24h, so the reward will be the first one.");
- SQLMsg * pkMsg8(DBManager::instance().DirectQuery("SELECT UNIX_TIMESTAMP(time), reward from player.daily_reward_status where pid = %u", ch->GetPlayerID()));
- SQLResult * pRes8 = pkMsg8->Get();
- if (pRes8->uiNumRows > 0){
- MYSQL_ROW row;
- while ((row = mysql_fetch_row(pRes8->pSQLResult)) != NULL){
- time = row[0];
- rewards = row[1];
- }
- }
- }
- else{
- SQLMsg * pkMsg2(DBManager::instance().DirectQuery("SELECT UNIX_TIMESTAMP(time), reward from player.daily_reward_status where pid = %u", ch->GetPlayerID()));
- SQLResult * pRes2 = pkMsg2->Get();
- if (pRes2->uiNumRows > 0){
- MYSQL_ROW row;
- while ((row = mysql_fetch_row(pRes2->pSQLResult)) != NULL){
- time = row[0];
- rewards = row[1];
- }
- }
- }
- }
- else{
- DBManager::Instance().DirectQuery("INSERT INTO player.daily_reward_status (pid,time,reward,total_rewards) VALUES(%u,NOW(),0,0)", ch->GetPlayerID());
- SQLMsg * pkMsg2(DBManager::instance().DirectQuery("SELECT UNIX_TIMESTAMP(time), reward from player.daily_reward_status where pid = %u",ch->GetPlayerID()));
- SQLResult * pRes2 = pkMsg2->Get();
- if (pRes2->uiNumRows > 0){
- MYSQL_ROW row;
- while ((row = mysql_fetch_row(pRes2->pSQLResult)) != NULL){
- time = row[0];
- rewards = row[1];
- }
- }
- }
- SQLMsg * pkMsg3(DBManager::instance().DirectQuery("SELECT items, count from player.daily_reward_items where reward = '%s'",rewards));
- SQLResult * pRes3 = pkMsg3->Get();
- if (pRes3->uiNumRows > 0){
- MYSQL_ROW row;
- while ((row = mysql_fetch_row(pRes3->pSQLResult)) != NULL){
- items = row[0];
- counts = row[1];
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ManagerGiftSystem SetReward|%s|%s",items,counts);
- }
- }
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ManagerGiftSystem SetTime|%s",time);
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ManagerGiftSystem SetDailyReward|%s", rewards);
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ManagerGiftSystem SetRewardDone|");
- }
- ACMD(do_daily_reward_get_reward){
- if (!ch)
- return;
- char* items;
- char* counts;
- DWORD item;
- DWORD count;
- bool reward = false;
- char* rewards;
- // and (NOW() - interval 30 minute > time)
- SQLMsg * pkMsg(DBManager::instance().DirectQuery("SELECT reward from player.daily_reward_status where (NOW() > time) and pid = %u", ch->GetPlayerID()));
- SQLResult * pRes = pkMsg->Get();
- if (pRes->uiNumRows > 0){
- MYSQL_ROW row;
- while ((row = mysql_fetch_row(pRes->pSQLResult)) != NULL){
- rewards = row[0];
- }
- reward = true;
- }
- if (reward){
- SQLMsg * pkMsg2(DBManager::instance().DirectQuery("SELECT items, count from player.daily_reward_items where reward = '%s' ORDER BY RAND() limit 1",rewards));
- SQLResult * pRes2 = pkMsg2->Get();
- if (pRes2->uiNumRows > 0){
- MYSQL_ROW row;
- while ((row = mysql_fetch_row(pRes2->pSQLResult)) != NULL){
- items = row[0];
- counts = row[1];
- }
- }
- str_to_number(item, items);
- str_to_number(count, counts);
- ch->AutoGiveItem(item, count);
- // ch->ChatPacket(CHAT_TYPE_INFO, "recompensa: %s",items);
- DBManager::Instance().DirectQuery("UPDATE daily_reward_status SET reward = CASE WHEN reward = 0 THEN '1' WHEN reward = 1 THEN '2' WHEN reward = 2 THEN '3' WHEN reward = 3 THEN '4' WHEN reward = 4 THEN '5' WHEN reward = 5 THEN '6' WHEN reward = 6 THEN '0' END, total_rewards = total_rewards +1, time = (NOW() + interval 1 day) WHERE pid = %u", ch->GetPlayerID());
- }
- else{
- ch->ChatInfoTrans(("Usted aun no puede obtener la recompensa"));
- }
- }
- #ifdef ENABLE_GUILD_SPY_SYSTEM
- ACMD(do_savasat)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Hata: Gereksiz islem yapmayin.");
- return;
- }
- if (!ch->GetWarMap())
- return;
- LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg1);
- if (!tch)
- return;
- if (!tch->IsPC())
- return;
- if (ch == tch)
- return;
- if (!tch->GetGuild())
- return;
- if (!ch->GetGuild())
- return;
- if (tch->GetGuild()->GetID() != ch->GetGuild()->GetID())
- return;
- CGuild* loncam = CGuildManager::instance().FindGuild(ch->GetGuild()->GetID());
- CGuild* loncan = CGuildManager::instance().FindGuild(tch->GetGuild()->GetID());
- if ((loncam == NULL) || (loncan == NULL))
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Loncan yok");
- }
- else
- {
- if (loncan->GetMasterPID() == ch->GetPlayerID())
- {
- if (loncam->RequestRemoveMember(tch->GetPlayerID()))
- {
- ch->ChatPacket(CHAT_TYPE_GUILD, "%s ajan olarak secilip kovuldu.", tch->GetName());
- tch->GoHome();
- return;
- }
- else
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Hata.");
- return;
- }
- }
- else
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Lonca Lideri Olman Gerekiyor");
- return;
- }
- }
- return;
- }
- #endif
- #ifdef ENABLE_GUILD_MEETING
- ACMD(do_loncatoplantisi)
- {
- if (quest::CQuestManager::instance().GetEventFlag("lonca_toplantisi_disable") == 1)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Sistem suan icin devre disi!");
- return;
- }
- int iPulse = thecore_pulse();
- if (iPulse - ch->GetLastLoncaToplantiLastTime() < passes_per_sec * 10)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "10 Saniye beklemelisin!");
- return;
- }
- ch->SetLastLoncaToplantiLastTime(iPulse);
- if (!ch->GetGuild())
- return;
- if (ch->GetMapIndex() != 1 &&
- ch->GetMapIndex() != 3 &&
- ch->GetMapIndex() != 21 &&
- ch->GetMapIndex() != 23 &&
- ch->GetMapIndex() != 41 &&
- ch->GetMapIndex() != 43)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("map_engel_lonca_toplantisi"));
- ch->ChatPacket(CHAT_TYPE_INFO, "Sadece 1 ve 2.koylerde toplanti yapabilirsin!");
- return;
- }
- CGuild* g = ch->GetGuild();
- if (!g)
- return;
- TGuildMember* gm = g->GetMember(ch->GetPlayerID());
- if (!gm || gm->grade != GUILD_LEADER_GRADE)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Lider degilsin!");
- return;
- }
- std::unique_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT pid FROM player.guild_member WHERE guild_id = %u", g->GetID()));
- if (pMsg->Get()->uiNumRows != 0)
- {
- MYSQL_ROW row;
- while (NULL != (row = mysql_fetch_row(pMsg->Get()->pSQLResult)))
- {
- DWORD Player = 0;
- str_to_number(Player, row[0]);
- LPCHARACTER tch = CHARACTER_MANAGER::instance().FindByPID(Player);
- if (tch && ch != tch)
- {
- tch->ChatPacket(CHAT_TYPE_COMMAND, "loncatoplantisi");
- }
- }
- }
- ch->ChatPacket(CHAT_TYPE_INFO, "<Lonca> Toplanti istegi lonca uyelerine goderildi.");
- }
- ACMD(do_loncatoplantievet)
- {
- if (quest::CQuestManager::instance().GetEventFlag("lonca_toplantisi_disable") == 1)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Sistem suan icin devre disi!");
- return;
- }
- if (!ch->GetGuild())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Loncan uyesi degilsin!");
- return;
- }
- CGuild* g = ch->GetGuild();
- if (!g)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Loncan uyesi degilsin!");
- return;
- }
- LPCHARACTER master = g->GetMasterCharacter();
- if (!master)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Lonca baskani suan aktif degil!");
- return;
- }
- if (master->GetMapIndex() != 1 &&
- master->GetMapIndex() != 3 &&
- master->GetMapIndex() != 21 &&
- master->GetMapIndex() != 23 &&
- master->GetMapIndex() != 41 &&
- master->GetMapIndex() != 43)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Lonca baskani toplantiya uygun olmayan bir mapta!");
- ch->ChatPacket(CHAT_TYPE_INFO, "Sadece 1 ve 2.koylerde toplanti yapabilir!");
- return;
- }
- ch->WarpSet(master->GetX(), master->GetY(), master->GetMapIndex());
- }
- #endif
- #ifdef ENABLE_HIDE_COSTUME_SYSTEM
- ACMD (do_costume_hide)
- {
- char arg1[256];
- one_argument (argument, arg1, sizeof(arg1));
- if (0 == arg1[0])
- return;
- int slot = atoi(arg1);
- ch->FuncHideCostume(slot);
- }
- #endif
- #ifdef ENABLE_ITEM_SHOP_SYSTEM
- ACMD(do_nesne_market)
- {
- if (!ch)
- return;
- if (!ch->GetDesc())
- return;
- if (!ch->IsPC())
- return;
- if (ch->IsStun())
- return;
- if (ch->IsHack())
- return;
- #ifdef _AURA_SYSTEM
- if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ShopSearchOpen 1");
- return;
- }
- #endif
- #ifdef __ENABLE_NEW_OFFLINESHOP__
- if (ch->GetOfflineShopGuest() != NULL || ch->GetAuctionGuest() != NULL)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
- return;
- }
- #endif
- #ifdef ENABLE_ACCE_SYSTEM
- if (ch->isAcceOpened(true) || ch->isAcceOpened(false))
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
- return;
- }
- #endif
- if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->IsDead())
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ShopSearchOpen 1");
- return;
- }
- if (quest::CQuestManager::instance().GetPCForce(ch->GetPlayerID())->IsRunning() == true)
- return;
- char arg1[256], arg2[256];
- two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
- DWORD id = 0;
- DWORD count = 0;
- if (!*arg1 || !*arg2)
- return;
- str_to_number(id, arg1);
- str_to_number(count, arg2);
- bool bRes = CItemShopManager::instance().Buy(ch, id, count); // buy func
- if (bRes)
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("nesnemarketbasarili"));
- }
- ACMD(do_nesneyenile)
- {
- if (!ch)
- return;
- if (!ch->GetDesc())
- return;
- if (!ch->IsPC())
- return;
- if (ch->IsStun())
- return;
- if (ch->IsHack())
- return;
- #ifdef _AURA_SYSTEM
- if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ShopSearchOpen 1");
- return;
- }
- #endif
- #ifdef __ENABLE_NEW_OFFLINESHOP__
- if (ch->GetOfflineShopGuest() != NULL || ch->GetAuctionGuest() != NULL)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
- return;
- }
- #endif
- #ifdef ENABLE_ACCE_SYSTEM
- if (ch->isAcceOpened(true) || ch->isAcceOpened(false))
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
- return;
- }
- #endif
- if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->IsDead())
- {
- ch->ChatPacket(CHAT_TYPE_COMMAND, "ShopSearchOpen 1");
- return;
- }
- if (quest::CQuestManager::instance().GetPCForce(ch->GetPlayerID())->IsRunning() == true)
- return;
- CItemShopManager::instance().SendClientPacket(ch); // buy func
- }
- #endif
- #ifdef AUTO_PICKUP_RENEWAL
- ACMD(do_auto_pickup)
- {
- char arg1[256];
- one_argument(argument, arg1, sizeof(arg1));
- if (!*arg1)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Usage: Activate <0-1>"));
- return;
- }
- int activate;
- str_to_number(activate, arg1);
- if (0 == activate)
- {
- CAffect* affect = ch->FindAffect(AFFECT_AUTO_PICKUP);
- if (!affect)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Affect is already deactive!");
- return;
- }
- ch->RemoveAffect(affect);
- }
- else if (1 == activate)
- {
- CAffect* affect = ch->FindAffect(AFFECT_AUTO_PICKUP);
- if(affect!=NULL)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Affect is already active!");
- return;
- }
- ch->AddAffect(AFFECT_AUTO_PICKUP, POINT_NONE, 0, AFF_PICKUP, INFINITE_AFFECT_DURATION, 0, 0, false);
- }
- else
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Usage: Activate <0-1>"));
- return;
- }
- }
- #endif
- ACMD(do_costum_effect)
- {
- char arg1[256];
- char arg2[256];
- char arg3[256];
- one_argument(two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)), arg3, sizeof(arg3));
- if (!*arg1 || !*arg2 || !*arg3)
- return;
- if (ch->IsOpenSafebox() || ch->GetExchange() || ch->GetMyShop() || ch->IsCubeOpen())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´Ù¸¥ °Å·¡Ã¢ÀÌ ¿¸°»óÅ¿¡¼´Â »óÁ¡°Å·¡¸¦ ÇÒ¼ö °¡ ¾ø½À´Ï´Ù."));
- return;
- }
- DWORD dwVnum = 0;
- str_to_number(dwVnum, arg1);
- if (dwVnum < 0 || dwVnum >= INVENTORY_MAX_NUM)
- return;
- DWORD dwVnumSlot = 0;
- str_to_number(dwVnumSlot, arg3);
- if (dwVnumSlot < 0 || dwVnumSlot >= INVENTORY_MAX_NUM)
- return;
- int BStat = 0;
- str_to_number(BStat, arg2);
- if (BStat <= 0 || BStat > 7)
- return;
- LPITEM item2 = ch->GetInventoryItem(dwVnumSlot);
- if (!item2 || item2->IsExchanging() || item2->GetVnum() != 50512)
- return;