TF2 セントリーガンの所有者を確認する

多分これ。

Member: m_hBuilder (offset 2276) (type integer) (bits 21) (Unsigned)

他にも使えそうなのいくつか。実際に中身確認してないから本当にそうか分からないけど、名称から予想。
m_bPlayerControlled:ラングラーで操作中かどうか?
m_bBuilding:建造中かどうか?

他の建造物も多分同じプロパティ持ってるとは思う。


試してみないと分からないけど、設置してすぐ所有者を消したら
2つ目3つ目のセントリーを置ける…かもしれない?

広告を非表示にする

TF2 死を回避する方法

無敵化ではなく、ヘルスが0になったけどそのまま戦い続けるようにする方法。

引っ掛けるイベントはplayer_hurt
player_deathはやっぱりダメだった。よってplayer_deathイベントの情報は持ってこれない…

HookEvent("player_hurt", OnPlayerHurt,EventHookMode_Pre);
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if(GetEventInt(event, "health") == 0){
	SetEntityHealth(client,1);
}

"health"の値はマイナスにはならないので安心して0でチェックして良い
ヘルスを最大値にしようと思ったらクラスをチェックしてクラスの最大値を直接指定する必要がある

player_deathが発生しないので、スコアは入らないしキルもデスもカウントが増えない点に注意。
イベントをFireしてもダメなんかな?多分ダメだと思うけど。


customの値一覧。
player_hurtの"custom"とplayer_deathの"customkill"で同じ値出てるから多分一緒だと思う。

…ヘッドショットが1でバックスタブが2なのは確認したし、火炎放射器と延焼ダメージが3なのも間違いない
けどライフルのボディショットが種類にかかわらず11で、小便銃が14
分からぬ。
下記のリストは参考までに。

// Custom kill identifiers for the customkill property on the player_death event
enum {
	TF_CUSTOM_HEADSHOT = 1,
	TF_CUSTOM_BACKSTAB,
	TF_CUSTOM_BURNING,
	TF_CUSTOM_WRENCH_FIX,
	TF_CUSTOM_MINIGUN,
	TF_CUSTOM_SUICIDE,
	TF_CUSTOM_TAUNT_HADOUKEN,
	TF_CUSTOM_BURNING_FLARE,
	TF_CUSTOM_TAUNT_HIGH_NOON,
	TF_CUSTOM_TAUNT_GRAND_SLAM,
	TF_CUSTOM_PENETRATE_MY_TEAM,
	TF_CUSTOM_PENETRATE_ALL_PLAYERS,
	TF_CUSTOM_TAUNT_FENCING,
	TF_CUSTOM_PENETRATE_HEADSHOT,
	TF_CUSTOM_TAUNT_ARROW_STAB,
	TF_CUSTOM_TELEFRAG,
	TF_CUSTOM_BURNING_ARROW,
	TF_CUSTOM_FLYINGBURN,
	TF_CUSTOM_PUMPKIN_BOMB,
	TF_CUSTOM_DECAPITATION,
	TF_CUSTOM_TAUNT_GRENADE,
	TF_CUSTOM_BASEBALL,
	TF_CUSTOM_CHARGE_IMPACT,
	TF_CUSTOM_TAUNT_BARBARIAN_SWING,
	TF_CUSTOM_AIR_STICKY_BURST,
	TF_CUSTOM_DEFENSIVE_STICKY,
	TF_CUSTOM_PICKAXE,
	TF_CUSTOM_ROCKET_DIRECTHIT,
	TF_CUSTOM_TAUNT_UBERSLICE,
	TF_CUSTOM_PLAYER_SENTRY,
	TF_CUSTOM_STANDARD_STICKY,
	TF_CUSTOM_SHOTGUN_REVENGE_CRIT,
	TF_CUSTOM_TAUNT_ENGINEER_SMASH,
	TF_CUSTOM_BLEEDING,
	TF_CUSTOM_GOLD_WRENCH,
	TF_CUSTOM_CARRIED_BUILDING,
	TF_CUSTOM_COMBO_PUNCH,
	TF_CUSTOM_TAUNT_ENGINEER_ARM,
	TF_CUSTOM_FISH_KILL,
	TF_CUSTOM_TRIGGER_HURT,
	TF_CUSTOM_DECAPITATION_BOSS,
	TF_CUSTOM_STICKBOMB_EXPLOSION,
	TF_CUSTOM_AEGIS_ROUND,
	TF_CUSTOM_FLARE_EXPLOSION,
	TF_CUSTOM_BOOTS_STOMP,
	TF_CUSTOM_PLASMA,
	TF_CUSTOM_PLASMA_CHARGED,
	TF_CUSTOM_PLASMA_GIB,
	TF_CUSTOM_PRACTICE_STICKY,
	TF_CUSTOM_EYEBALL_ROCKET,
	TF_CUSTOM_HEADSHOT_DECAPITATION,
	TF_CUSTOM_TAUNT_ARMAGEDDON,
	TF_CUSTOM_FLARE_PELLET,
	TF_CUSTOM_CLEAVER,
	TF_CUSTOM_CLEAVER_CRIT,
	TF_CUSTOM_SAPPER_RECORDER_DEATH,
	TF_CUSTOM_MERASMUS_PLAYER_BOMB,
	TF_CUSTOM_MERASMUS_GRENADE,
	TF_CUSTOM_MERASMUS_ZAP,
	TF_CUSTOM_MERASMUS_DECAPITATION,
	TF_CUSTOM_CANNONBALL_PUSH,
	TF_CUSTOM_TAUNT_ALLCLASS_GUITAR_RIFF,
	TF_CUSTOM_THROWABLE,
	TF_CUSTOM_THROWABLE_KILL,
	TF_CUSTOM_SPELL_TELEPORT,
	TF_CUSTOM_SPELL_SKELETON,
	TF_CUSTOM_SPELL_MIRV,
	TF_CUSTOM_SPELL_METEOR,
	TF_CUSTOM_SPELL_LIGHTNING,
	TF_CUSTOM_SPELL_FIREBALL,
	TF_CUSTOM_SPELL_MONOCULUS,
	TF_CUSTOM_SPELL_BLASTJUMP,
	TF_CUSTOM_SPELL_BATS,
	TF_CUSTOM_SPELL_TINY,
	TF_CUSTOM_KART,
	TF_CUSTOM_GIANT_HAMMER,
	TF_CUSTOM_RUNE_REFLECT,
	TF_CUSTOM_DRAGONS_FURY_IGNITE,
	TF_CUSTOM_DRAGONS_FURY_BONUS_BURNING,
	TF_CUSTOM_SLAP_KILL,
	TF_CUSTOM_CROC,
	TF_CUSTOM_TAUNTATK_GASBLAST,
};
広告を非表示にする

