#マップのタイプを知りたい
####前置き
ゲームモードごとに違う動作をさせるために今がなんのルールなのかを判定したかった
で、KOTH、PL、PLR、CTFはマップ名で判断が付くが コントロールポイントと攻撃防衛マップは同じcp_...なのでマップ名からの判断ができない。
まぁ、ゲームモード格納されてるデータあるでしょ?って思って探したが使い物にならないものばかり(cp_...マップだと同じ値が出てしまう)
####本題
俺がちゃんと探してないだけかもしれんけど、見つからなかったので他の方法を考えました
その方法は
1.マップ名に"cp_"が含まれている
2.コントロールポイントがある
3.コントロールポイントはすべて赤チームの所属である
といった流れです、当然ながらマップ開始直後に判定しないとだめです(青チームが占領するから)
ソースコード
sourcemod.sp
public int GetMapType()
{
//マップの名前を取得
GetCurrentMap(MapName,255);
//...に「PL」が含まれる
if(StrContains(MapName,"pl_",false) != -1)
{
return 0;
}
//...に「KOTH」が含まれる ...に「event」が含まれない
if(StrContains(MapName,"koth_",false) != -1 && StrContains(MapName,"event",false) == -1 )
{
return 1;
}
//...に「KOTH」が含まれる
if(StrContains(MapName,"koth_",false) != -1)
{
return 2;
}
//...に「CP」が含まれる
if(StrContains(MapName,"cp_",false) != -1)
{
new iTeam;
new iEnt = -1;
//CPを検索
while ((iEnt = FindEntityByClassname(iEnt, "team_control_point")) != -1)
{
//見つかったらそれが青チームか検証
iTeam = GetEntProp(iEnt, Prop_Send, "m_iTeamNum");
if (iTeam != 2)
{
return 3;//青チームのCPが見つかったのでこれは普通のCP
}
}
return 4;//すべて赤チームのCPだったら攻撃/防衛マップである
}
//...に「ctf」が含まれる
if(StrContains(MapName,"ctf_",false) != -1)
{
return 5;
}
//...に「plr」が含まれる
if(StrContains(MapName,"plr_",false) != -1)
{
return 6;
}
return 0;
}
これでOK、もっといい方法知ってる人いたら教えてください
もしSourcemodに興味を持ったら、ぜひwikiを訪れてみてくださいね
日本人MOD作者が指で数えられるほどしかいないので...