Растворение
| |
nynCuKaH
|
Дата: Суббота, 14.04.2012, 14:49:53 | Сообщение # 1 |
|
Сообщений: 110
Репутация: 0 [ +/- ]
|
|
Здравствуйте вот мой код аптечки.
Code public OnPluginStart() { AutoExecConfig(); RegConsoleCmd("h", giveheal);
// Create ConVars CreateConVar("hod_version", PLUGIN_VERSION, "", FCVAR_PLUGIN | FCVAR_REPLICATED | FCVAR_NOTIFY); hod_enabled = CreateConVar("hod_enabled", "1", "", FCVAR_PLUGIN); hod_health = CreateConVar("hod_health", "25", "", FCVAR_PLUGIN); hod_max_health = CreateConVar("hod_max_health", "100", "", FCVAR_PLUGIN); hod_lifetime = CreateConVar("hod_lifetime", "5", "", FCVAR_PLUGIN); hod_dissolve = CreateConVar("hod_dissolve", "1", "", FCVAR_PLUGIN);
// Find SendProp Offsets if((g_iCollision = FindSendPropOffs("CBaseEntity", "m_Collision")) == -1) { LogError("Could not find offset for CBaseEntity::m_Collision"); }
if((g_iSolidFlags = FindSendPropOffs("CBaseEntity", "m_usSolidFlags")) == -1) { LogError("Could not find offset for CBaseEntity::m_usSolidFlags"); }
// SDKTools if((g_hGameConf = LoadGameConfigFile("plugin.healthkit_on_death")) != INVALID_HANDLE) { StartPrepSDKCall(SDKCall_Entity); PrepSDKCall_SetFromConf(g_hGameConf, SDKConf_Signature, "Dissolve"); PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain); PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer); PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain); PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain); PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain); PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByValue); PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain); g_hDissolve = EndPrepSDKCall();
StartPrepSDKCall(SDKCall_Static); PrepSDKCall_SetFromConf(g_hGameConf, SDKConf_Signature, "UTIL_Remove"); PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); g_hUtilRemove = EndPrepSDKCall(); } // Hook Events HookEvent("player_death", EventPlayerDeath); }
public OnMapStart() { PrecacheSound(HEALTHKIT_SOUND, true); PrecacheModel(HEALTHKIT_MODEL, true); }
public Action:giveheal(userid, args) { if(0 < userid <= MaxClients && IsClientInGame(userid)) { if(IsPlayerAlive(userid) && GetClientTeam(userid) == 3) { CreateHealthkit(userid, g_iHealthkitIndex); SetNextHealthkitIndex();
} } }
public StartTouch(iEntity, iOther) { if (iOther < 1 || iOther > MaxClients || !IsClientInGame(iOther) || !IsPlayerAlive(iOther)) { return; }
new iMaxHealth = GetConVarInt(hod_max_health); new iClientHealth = GetClientHealth(iOther);
if (iClientHealth < iMaxHealth) { iClientHealth += GetConVarInt(hod_health); if (iClientHealth > iMaxHealth) { iClientHealth = iMaxHealth; } SetEntityHealth(iOther, iClientHealth);
new Float:vecPos[3]; GetClientAbsOrigin(iOther, vecPos); EmitSoundToAll(HEALTHKIT_SOUND, iOther, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, vecPos, NULL_VECTOR, true, 0.0);
RemoveEntity(iEntity); } }
public OnEntityDestroyed(iEntity) { new iIndex = GetHealthkitIndex(iEntity); if (iIndex == -1) return;
if (g_hTimersDissolve[iIndex] != INVALID_HANDLE) { CloseHandle(g_hTimersDissolve[iIndex]); g_hTimersDissolve[iIndex] = INVALID_HANDLE; }
if (g_hTimersRemove[iIndex] != INVALID_HANDLE) { CloseHandle(g_hTimersRemove[iIndex]); g_hTimersRemove[iIndex] = INVALID_HANDLE; }
g_iHealthkits[iIndex] = -1; }
public EventPlayerDeath(Handle:hEvent, const String:sName[], bool:bDontBroadcast) { if(!GetConVarBool(hod_enabled)) { return; }
new iClient = GetClientOfUserId(GetEventInt(hEvent, "userid")); new iAttacker = GetClientOfUserId(GetEventInt(hEvent, "attacker"));
if(iClient != 0 && iAttacker != 0 && GetClientTeam(iClient) != GetClientTeam(iAttacker)) { CreateHealthkit(iClient, g_iHealthkitIndex); SetNextHealthkitIndex(); } }
// Timers public Action:TimerDissolve(Handle:hTimer, any:iIndex) { g_hTimersDissolve[iIndex] = INVALID_HANDLE;
if (g_iHealthkits[iIndex] != -1) { DissolveEntity(g_iHealthkits[iIndex]); } }
public Action:TimerRemove(Handle:hTimer, any:iIndex) { g_hTimersRemove[iIndex] = INVALID_HANDLE;
if (g_iHealthkits[iIndex] != -1) { RemoveEntity(g_iHealthkits[iIndex]); } }
CreateHealthkit(iClient, iIndex) { new iEntity = CreateEntityByName("prop_physics", -1); if (iEntity == -1) return;
new Float:vecPos[3]; GetClientAbsOrigin(iClient, vecPos); vecPos[2] += GetRandomFloat(5.0, 1.0);
new Float:vecVel[3]; vecVel[0] = GetRandomFloat(-200.0, 200.0); vecVel[1] = GetRandomFloat(-200.0, 200.0); vecVel[2] = GetRandomFloat(1.0, 200.0);
SetEntityModel(iEntity, HEALTHKIT_MODEL); TeleportEntity(iEntity, vecPos, NULL_VECTOR, NULL_VECTOR); DispatchSpawn(iEntity);
SetEntityMoveType(iEntity, MOVETYPE_VPHYSICS); SetEntProp(iEntity, Prop_Data, "m_CollisionGroup", 1); SetEntProp(iEntity, Prop_Data, "m_MoveCollide", 0); SetSolidFlags(iEntity, 152);
TeleportEntity(iEntity, NULL_VECTOR, NULL_VECTOR, vecVel);
SDKHook(iEntity, SDKHook_StartTouch, StartTouch);
new Float:fLifeTime = GetConVarFloat(hod_lifetime); new Float:fDissolve = fLifeTime - 2.5;
if(GetConVarBool(hod_dissolve)) { if (fDissolve < 0.0) fDissolve = 0.0; g_hTimersDissolve[iIndex] = CreateTimer(fDissolve, TimerDissolve, iIndex); }
g_hTimersRemove[iIndex] = CreateTimer(fLifeTime, TimerRemove, iIndex);
g_iHealthkits[iIndex] = iEntity; }
GetHealthkitIndex(iEntity) { for (new i = 0; i < MAX_HEALTHKITS; i++) { if (g_iHealthkits[i] == iEntity) { return i; } } return -1; }
SetNextHealthkitIndex() { g_iHealthkitIndex++; if (g_iHealthkitIndex >= MAX_HEALTHKITS) { g_iHealthkitIndex = 0; } }
SetSolidFlags(iEntity, iFlags) { if(g_iCollision == -1 || g_iSolidFlags == -1) return; SetEntData(iEntity, g_iCollision + g_iSolidFlags, iFlags, 2, true); }
DissolveEntity(iEntity) { if(g_hDissolve == INVALID_HANDLE) return -1; return SDKCall(g_hDissolve, iEntity, NULL_STRING, GetGameTime(), false, 0, Float:{0.0,0.0,0.0}, 0); }
RemoveEntity(iEntity) { if(g_hUtilRemove == INVALID_HANDLE) return; SDKCall(g_hUtilRemove, iEntity); }
Не получается настроить что бы аптечку растворяло. Пишешь !h аптечка выпадает но через 5 - 10 секунд он её не растворяет. Вообще не растворяет.
|
|
| |
Scarface_slv
|
Дата: Суббота, 14.04.2012, 16:07:58 | Сообщение # 2 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
на маленький пример эффекта растворения предмета думаю сам спокойно по примеру сделаешь раз написал такой скрипт =) Code #include <sourcemod> #include <sdktools_entinput> #include <sdktools_functions>
new Float:Pos[3];
public OnPluginStart() { RegConsoleCmd("prop", create_prop); }
public OnMapStart() { PrecacheModel("models/props/cs_office/vending_machine.mdl", true); }
public Action:create_prop(i, args) { GetClientAbsOrigin(i, Pos); Pos[0] += 80.0; new index = CreateEntityByName("prop_dynamic"); if (index > 0) { SetEntityModel(index, "models/props/cs_office/vending_machine.mdl"); DispatchKeyValueVector(index, "origin", Pos); DispatchSpawn(index); CreateTimer(5.0, Prop_delete, index); } return Plugin_Handled; }
public Action:Prop_delete(Handle:event, any:index) { ExtinguishEntity(index); decl String:target[32]; Format(target, sizeof(target), "target_%d", index); new ent = CreateEntityByName("env_entity_dissolver"); if (ent > 1) { DispatchKeyValue(index, "targetname", target); DispatchKeyValue(ent, "dissolvetype", "3"); DispatchKeyValue(ent, "target", target); AcceptEntityInput(ent, "Dissolve"); AcceptEntityInput(ent, "kill"); } }
|
|
| |
nynCuKaH
|
Дата: Суббота, 14.04.2012, 16:17:37 | Сообщение # 3 |
|
Сообщений: 110
Репутация: 0 [ +/- ]
|
|
Не буду врать не полностью мой код :)Добавлено (14.04.2012, 16:17:37) --------------------------------------------- У меня проблема :( все равно не растворяет. Поставил другие значение чуть чуть исправил не пашет. Когда пишешь команду !h выпадает аптечка и она лежит не растворяется. Когда убиваешь врага из него выпадает аптечка и аптечка растворяется. Не получается. Мой код от которого образуется аптечка командой !h
Code public Action:giveheal(userid, args) { if(0 < userid <= MaxClients && IsClientInGame(userid)) { if(IsPlayerAlive(userid) && GetClientTeam(userid) == 3) { CreateHealthkit(userid, g_iHealthkitIndex); SetNextHealthkitIndex();
} } }
|
|
| |
Scarface_slv
|
Дата: Суббота, 14.04.2012, 18:02:34 | Сообщение # 4 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
я те дал пример разбирайся сам, или как придет WS поможет те наверно=) а у тя там разбираться не хочу я тут сам пишу плагин мучаюсь))Добавлено (14.04.2012, 18:02:34) ---------------------------------------------
Quote (nynCuKaH) Не буду врать не полностью мой код :) а еще, не полностью твой код? там вообще нет твоего кода ты добавил команду h и написал мой код, весело)
|
|
| |
nynCuKaH
|
Дата: Суббота, 14.04.2012, 19:37:35 | Сообщение # 5 |
|
Сообщений: 110
Репутация: 0 [ +/- ]
|
|
оО Твой код написал. Ну да конечно , я взял плагин healthkit и добавил пару элементов. А твой h и код я не брал. Я свой писал и не надо выдумывать
|
|
| |
Scarface_slv
|
Дата: Суббота, 14.04.2012, 23:51:59 | Сообщение # 6 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
я про свой ниче и не сказал, просто присваивать чужое как тупо глупо что ли...Добавлено (14.04.2012, 23:51:59) --------------------------------------------- я сказал цитату твою, то что ты написал "мой код аптечки" я не имел виду то что ты взял мой код.
|
|
| |
nynCuKaH
|
Дата: Воскресенье, 15.04.2012, 12:35:52 | Сообщение # 7 |
|
Сообщений: 110
Репутация: 0 [ +/- ]
|
|
кк
|
|
| |
|