無いと思ったらあった

EntityのOutputをFireする関数。
開発版(1.9系)じゃないと使えない。

github.com

/**
 * Fire a named output on an entity.  
 *
 * After completion (successful or not), the current global variant is re-initialized.
 *
 * @param caller	Entity index from where the output is fired.
 * @param output	Output name.
 * @param activator	Entity index which initiated the sequence of actions (-1 for a NULL entity).
 * @param delay		Delay before firing the output.
 * @error		Invalid entity index or no mod support.
 */
native void FireEntityOutput(int caller, const char[] output, int activator=-1, float delay=0.0); 

例えば

public Action:Cmd_setupend(client, args){
	new ent = -1;
	ent = FindEntityByClassname(ent, "team_round_timer");
	
	if(ent == -1){
		return false;
	}
	
	FireEntityOutput(ent,"OnSetupFinished");
	
}

とかするとセットアップ中にセットアップ終了時のOutputをFireするのでゲートが開く。
あくまでFireするだけなので、セットアップのタイマーは止まらないしそのまま平気でセットアップが続行。
けどゲート開いてるから青はどんどん出て行くでござる。これはひどい

広告を非表示にする

TF2 ItemDB プラグイン

SourceModでアイテム(武器等を含む)情報をDB化して他プラグインから利用できるようにするプラグイン
TF2ItemsInfoというプラグインが以前その役割を行っていたのですが、更新されておらず(しかも現状動作していない)
TF2ItemDBがその役目を引き継いでいます。

TF2ItemDBも開発中で、特にTF2ItemsInfoとの置き換えに必要なtf2idb_tf2ii_compatがソースしか無かったりして色々とアレ。

とりあえず簡単に情報のまとめとインストール方法を。


[TF2] TF2 Item DB (replaces tf2itemsinfo) - AlliedModders

AlliedModdersのフォーラムページ。


