今まで作ったプラグインのソースコードをGitHubに置いた
需要とか知らない
プラグイン自体も置いてあるので導入したい方はご自由にどうぞ。
特定のプレイヤーにしか見えないオブジェクトを作るには
//SDKHook SDKHook(g_PropEnt[client], SDKHook_SetTransmit, OnSetTransmit); //SDKHook Prop表示時? public Action:OnSetTransmit(entity, client){ if(entity != g_PropEnt[client]){ return Plugin_Handled; } return Plugin_Continue; }
メモ書き
SDKHook_SetTransmitでPlugin_Handledすればいいらしい
コラム
プラグイン書くにあたってある動作を実現したいとして、コードで書くという方法の他にその機能を持ったEntityを生成するという方法があるので、楽な方を選ぶべきだと思います。僕は書いた方が早い事をEntityでやろうとしたりEntityで済ませばいい事を必死で書こうとしたからダメ
— ArcMage (@Alchemist_Ark) 2018年4月24日
CoreDefenseプラグイン
各チームリスポン前に設置されたCoreブロックを
ブロックを設置したり破壊したりして防衛・破壊するゲームモード。
実際にプレイしたらどうなるかは知りません pic.twitter.com/1UDq2plFEj
— ArcMage (@Alchemist_Ark) 2018年4月21日
リロードで設置モードの切り替え、ATTACK2で設置。
マップ設置の各種弾薬箱からブロックを取得 ロッカーやキル時に落ちる箱からは不可
ゲーム開始からCP開放まではロッカーからブロックを一度に1つまで取得可
大人数でゴリゴリブロック置いてCore周りだけじゃなくて戦場にもゴリゴリ置いて欲しい
Int型、Float型のキャストについて
厳密にはPawnは型を持ってないので、Floatで変数を宣言しても普通にInt値が入る
ていうか数値丸め系の関数の戻り値がIntなので元の変数に戻すと型が変わってしまう
Format関数とかで%fすると型が違うので思った値が得られない。%dするとちゃんと出る。
正確には「変数が」型を持っているのではなくて、「値が」型を持っているように思える。この場合Intの値が入った時点で、その変数はIntになってしまう。
Floatで宣言してるから%fで値を読み取ろうとしても、中身がIntになってしまっているので読み取るには%dする必要があるということ。
PawnでIntをFloatにキャストしたいんだけどIntToFloatとか無いの
— ArcMage (@Alchemist_Ark) 2018年4月8日
厳密に型が無いからFloat型変数にIntが普通に入るし、中身までIntになるから困ってたんだけど、 Float変数 = Int値 * 1.0; でFloatにキャストできました。おい。
— ArcMage (@Alchemist_Ark) 2018年4月8日
健忘録として。びっくりするからやめて欲しい。
WaitingDeathMatch プラグイン
— ArcMage (@Alchemist_Ark) 2018年4月6日
ここホメて欲しいんだけど、最終CPを基準に周囲にランダムスポーンする仕様なんだけど、溶岩とか即死床の上にはスポーンしないんですよ 他のマップでも大丈夫 pic.twitter.com/N1Dn2hBC3s
— ArcMage (@Alchemist_Ark) 2018年4月6日
続きを読むというわけで主に鯖温め中とかにMGEよろしくバトルする人向けプラグインです 400行程度 koth、PL、5CP、A/Dで動作可能です。 ただしマップによってはエリア外にスポーンすること多々。こればかりはどうしようもない。
— ArcMage (@Alchemist_Ark) 2018年4月6日
デバッグ用リロード関数
愛用のリロード関数を手直ししたので置いておきます
便利。
//デバッグ用 プラグインのリロード public Action:Cmd_reload(client, args){ new String:strName[255]; GetPluginFilename(INVALID_HANDLE, strName, sizeof(strName)); ServerCommand("sm plugins reload %s", strName); GetPluginInfo(INVALID_HANDLE, PlInfo_Name, strName, sizeof(strName)); ReplyToCommand(client,"reload plugin '%s'", strName); }