GTAMulti - GTA Türkiye

San Andreas Multiplayer => PAWN Kodlama => Mod Galerisi => Konuyu başlatan: haroldfinch - 10 Mart 2019, 15:46:42

Başlık: Hasar Alabilir Objeler
Gönderen: haroldfinch - 10 Mart 2019, 15:46:42
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;
}
Başlık: Ynt: Hasar Alabilir Objeler
Gönderen: Pablo - 15 Haziran 2019, 04:06:37
teşekkürler
Başlık: Ynt: Hasar Alabilir Objeler
Gönderen: Muteo - 15 Haziran 2019, 04:57:38
Paylaşım için teşekkürler.
Başlık: Ynt: Hasar Alabilir Objeler
Gönderen: QrzR - 15 Haziran 2019, 18:01:05
Alıntı yapılan: Muteo - 15 Haziran 2019, 04:57:38

Paylaşım için teşekkürler.
Başlık: Ynt: Hasar Alabilir Objeler
Gönderen: FalafelÇorba - 16 Haziran 2019, 18:39:32
Teşekkürler.  :helal:
Başlık: Ynt: Hasar Alabilir Objeler
Gönderen: Ryroz - 17 Haziran 2019, 17:03:42
Paylaşım için teşekkürler.
Başlık: Ynt: Hasar Alabilir Objeler
Gönderen: FelleR - 27 Haziran 2019, 01:45:33
Yararlı.