GitHub - FlaminSarge/tf2idb: TF2 Item DB ( https://forums.alliedmods.net/showthread.php?t=255885 )

GitHubのページ。


フォーラムページからもプラグインは落とせますが、現在ジャングルアプデ絡みで更新が続いているので
念の為GitHubからソースをコンパイルした方がいいかもです。


どうせtf2idb_tf2ii_compatもコンパイルしなきゃならないので…
tf2idb/tf2idb_tf2ii_compat.sp at master · FlaminSarge/tf2idb · GitHub

とりあえずこれで必要なプラグイン2つが準備できました。


次に、DBを作成します。
なんでプラグインで自動的に作ってくれないの?*1

フォーラムのDLの所からtf2idb.zipをダウンロードし、
任意の場所に解凍、tf2idb.pyをテキストエディタで開いて1行目をTF2のsrcdsのインストールパスを記入*2
Python2をインストールし、実行してください。

と、言いたい所ですが
少なくとも僕はこれで有効なDBが作成されませんでした。
srcdsを起動して、起動時にtf2idbがクラッシュしてたら失敗です。sm listでもロードできてない事が確認できると思います。
もし上手く行ってたら教えて下さい。


追記:GitHubにあるtf2idb.pyが最新です。そちらのpyをDLし実行すると、pyと同じところにDBが作成されます。pyの編集は不要です
ですが現時点ではやはりジャングルアプデ武器は使えない模様。*3


上手く行かなかったら、フォーラムにが居るので有難くいただきます。
AlliedModders - View Single Post - [TF2] TF2 Item DB (replaces tf2itemsinfo)
このDBをaddons/sourcemod/data/sqliteに置いて、再度srcdsを起動してください。
tf2idbが読み込めていたら成功です。お疲れ様でした。


TF2GiveWeaponプラグイン等を使用の方は、ロックンロードの装弾数が直っていたり、火炎放射器の射程が正常になっているのが確認できると思います。
つーかTF2ItemsInfoがDB更新してくれないせいでジャングルアプデ後火炎放射器の射程が0になってて軍拡鯖生存の危機でしたよ。
前の記事のBOT自殺事件も込みで本当に辛かった…

*1:まぁそれやってメモリリーク起こして更新しなくなったTF2IIってプラグインがあるんですけどね

*2:2行目と3行目で必要なパスを得る為に1行目に連結させてるの考慮してね

*3:装備できるし弾も出るのですが、弾薬箱を拾うことができずロッカーに触れるとクライアントが落ちる

広告を非表示にする

TF2 srcds BOTのクラスを固定するとBOTが自殺する問題について

2017年10月のジャングルアップデート以降、BOTの仕様が変わったようです。
チームのクラスバランスを考慮してクラスを変更するようになった?ようです。
他にもAIの向上などが行われている様子。

それだけだと良い話なのですが、ウチみたいに特殊ルールのゲームモードが動作している場合、ちょっと問題が。
BOTがクラスを変更する際、たとえリスポンの中であろうがその場で自殺しやがります。
例えばBOTのクラスをソルジャーに固定したとすると

ソルジャーでスポーン

チーム内にソルしか居ない

クラス変更

自殺

クラスが固定されているのでソルジャーでスポーン

ソルしか略

カーズもびっくりなぐらいで死に続けるのでゲームになりません…
これがtf_bot_force_classで固定したクラスだけでなく、プラグインから強制的にクラスを変えたとしても発生するので困った困った
しかもプラグインからはBOTの自殺を検出不可能。ブロックしようとしてしばらく格闘してましたが、無理でした。


さて、前置きが長くなりましたが
バグレポートからも送ったし既存のCVARが実質使用不可になっているわけなので何らかのアクションはあるだろうと
ここ最近のsrcdsの更新連発の度にcvarlistを保存して比較続けること1ヶ月、cvarの追加を発見しました。

tf_bot_reevaluate_class_in_spawnroom : 1 : , "sv", "cheat" : If set, bots will opportunisticly switch class while in spawnrooms if their current class is no longer their first choice.

ゲイブ有能。
チートフラグが必要なので、sm_cvarで変更。
0にしたら自殺しなくなりました。
完璧。

広告を非表示にする

TF2プラグイン ArmsRace 軍拡競争プラグイン デモンストレーション

そういや紹介動画みたいなの作りました。

広告を非表示にする

3735Fでsrcdsを動かす

絶対ダメだろうと思ったけど、3735F搭載windowsタブレット(中華)でsrcds動かしてみた。




本当に時々だけど、あの引っかかって数歩後ろに引き戻されるラグが発生する。
あと人が密集してるトコに行くと確実にラグる。
それとヘッドショットはまず当たらない ラッキーヘッショは凄い出たけど。
止まってるBOTヘビーの頭に当たったのに50ダメが表示されたりしてた。どこにあるの頭。

実際に使ったWindowsタブレットはColorfly i818W 3G Intel Z3735F
2年ぐらい前にいちまんごせんで買ったやつ。
電源切らないと充電できない病にかかってるので使い道に困ってる。

akafudatengoku.com

まぁどちらにしろUSB LANアダプター繋いでサーバーにしてる時点で充電できないんですけどね。

安い3735FのスティックPCか何か買ってサーバーにしようかなってちょっと考えてたんだけど
もう少しだけパワーがあればなぁ…Z8300じゃほとんど変わらないって言うし…

満員まで人が入っても変わらなければまだ考慮の余地は…無いか…既にラグってるし…

広告を非表示にする