首先在DES添加两个道具
Object D_tpEC01
{
Position: 13.000 9.000 -24.000
Quaternion: -1.000 0.000 0.000 0.000
TextureAnimation: 0 0.000 0.000
Custom:
{
model="tp001"
effect="RepairRE"
}
}
Object D_tpED01
{
Position: 400.000 400.000 0.000
Quaternion: -1.000 0.000 0.000 0.000
TextureAnimation: 0 0.000 0.000
Custom:
{
model="tp001"
}
}
D_tpEC01是传送点入口 D_tpED01是传送点出口 两个道具坐标任意 EC和ED后面的数值必须相同 道具必须是【tp001】可以增加【effect="RepairRE"】效果
接下来就是PST了
在【#include "..\PScriptLib\jug.pst"】下面添加
int DeathMatch = 1;
int TeamDeathMatch = 5;
int GameMod;
int EventEnter = 200;
int EventExit = 201;
int EventDeath = 202;
int g_CharacterArena[17];
int g_ArenaCharacters[16];
int g_TeamAArenaCharacters[16];
int g_TeamBArenaCharacters[16];
紧接着在【InitJugs(g_iNumJugs);】下面添加
GameMod = GameCallBack("mod", 0);
int i;
string itemname;
for (i=0; i<16; i=i+1)
{
g_CharacterArena = -1;
g_ArenaCharacters = 0;
g_TeamAArenaCharacters = 0;
g_TeamBArenaCharacters = 0;
MakeString(itemname, "D_tpEC", i+1);
SetSceneItem(itemname, "name", "machine");
SetSceneItem(itemname, "attribute", "collision", 0);
SetSceneItem(itemname, "attribute", "interactive", 1);
MakeString(itemname, "D_tpEC", i+17);
SetSceneItem(itemname, "name", "machine");
SetSceneItem(itemname, "attribute", "collision", 0);
SetSceneItem(itemname, "attribute", "interactive", 1);
}
for (i=0; i<8; i=i+1)
{
MakeString(itemname, "D_tpAC", i+1);
SetSceneItem(itemname, "name", "machine");
SetSceneItem(itemname, "attribute", "collision", 0);
MakeString(itemname, "D_tpAC", i+9);
SetSceneItem(itemname, "name", "machine");
SetSceneItem(itemname, "attribute", "collision", 0);
MakeString(itemname, "D_tpBC", i+1);
SetSceneItem(itemname, "name", "machine");
SetSceneItem(itemname, "attribute", "collision", 0);
MakeString(itemname, "D_tpBC", i+9);
SetSceneItem(itemname, "name", "machine");
SetSceneItem(itemname, "attribute", "collision", 0);
}
}
Scene_OnCharacterEvent(int id, int event)
{
int i;
int arena;
int team;
Output("Character:", id, "event:", event);
if ( event==EventExit || event==EventDeath )
{
if ( GameMod==DeathMatch )
{
arena = g_CharacterArena[id];
if ( arena!=-1 )
{
g_ArenaCharacters[arena] = g_ArenaCharacters[arena] - 1;
}
g_CharacterArena[id] = -1;
}
if ( GameMod==TeamDeathMatch )
{
arena = g_CharacterArena[id];
team = GetTeam(id);
if ( arena!=-1 )
{
if ( team==1 )
{
g_TeamAArenaCharacters[arena] = g_TeamAArenaCharacters[arena] - 1;
}
if ( team==2 )
{
g_TeamBArenaCharacters[arena] = g_TeamBArenaCharacters[arena] - 1;
}
}
g_CharacterArena[id] = -1;
}
}
}
TransferToArena(int characterid, int tpid)
{
string arenaname;
int arena = tpid/2;
Output("arena characters", g_ArenaCharacters[arena]);
if ( g_ArenaCharacters[arena]<2 && g_CharacterArena[characterid] != arena )
{
g_ArenaCharacters[arena]=g_ArenaCharacters[arena]+1;
g_CharacterArena[characterid] = arena;
MakeString(arenaname, "D_tpED", tpid+1);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "to", tpid);
}
}
TransferFromArena(int characterid, int tpid)
{
string arenaname;
int arena = tpid/2;
if ( g_ArenaCharacters[arena]==1 && g_CharacterArena[characterid] == arena)
{
g_ArenaCharacters[arena]=g_ArenaCharacters[arena]-1;
g_CharacterArena[characterid] = -1;
MakeString(arenaname, "D_tpED", tpid+17);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "from", tpid);
}
}
TeamATransferToArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==1 && g_TeamAArenaCharacters[arena]==0 )
{
g_TeamAArenaCharacters[arena] = 1;
g_CharacterArena[characterid] = arena;
MakeString(arenaname, "D_tpAD", arena+1);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "to", arena);
}
}
TeamATransferFromArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==1 && g_TeamAArenaCharacters[arena]==1 && g_TeamBArenaCharacters[arena]==0 )
{
g_TeamAArenaCharacters[arena] = 0;
g_CharacterArena[characterid] = -1;
MakeString(arenaname, "D_tpAD", arena+9);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "from", arena);
}
}
TeamBTransferToArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==2 && g_TeamBArenaCharacters[arena]==0 )
{
g_TeamBArenaCharacters[arena] = 1;
g_CharacterArena[characterid] = arena;
MakeString(arenaname, "D_tpBD", arena+1);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "to", arena);
}
}
TeamBTransferFromArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==2 && g_TeamBArenaCharacters[arena]==1 && g_TeamAArenaCharacters[arena]==0 )
{
g_TeamBArenaCharacters[arena] = 0;
g_CharacterArena[characterid] = -1;
MakeString(arenaname, "D_tpBD", arena+9);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "from", arena);
}
}
以上都是sn22.pst的函数 下面我们来对函数进行一番修改
int g_CharacterArena[17];
int g_ArenaCharacters[16];
修改为
int g_CharacterArena[99];
int g_ArenaCharacters[99];
也就是把后面的17和16都修改为99
TransferToArena(int characterid, int tpid)
{
string arenaname;
int arena = tpid/2;
Output("arena characters", g_ArenaCharacters[arena]);
if ( g_ArenaCharacters[arena]<2 && g_CharacterArena[characterid] != arena )
{
g_ArenaCharacters[arena]=g_ArenaCharacters[arena]+1;
g_CharacterArena[characterid] = arena;
MakeString(arenaname, "D_tpED", tpid+1);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "to", tpid);
}
}
TransferFromArena(int characterid, int tpid)
{
string arenaname;
int arena = tpid/2;
if ( g_ArenaCharacters[arena]==1 && g_CharacterArena[characterid] == arena)
{
g_ArenaCharacters[arena]=g_ArenaCharacters[arena]-1;
g_CharacterArena[characterid] = -1;
MakeString(arenaname, "D_tpED", tpid+17);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "from", tpid);
}
}
TeamATransferToArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==1 && g_TeamAArenaCharacters[arena]==0 )
{
g_TeamAArenaCharacters[arena] = 1;
g_CharacterArena[characterid] = arena;
MakeString(arenaname, "D_tpAD", arena+1);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "to", arena);
}
}
TeamATransferFromArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==1 && g_TeamAArenaCharacters[arena]==1 && g_TeamBArenaCharacters[arena]==0 )
{
g_TeamAArenaCharacters[arena] = 0;
g_CharacterArena[characterid] = -1;
MakeString(arenaname, "D_tpAD", arena+9);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "from", arena);
}
}
TeamBTransferToArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==2 && g_TeamBArenaCharacters[arena]==0 )
{
g_TeamBArenaCharacters[arena] = 1;
g_CharacterArena[characterid] = arena;
MakeString(arenaname, "D_tpBD", arena+1);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "to", arena);
}
}
TeamBTransferFromArena(int characterid, int arena)
{
string arenaname;
int team;
team = GetTeam(characterid);
if ( team==2 && g_TeamBArenaCharacters[arena]==1 && g_TeamAArenaCharacters[arena]==0 )
{
g_TeamBArenaCharacters[arena] = 0;
g_CharacterArena[characterid] = -1;
MakeString(arenaname, "D_tpBD", arena+9);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "from", arena);
}
}
修改为
TransferToArena(int characterid, int tpid)
{
string arenaname;
int arena = tpid/2;
Output("arena characters", g_ArenaCharacters[arena]);
if ( g_ArenaCharacters[arena]<99)
{
g_ArenaCharacters[arena]=g_ArenaCharacters[arena];
g_CharacterArena[characterid] = arena;
MakeString(arenaname, "D_tpED", tpid+1);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "to", tpid);
}
}
TransferFromArena(int characterid, int tpid)
{
string arenaname;
int arena = tpid/2;
if ( g_ArenaCharacters[arena]<99)
{
g_ArenaCharacters[arena]=g_ArenaCharacters[arena];
g_CharacterArena[characterid] = -1;
MakeString(arenaname, "D_tpED", tpid+17);
Misc("transfer", characterid, arenaname);
Output("transfer", characterid, "from", tpid);
}
}
最后在下面添加
D_tpEC01_OnTouch(int id, int characterid)
{
Output("EC01 Touched");
TransferToArena(characterid, 0);
}
这是第一个传送所以是01 【characterid】为0 第二个传送就是02 【characterid】为1
以此类推









