GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi
17 Kasım 2025, 10:22:58

Hasar Alabilir Objeler

Başlatan haroldfinch, 10 Mart 2019, 15:46:42

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

haroldfinch

Selamlar, oyundaki objelerin silahlarla vurduğumuzda hasar alıp yok olması için bir sistem yapmıştım. Kodları inceleyip türevleri yapılabilir. Aşağıdaki kodlar resimdeki gibi 3 tane kum torbasını üst üste koyuyor. Link: https://st.depositphotos.com/1567858/4421/i/950/depositphotos_44214047-stock-photo-trenches-of-death-ww1-sandbag.jpg

Gerekenler: MapAndreas, Streamer, I-ZCMD

PAWN Kodu: Seç
#define MAX_LAYERS (4)
#define MAX_COVERS      (100)
#define COVER_HEALTH (250.0)

enum    E_COVER
{
Float: coverHealth,
coverObj[MAX_LAYERS],
Text3D: coverLabel,
coverTimer,
coverExists
}

new CoverData[MAX_COVERS][E_COVER];

public OnPlayerShootDynamicObject(playerid, weaponid, objectid, Float: x, Float: y, Float: z)
{
if(Streamer_GetIntData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_MODEL_ID) == 2060)
{
    for(new i, j = MAX_COVERS; i < j; i++)
{
if(CoverData[i][coverExists])
{
new Float: posx, Float: posy, Float: posz;
GetDynamicObjectPos(objectid, posx, posy, posz);
Cover_Damage(i, weaponid, GetPlayerDistanceFromPoint(playerid, posx, posy, posz));
PlayerPlaySound(playerid, 17802, 0.0, 0.0, 0.0);
break;
}
}
}
return 1;
}

Cover_FindFreeID()
{
for(new i; i < MAX_COVERS; i++)
{
    if(!CoverData[i][coverExists]) return i;
}

return -1;
}

Cover_Create(Float:x, Float:y, Float:a)
{
new id = Cover_FindFreeID();

if(id == -1)
    return print("cover limit asildi");

new Float:CA_z;
GetPointZPos(x, y, CA_z);

x += (1.0 * floatsin(-a, degrees));
y += (1.0 * floatcos(-a, degrees));
CA_z += 0.185;

for(new i; i < MAX_LAYERS; i++)
{
    CoverData[id][coverObj][i] = CreateDynamicObject(2060, x, y, CA_z + (0.25 * i), 0.0, 0.0, a);
    if(IsValidDynamicObject(CoverData[id][coverObj][i])) Streamer_SetArrayData(STREAMER_TYPE_OBJECT, CoverData[id][coverObj][i], E_STREAMER_EXTRA_ID, id);
}

CoverData[id][coverHealth] = COVER_HEALTH;

new label[6];
format(label, sizeof(label), "%.1f", COVER_HEALTH);
CoverData[id][coverLabel] = CreateDynamic3DTextLabel(label, Cover_DamageColor(id), x, y, CA_z + 1.25, 10.0, .testlos = 1);

CoverData[id][coverTimer] = SetTimerEx("Cover_Destroy", 300000, false, "i", id);
CoverData[id][coverExists] = true;
return 1;
}

forward Cover_Destroy(id);
public Cover_Destroy(id)
{
    if(!(0 <= id < MAX_COVERS) || !CoverData[id][coverExists]) return 0;
KillTimer(CoverData[id][coverTimer]);
CoverData[id][coverTimer] = -1;

for(new i; i < MAX_LAYERS; i++)
{
if(IsValidDynamicObject(CoverData[id][coverObj][i])) DestroyDynamicObject(CoverData[id][coverObj][i]);
CoverData[id][coverObj][i] = INVALID_OBJECT_ID;
}

if(IsValidDynamic3DTextLabel(CoverData[id][coverLabel])) DestroyDynamic3DTextLabel(CoverData[id][coverLabel]);
    CoverData[id][coverLabel] = Text3D: INVALID_3DTEXT_ID;
    CoverData[id][coverHealth] = COVER_HEALTH;
    CoverData[id][coverExists] = false;
return 1;
}

Cover_Damage(coverid, weaponid, Float: distance)
{
CoverData[coverid][coverHealth] -= GetWeaponDamageFromDistance(weaponid, distance) / 1.5;

if(CoverData[coverid][coverHealth] < 0.0) {
Cover_Destroy(coverid);
}else{
new label[6];
format(label, sizeof(label), "%.1f", CoverData[coverid][coverHealth]);
UpdateDynamic3DTextLabelText(CoverData[coverid][coverLabel], Cover_DamageColor(coverid), label);
}

return 1;
}

Cover_DamageColor(coverid)
{
new Float: health = CoverData[coverid][coverHealth], color;
if(health < (COVER_HEALTH / 4)) {
    color = 0xE74C3CFF;
}else if(health < (COVER_HEALTH / 2)) {
    color = 0xF39C12FF;
}else{
    color = 0x2ECC71FF;
}

return color;
}

COMMAND:createcover(playerid, params[]) return cmd_engelkur(playerid, params);
COMMAND:engelkur(playerid, params[])
{
new Float: x, Float: y, Float: z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
Cover_Create(x, y, a);
return 1;
}


Pablo

Alıntı




Pawnotürk Üyesi 2017-2020

Muteo

Paylaşım için teşekkürler.


QrzR


FalafelÇorba


Ryroz

Paylaşım için teşekkürler.


FelleR