Selamlar. Flame Dungeon, Snow Dungeon, Devils Catacomb ve Deviltower Zone için geri dönüş sistemini sizlerle paylaşmak istiyorum.
[CODE lang="cpp" title="common\tables.h"]//aratın;
int aiPremiumTimes[PREMIUM_MAX_NUM];
//altına ekleyin;
long d_map_index;[/CODE]
[CODE lang="cpp" title="db\src\ClientManagerPlayer.cpp"]//aratın;
"horse_skill_point = %d, "
//altına ekleyin;
"d_map_index = %d, "
//tekrar aratın;
pkTab->horse_skill_point);
//değiştirin;
pkTab->horse_skill_point,
pkTab->d_map_index);
//tekrar aratın;
,horse_skill_point
//devamına ekleyin;
,d_map_index
//tekrar aratın;
str_to_number(pkTab->horse_skill_point, row[col++]);
//altına ekleyin;
str_to_number(pkTab->d_map_index, row[col++]);[/CODE]
[CODE lang="cpp" title="game\src\char.cpp"]//aratın;
tab.horse = GetHorseData();
//altına ekleyin;
tab.d_map_index = m_points.d_map_index;
//tekrar aratın;
m_points.iRandomSP = t->sRandomSP;
//altına ekleyin;
m_points.d_map_index = t->d_map_index;[/CODE]
[CODE lang="cpp" title="game\src\char.h"]//aratın;
BYTE skill_group;
//altına ekleyin;
long d_map_index;
//tekrar aratın;
ESex GET_SEX(LPCHARACTER ch);
//üstüne ekleyin;
public:
long LicyPlayerDungeonIndex() { return m_points.d_map_index; }
void MniusPlayerDungeonIndex(long vnum) { m_points.d_map_index = vnum; }[/CODE]
[CODE lang="cpp" title="game\src\dungeon.cpp"]//aratın;
void CDungeon::Initialize()
[
...
]
//altına ekleyin;
struct FWarpToLicyDungeonCoords
{
FWarpToLicyDungeonCoords(long lMapIndex, long X, long Y, LPDUNGEON d)
: m_lMapIndex(lMapIndex), m_x(X), m_y(Y), m_pkDungeon(d)
{
}
void operator () (LPCHARACTER ch)
{
ch->SaveExitLocation();
ch->WarpSet(m_x, m_y, m_lMapIndex);
}
long m_lMapIndex;
long m_x;
long m_y;
LPDUNGEON m_pkDungeon;
};
void CDungeon::Join_Coords(LPCHARACTER ch, long X, long Y, long index)
{
if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL)
{
sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex);
return;
}
X*=100;
Y*=100;
FWarpToLicyDungeonCoords(m_lMapIndex, X, Y, this) (ch);
}
void CDungeon::JoinParty_Coords(LPPARTY pParty, long X, long Y, long index)
{
pParty->SetDungeon(this);
m_map_pkParty.insert(std::make_pair(pParty,0));
if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL)
{
sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex);
return;
}
X*=100;
Y*=100;
FWarpToLicyDungeonCoords f(m_lMapIndex, X, Y, this);
pParty->ForEachOnMapMember(f,index);
}
//tekrar aratın;
deadEvent = event_create(dungeon_dead_event, info, PASSES_PER_SEC(10));
//değiştirin;
deadEvent = event_create(dungeon_dead_event, info, PASSES_PER_SEC(300));[/CODE]
[CODE lang="cpp" title="game\src\dungeon.h"]//aratın;
void DecMember(LPCHARACTER ch);
//altına ekleyin;
void JoinParty_Coords(LPPARTY pParty, long X, long Y, long index);
void Join_Coords(LPCHARACTER ch, long X, long Y, long index);[/CODE]
[CODE lang="cpp" title="game\src\questlua_dungeon.cpp"]//aratın;
void RegisterDungeonFunctionTable()
//üstüne ekleyin;
int dungeon_join_coords(lua_State* L)
{
if (lua_gettop(L)<3 || !lua_isnumber(L,1) || !lua_isnumber(L, 2) || !lua_isnumber(L,3))
{
sys_err("not enough argument");
return 0;
}
long lMapIndex = (long)lua_tonumber(L, 1);
LPDUNGEON pDungeon = CDungeonManager::instance().Create(lMapIndex);
if (!pDungeon)
return 0;
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
long index2 = (long)ch->GetMapIndex();
if (ch->GetParty() && ch->GetParty()->GetLeaderPID() == ch->GetPlayerID())
pDungeon->JoinParty_Coords(ch->GetParty(), (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3),index2);
else if (!ch->GetParty())
pDungeon->Join_Coords(ch, (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3),index2);
return 0;
}
//tekrar aratın;
{ NULL, NULL }
//üstüne ekleyin;
{ "join_cords", dungeon_join_coords },[/CODE]
[CODE lang="cpp" title="game\src\questlua_pc.cpp"]//aratın;
void RegisterPCFunctionTable()
//üstüne ekleyin;
int pc_get_dungeonindex(lua_State * L)
{
lua_pushnumber(L, CQuestManager::instance().GetCurrentCharacterPtr()->LicyPlayerDungeonIndex());
return 1;
}
int pc_set_dungeonindex(lua_State * L)
{
if (!lua_isnumber(L, 1))
{
sys_err("invalid argument");
return 0;
}
else
{
long newIndex = lua_tonumber(L, 1);
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
ch->MniusPlayerDungeonIndex(newIndex);
return 0;
}
}
//tekrar aratın;
{ NULL, NULL }
//üstüne ekleyin;
{"get_dungeonindex", pc_get_dungeonindex },
{"set_dungeonindex", pc_set_dungeonindex },[/CODE]
Okutulacak dosyalar ekte yer alıyor.
İyi forumlar dilerim.
[CODE lang="cpp" title="common\tables.h"]//aratın;
int aiPremiumTimes[PREMIUM_MAX_NUM];
//altına ekleyin;
long d_map_index;[/CODE]
[CODE lang="cpp" title="db\src\ClientManagerPlayer.cpp"]//aratın;
"horse_skill_point = %d, "
//altına ekleyin;
"d_map_index = %d, "
//tekrar aratın;
pkTab->horse_skill_point);
//değiştirin;
pkTab->horse_skill_point,
pkTab->d_map_index);
//tekrar aratın;
,horse_skill_point
//devamına ekleyin;
,d_map_index
//tekrar aratın;
str_to_number(pkTab->horse_skill_point, row[col++]);
//altına ekleyin;
str_to_number(pkTab->d_map_index, row[col++]);[/CODE]
[CODE lang="cpp" title="game\src\char.cpp"]//aratın;
tab.horse = GetHorseData();
//altına ekleyin;
tab.d_map_index = m_points.d_map_index;
//tekrar aratın;
m_points.iRandomSP = t->sRandomSP;
//altına ekleyin;
m_points.d_map_index = t->d_map_index;[/CODE]
[CODE lang="cpp" title="game\src\char.h"]//aratın;
BYTE skill_group;
//altına ekleyin;
long d_map_index;
//tekrar aratın;
ESex GET_SEX(LPCHARACTER ch);
//üstüne ekleyin;
public:
long LicyPlayerDungeonIndex() { return m_points.d_map_index; }
void MniusPlayerDungeonIndex(long vnum) { m_points.d_map_index = vnum; }[/CODE]
[CODE lang="cpp" title="game\src\dungeon.cpp"]//aratın;
void CDungeon::Initialize()
[
...
]
//altına ekleyin;
struct FWarpToLicyDungeonCoords
{
FWarpToLicyDungeonCoords(long lMapIndex, long X, long Y, LPDUNGEON d)
: m_lMapIndex(lMapIndex), m_x(X), m_y(Y), m_pkDungeon(d)
{
}
void operator () (LPCHARACTER ch)
{
ch->SaveExitLocation();
ch->WarpSet(m_x, m_y, m_lMapIndex);
}
long m_lMapIndex;
long m_x;
long m_y;
LPDUNGEON m_pkDungeon;
};
void CDungeon::Join_Coords(LPCHARACTER ch, long X, long Y, long index)
{
if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL)
{
sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex);
return;
}
X*=100;
Y*=100;
FWarpToLicyDungeonCoords(m_lMapIndex, X, Y, this) (ch);
}
void CDungeon::JoinParty_Coords(LPPARTY pParty, long X, long Y, long index)
{
pParty->SetDungeon(this);
m_map_pkParty.insert(std::make_pair(pParty,0));
if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL)
{
sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex);
return;
}
X*=100;
Y*=100;
FWarpToLicyDungeonCoords f(m_lMapIndex, X, Y, this);
pParty->ForEachOnMapMember(f,index);
}
//tekrar aratın;
deadEvent = event_create(dungeon_dead_event, info, PASSES_PER_SEC(10));
//değiştirin;
deadEvent = event_create(dungeon_dead_event, info, PASSES_PER_SEC(300));[/CODE]
[CODE lang="cpp" title="game\src\dungeon.h"]//aratın;
void DecMember(LPCHARACTER ch);
//altına ekleyin;
void JoinParty_Coords(LPPARTY pParty, long X, long Y, long index);
void Join_Coords(LPCHARACTER ch, long X, long Y, long index);[/CODE]
[CODE lang="cpp" title="game\src\questlua_dungeon.cpp"]//aratın;
void RegisterDungeonFunctionTable()
//üstüne ekleyin;
int dungeon_join_coords(lua_State* L)
{
if (lua_gettop(L)<3 || !lua_isnumber(L,1) || !lua_isnumber(L, 2) || !lua_isnumber(L,3))
{
sys_err("not enough argument");
return 0;
}
long lMapIndex = (long)lua_tonumber(L, 1);
LPDUNGEON pDungeon = CDungeonManager::instance().Create(lMapIndex);
if (!pDungeon)
return 0;
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
long index2 = (long)ch->GetMapIndex();
if (ch->GetParty() && ch->GetParty()->GetLeaderPID() == ch->GetPlayerID())
pDungeon->JoinParty_Coords(ch->GetParty(), (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3),index2);
else if (!ch->GetParty())
pDungeon->Join_Coords(ch, (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3),index2);
return 0;
}
//tekrar aratın;
{ NULL, NULL }
//üstüne ekleyin;
{ "join_cords", dungeon_join_coords },[/CODE]
[CODE lang="cpp" title="game\src\questlua_pc.cpp"]//aratın;
void RegisterPCFunctionTable()
//üstüne ekleyin;
int pc_get_dungeonindex(lua_State * L)
{
lua_pushnumber(L, CQuestManager::instance().GetCurrentCharacterPtr()->LicyPlayerDungeonIndex());
return 1;
}
int pc_set_dungeonindex(lua_State * L)
{
if (!lua_isnumber(L, 1))
{
sys_err("invalid argument");
return 0;
}
else
{
long newIndex = lua_tonumber(L, 1);
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
ch->MniusPlayerDungeonIndex(newIndex);
return 0;
}
}
//tekrar aratın;
{ NULL, NULL }
//üstüne ekleyin;
{"get_dungeonindex", pc_get_dungeonindex },
{"set_dungeonindex", pc_set_dungeonindex },[/CODE]
Okutulacak dosyalar ekte yer alıyor.
İyi forumlar dilerim.