Плагмн для JWP

Erik

Участник
Сообщения
67
Реакции
16
Хотел написать плагин для ядра JWP чтоб через меню можно было спаунить мячик и удалять его и предел был в один мяч, но я не смог этого сделать и дошел только до того чтоб заспаунить мячик и то выдает ошибки и я не могу разобраться, кто сможет помочь?
#include <sourcemod>
#include <sdktools>
#include <jwp>

#pragma semicolon 1
#include <sdkhooks>
#include <cstrike>
new trace;
#pragma newdecls required

#define PLUGIN_VERSION "1.0.0"
#define DROPEN "door_aim_open"

#define MODEL_BALL "models/props/de_dust/hr_dust/dust_soccerball/dust_soccer_ball001.mdl"

public void OnPluginStart()
{
if (JWP_IsStarted()) JWP_Started();
LoadTranslations("jwp_modules.phrases");
}

public void JWP_Started()
{
JWP_AddToMainMenu(DROPEN, OnFuncDrOpenDisplay, OnFuncDrOpenSelect);
}

public void OnPluginEnd()
{
JWP_RemoveFromMainMenu();
}

public bool OnFuncDrOpenDisplay(int client, char[] buffer, int maxlength, int style)
{
Format(buffer, maxlength, "%T", "DoorAimControl_Menu_Open", LANG_SERVER);
return true;
}

public bool OnFuncDrOpenSelect(int client)
{
if (!JWP_IsFlood(client, 3))
DoorManip(client, true);
JWP_ShowMainMenu(client);
return true;
}

void DoorManip(int client, bool open)
{
float vOrigin[3], vAngles[3];

GetClientEyePosition(client, vOrigin);
GetClientEyeAngles(client, vAngles);

trace = TR_TraceRayFilter(vOrigin, vAngles, MASK_SOLID, RayType_Infinite, TraceEntityFilterPlayer);

if(TR_DidHit(trace))
{
TR_GetEndPosition(vOrigin, trace);
CloseHandle(trace);

return;
}

CloseHandle(trace);

int ball = CreateEntityByName("prop_physics_multiplayer");

DispatchKeyValue(ball, "model", MODEL_BALL);
DispatchKeyValue(ball, "physicsmode", "2");
DispatchSpawn(ball);

TeleportEntity(ball, NULL_VECTOR, NULL_VECTOR, NULL_VECTOR);

}

public bool TraceEntityFilterPlayer(entity, contentsMask)
{
return entity > MaxClients;
}
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Ну во первых - для кода есть специальный тэг:
Screenshot_20190109-082615_Samsung_Internet.jpg

Там же выбираешь PHP. Все что без него - еле читабельно.

Во вторых - никому не интрересно гадать, что у тебя там ошибки. Можно и додуматься их прикрепить. Оффтоп

TeleportEntity(ball, NULL_VECTOR, NULL_VECTOR, NULL_VECTOR);
Не смущает, что ты пытаешься телепортировать мяч, но не указываешь куда ? А если быть точным, то он у тебя телепортируется в 0.0.0 X.Y.Z, что по сути является его местом появления, но это так, для справки.

Выше, в коде, ты получаешь место, куда игрок смотрит, а затем делаешь трассировку, что по сути дела бессмысленно, если проверять дистанцию.

Данные, которые записаны в vOrigin является XYZ того места, куда смотрит игрок. Замени второй параметр (NULL_VECTOR) в TeleportEntity на него.
Еще бы я порекомендовал перед телепортом сделать это:
PHP:
vOrigin[1] += 30;
Это чтобы мяч не застревал в текстуре и не улетал никуда при спавне. Хотя, там еще желательно и с углами поработать, чтобы со стенами такого не происходиол, но...

А так же следует добавить проверку на дистанцию до цели. В твоем коде сделано так, что можно почти куда угодно тыкнуть и мяч появится. Просто получаешь позицию игрока, берешь позицию, ккда он смотрит и проверяешь при помощи GetVectorLenght, если не ошибаюсь.
 
Сверху Снизу