-->
Skip to main content
How To Implement New Maps - Custom Positions
Code:
var[0].SetNumber(ginfo.gameServerId);
var[1].SetString(ginfo.name);
var[2].SetString("GAMEWORLD");
switch (ginfo.mapId)
{
case GBGameInfo::MAPID_WZ_Colorado:
var[3].SetString("COLORADO");
break;
case GBGameInfo::MAPID_WZ_Cliffside:
var[3].SetString("CLIFFSIDE");
break;
default:
var[3].SetString("DEVMAP");
break;
}
Main_Network.cpp
Code:
switch(gClientLogic().m_gameInfo.mapId)
{
default:
r3dError("invalid map id\n");
case GBGameInfo::MAPID_Editor_Particles:
r3dGameLevel::SetHomeDir("WorkInProgress\\Editor_Particles");
break;
case GBGameInfo::MAPID_ServerTest:
r3dGameLevel::SetHomeDir("WorkInProgress\\ServerTest");
break;
case GBGameInfo::MAPID_WZ_Colorado:
r3dGameLevel::SetHomeDir("WZ_Colorado");
break;
case GBGameInfo::MAPID_WZ_Cliffside:
r3dGameLevel::SetHomeDir("WZ_Cliffside");
break;
}
UserProfile.cpp
Code:
w.GamePos = r3dPoint3D(0, 0, 0);
if (w.GameMapId == 3)//for Cliffside
sscanf(xmlItem.attribute("GamePos2").value(), "%f %f %f %f", &w.GamePos.x, &w.GamePos.y, &w.GamePos.z, &w.GameDir);
else if (w.GameMapId == 4)//for ServerTest
sscanf(xmlItem.attribute("GamePos3").value(), "%f %f %f %f", &w.GamePos.x, &w.GamePos.y, &w.GamePos.z, &w.GameDir);
else
sscanf(xmlItem.attribute("GamePos").value(), "%f %f %f %f", &w.GamePos.x, &w.GamePos.y, &w.GamePos.z, &w.GameDir);
Now for the server:
MasterServerConfig.cpp
Code:
static int StringToGBMapID(char* str)
{
if(stricmp(str, "MAPID_WZ_Colorado") == 0)
return GBGameInfo::MAPID_WZ_Colorado;
if(stricmp(str, "MAPID_WZ_Cliffside") == 0)
return GBGameInfo::MAPID_WZ_Cliffside;
if(stricmp(str, "MAPID_Editor_Particles") == 0)
return GBGameInfo::MAPID_Editor_Particles;
if(stricmp(str, "MAPID_ServerTest") == 0)
return GBGameInfo::MAPID_ServerTest;
r3dError("bad GBMapID %s\n", str);
return 0;
}
ServerGame.cpp
Code:
switch(gServerLogic.ginfo_.mapId)
{
default:
r3dError("invalid map id\n");
break;
case GBGameInfo::MAPID_Editor_Particles:
r3dGameLevel::SetHomeDir("WorkInProgress\\Editor_Particles");
break;
case GBGameInfo::MAPID_ServerTest:
r3dGameLevel::SetHomeDir("WorkInProgress\\ServerTest");
break;
case GBGameInfo::MAPID_WZ_Colorado:
r3dGameLevel::SetHomeDir("WZ_Colorado");
break;
case GBGameInfo::MAPID_WZ_Cliffside:
r3dGameLevel::SetHomeDir("WZ_Cliffside");
break;
}
NetPacketsGameInfo.h
Code:
enum EMapId
{
MAPID_Editor_Particles = 0,
MAPID_ServerTest = 4,
MAPID_WZ_Colorado = 2,
MAPID_WZ_Cliffside = 3,
// NOTE: do *NOT* add maps inside current IDs, add ONLY at the end
// otherwise current map statistics in DB will be broken
MAPID_MAX_ID,
};
AsyncFuncs.cpp
Code:
CWOBackendReq req("api_SrvCharUpdate.aspx");
req.AddSessionInfo(CustomerID, SessionID);
req.AddParam("map", slot.GameMapId);
req.AddParam("skey1", g_ServerApiKey);
req.AddParam("CharID", slot.LoadoutID);
api_SrvCharUpdate.aspx.cs
Code:
sqcmd.CommandText = "WZ_Char_SRV_SetStatus";
sqcmd.Parameters.AddWithValue("@in_CustomerID", CustomerID);
sqcmd.Parameters.AddWithValue("@in_MapID", web.Param("map"));
sqcmd.Parameters.AddWithValue("@in_CharID", CharID);
api_GetProfile1.aspx.cs
Code:
xml.Append(xml_attr("XP", reader["XP"]));
xml.Append(xml_attr("TimePlayed", reader["TimePlayed"]));
xml.Append(xml_attr("GameMapId", reader["GameMapId"]));// Already added
xml.Append(xml_attr("GameServerId", reader["GameServerId"]));
xml.Append(xml_attr("GamePos", reader["GamePos"]));
xml.Append(xml_attr("GamePos2", reader["GamePos2"]));
xml.Append(xml_attr("GamePos3", reader["GamePos3"]));
xml.Append(xml_attr("GameFlags", reader["GameFlags"]));
xml.Append(xml_attr("Health", reader["Health"]));
- You finish with the Client and Game Serv
Now for the database part:
- Add 2 new columns GamePos2, GamePos3 in table UsersChars
Store procedure: WarZ.dbo.WZ_Char_SRV_SetStatus
Code:
ALTER PROCEDURE [dbo].[WZ_Char_SRV_SetStatus]
@in_CustomerID int,
@in_MapID int,
@in_CharID int,
and below
Code:
if @in_MapID = 3
update UsersChars set
GamePos2=@in_GamePos,
GameFlags=@in_GameFlags,
Alive=@in_Alive,
Health=@in_Health,
Food=@in_Hunger,
Water=@in_Thirst,
Toxic=@in_Toxic,
TimePlayed=@in_TimePlayed,
LastUpdateDate=GETDATE(),
XP=@in_XP,
Reputation=@in_Reputation,
Stat00=@in_Stat00,
Stat01=@in_Stat01,
Stat02=@in_Stat02,
Stat03=@in_Stat03,
Stat04=@in_Stat04,
Stat05=@in_Stat05
where CharID=@in_CharID
else if @in_MapID = 4
update UsersChars set
GamePos3=@in_GamePos,
GameFlags=@in_GameFlags,
Alive=@in_Alive,
Health=@in_Health,
Food=@in_Hunger,
Water=@in_Thirst,
Toxic=@in_Toxic,
TimePlayed=@in_TimePlayed,
LastUpdateDate=GETDATE(),
XP=@in_XP,
Reputation=@in_Reputation,
Stat00=@in_Stat00,
Stat01=@in_Stat01,
Stat02=@in_Stat02,
Stat03=@in_Stat03,
Stat04=@in_Stat04,
Stat05=@in_Stat05
where CharID=@in_CharID
else
update UsersChars set
GamePos=@in_GamePos,
GameFlags=@in_GameFlags,
Alive=@in_Alive,
Health=@in_Health,
Food=@in_Hunger,
Water=@in_Thirst,
Toxic=@in_Toxic,
TimePlayed=@in_TimePlayed,
LastUpdateDate=GETDATE(),
XP=@in_XP,
Reputation=@in_Reputation,
Stat00=@in_Stat00,
Stat01=@in_Stat01,
Stat02=@in_Stat02,
Stat03=@in_Stat03,
Stat04=@in_Stat04,
Stat05=@in_Stat05
where CharID=@in_CharID