LoginSignup
1
1

More than 5 years have passed since last update.

Sourcemod [TF2]ゲームモードを判定する方法

Last updated at Posted at 2017-11-12

マップのタイプを知りたい

前置き

ゲームモードごとに違う動作をさせるために今がなんのルールなのかを判定したかった
で、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作者が指で数えられるほどしかいないので...

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1