GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

Hasar Listesi

Başlatan Inappropriate, 08 Mart 2020, 02:58:22

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Inappropriate

Merhaba. Zevkine roleplay modu kodluyorum. Aslında "zor" dediğim çoğu alanı kodladım ve o kadar da zor gözükmeyen bir yerde takılı kaldım. İnternette baktığımda pek sonuç bulamadım ben de buraya sormak istedim.

Bir kişiye ateş açıldığında silah, neresinden vurulduğu, hasar gibi bilgileri kaydetmek istiyorum. Tek bir sonucu listelemek istersem onu yapması çok kolay fakat ben yediği son 10 hasarı listelemek istiyorum.

enum kullanırsam "hasar1_bolge hasar1_tarih hasar1_damage, hasar2_bolge hasar2_tarih ..." şeklinde gideceği için çok acemice bir kodlama olacak. Başka türlü de nasıl yapacağımı bulamadım.
Kaydettirmek istediğim alanlar "bodypart, issuerid, tarih, weaponid, amount"

Yardımcı olabilirseniz çok sevinirim.

Full Stack Developer
deniztemekoglu.com

Radless

PAWN Kodu: Seç
#define MAX_DAMAGE_SLOT (10)

enum damageData
{
bool:
hasarli,
hasarliBolge,
Float:
alinanHasar,
hasarSilahi,
hasarVeren
}

new HasarBilgi[MAX_PLAYERS][MAX_DAMAGE_SLOT][damageData];

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
    if(issuerid != INVALID_PLAYER_ID)
    {
        new ID = GetFreeDamageSlot(playerid);

        if(ID == -1)
        return false;

        HasarBilgi[playerid][ID][hasarli] = true;
        HasarBilgi[playerid][ID][hasarliBolge] = bodypart;
        HasarBilgi[playerid][ID][alinanHasar] = amount;
        HasarBilgi[playerid][ID][hasarSilahi] = weaponid;
        HasarBilgi[playerid][ID][hasarVeren] = issuerid;
    }
    return 1;
}

CMD:hasar(playerid, params[])
{
new userID;

if(sscanf(params, "u", userID))
return SendClientMessage(playerid, 0x00FF00FF, "[!] {FFFFFF}Kullanım: /hasar [Oyuncu ID]");

new List[MAX_DAMAGE_SLOT * 62], weapName[32], playerName[MAX_PLAYER_NAME];

format(List, sizeof List, "{FFFFFF}Hasar Veren\t{FFFFFF}Hasar\t{FFFFFF}Silah\t{FFFFFF}Bölge\n");

for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[userID][i][hasarli] == false)
continue;

GetWeaponName(HasarBilgi[userID][i][hasarSilahi], weapName, sizeof weapName);
GetPlayerName(HasarBilgi[userID][i][hasarVeren], playerName, sizeof playerName);

format(List, sizeof List, "%s{FFFFFF}%s\t{FFFFFF}%.02f\t{FFFFFF}%s\t{FFFFFF}%s\n", List, playerName, HasarBilgi[userID][i][alinanHasar], weapName, GetDamagedBodyPart(HasarBilgi[userID][i][hasarliBolge]));
}


ShowPlayerDialog(playerid, 9671, DIALOG_STYLE_TABLIST_HEADERS, "Hasar Bilgileri:", List, "Tamam", "Kapat");
return true;
}

GetFreeDamageSlot(playerid)
{
for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[playerid][i][hasarli] == false)
return i;
}
return -1;
}

GetDamagedBodyPart(bodypart)
{
new str[8];

switch(bodypart)
{
case 3:   
format(str, sizeof str, "Karın");
case 4:   
format(str, sizeof str, "Çatal");
case 5:
format(str, sizeof str, "Sol Kol");
case 6:
format(str, sizeof str, "Sağ Kol");
case 7:
format(str, sizeof str, "Sol Bacak/Ayak");
case 8:
format(str, sizeof str, "Sağ Bacak/Ayak");
case 9:     
format(str, sizeof str, "Kafa");
}
return str;
}

"Life's too short to hold grudges."

flareoNNN

Alıntı yapılan: Radless - 08 Mart 2020, 04:24:37
PAWN Kodu: Seç
#define MAX_DAMAGE_SLOT (10)

enum damageData
{
bool:
hasarli,
hasarliBolge,
Float:
alinanHasar,
hasarSilahi,
hasarVeren
}

new HasarBilgi[MAX_PLAYERS][MAX_DAMAGE_SLOT][damageData];

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
    if(issuerid != INVALID_PLAYER_ID)
    {
        new ID = GetFreeDamageSlot(playerid);

        if(ID == -1)
        return false;

        HasarBilgi[playerid][ID][hasarli] = true;
        HasarBilgi[playerid][ID][hasarliBolge] = bodypart;
        HasarBilgi[playerid][ID][alinanHasar] = amount;
        HasarBilgi[playerid][ID][hasarSilahi] = weaponid;
        HasarBilgi[playerid][ID][hasarVeren] = issuerid;
    }
    return 1;
}

CMD:hasar(playerid, params[])
{
new userID;

if(sscanf(params, "u", userID))
return SendClientMessage(playerid, 0x00FF00FF, "[!] {FFFFFF}Kullanım: /hasar [Oyuncu ID]");

new List[MAX_DAMAGE_SLOT * 62], weapName[32], playerName[MAX_PLAYER_NAME];

format(List, sizeof List, "{FFFFFF}Hasar Veren\t{FFFFFF}Hasar\t{FFFFFF}Silah\t{FFFFFF}Bölge\n");

for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[userID][i][hasarli] == false)
continue;

GetWeaponName(HasarBilgi[userID][i][hasarSilahi], weapName, sizeof weapName);
GetPlayerName(HasarBilgi[userID][i][hasarVeren], playerName, sizeof playerName);

format(List, sizeof List, "%s{FFFFFF}%s\t{FFFFFF}%.02f\t{FFFFFF}%s\t{FFFFFF}%s\n", List, playerName, HasarBilgi[userID][i][alinanHasar], weapName, GetDamagedBodyPart(HasarBilgi[userID][i][hasarliBolge]));
}


ShowPlayerDialog(playerid, 9671, DIALOG_STYLE_TABLIST_HEADERS, "Hasar Bilgileri:", List, "Tamam", "Kapat");
return true;
}

GetFreeDamageSlot(playerid)
{
for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[playerid][i][hasarli] == false)
return i;
}
return -1;
}

GetDamagedBodyPart(bodypart)
{
new str[8];

switch(bodypart)
{
case 3:   
format(str, sizeof str, "Karın");
case 4:   
format(str, sizeof str, "Çatal");
case 5:
format(str, sizeof str, "Sol Kol");
case 6:
format(str, sizeof str, "Sağ Kol");
case 7:
format(str, sizeof str, "Sol Bacak/Ayak");
case 8:
format(str, sizeof str, "Sağ Bacak/Ayak");
case 9:     
format(str, sizeof str, "Kafa");
}
return str;
}

Kullanıcı 10 hasar aldıktan sonra diğer aldığı hasarları kayıt etmeyecektir. Yani son 10 hasarı kayıt sistemi değil, ilk 10 hasarı kayıt sistemi olmuş. Zaman koşulu eklenerek düzenlenmeli.
Son düzenlenme: 08 Mart 2020, 11:47:22 flareoNNN

squarepants

PAWN Kodu: Seç
#define MAX_DAMAGE_SLOT (10)

enum damageData
{
bool:
hasarli,
hasarliBolge,
Float:
alinanHasar,
hasarSilahi,
hasarVeren
}
new dmgTaken[MAX_PLAYERS];
new HasarBilgi[MAX_PLAYERS][MAX_DAMAGE_SLOT][damageData];

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
    if(issuerid != INVALID_PLAYER_ID)
    {
        if(dmgTaken[playerid] == 10)
        {
                 for(new j = 0; j < MAX_DAMAGE_SLOT; j++)
                 {
                      HasarBilgi[playerid][j][damageData:0] = false;
                 }
                 dmgTaken[playerid] = 0;
        }
        new ID = GetFreeDamageSlot(playerid);

        if(ID == -1)
        return false;

        HasarBilgi[playerid][ID][hasarli] = true;
        dmgTaken[playerid]++;
        HasarBilgi[playerid][ID][hasarliBolge] = bodypart;
        HasarBilgi[playerid][ID][alinanHasar] = amount;
        HasarBilgi[playerid][ID][hasarSilahi] = weaponid;
        HasarBilgi[playerid][ID][hasarVeren] = issuerid;
    }
    return 1;
}

CMD:hasar(playerid, params[])
{
new userID;

if(sscanf(params, "u", userID))
return SendClientMessage(playerid, 0x00FF00FF, "[!] {FFFFFF}Kullanım: /hasar [Oyuncu ID]");

new List[MAX_DAMAGE_SLOT * 62], weapName[32], playerName[MAX_PLAYER_NAME];

format(List, sizeof List, "{FFFFFF}Hasar Veren\t{FFFFFF}Hasar\t{FFFFFF}Silah\t{FFFFFF}Bölge\n");

for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[userID][i][hasarli] == false)
continue;

GetWeaponName(HasarBilgi[userID][i][hasarSilahi], weapName, sizeof weapName);
GetPlayerName(HasarBilgi[userID][i][hasarVeren], playerName, sizeof playerName);

format(List, sizeof List, "%s{FFFFFF}%s\t{FFFFFF}%.02f\t{FFFFFF}%s\t{FFFFFF}%s\n", List, playerName, HasarBilgi[userID][i][alinanHasar], weapName, GetDamagedBodyPart(HasarBilgi[userID][i][hasarliBolge]));
}


ShowPlayerDialog(playerid, 9671, DIALOG_STYLE_TABLIST_HEADERS, "Hasar Bilgileri:", List, "Tamam", "Kapat");
return true;
}

GetFreeDamageSlot(playerid)
{
for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[playerid][i][hasarli] == false)
return i;
}
return -1;
}

GetDamagedBodyPart(bodypart)
{
new str[8];

switch(bodypart)
{
case 3:   
format(str, sizeof str, "Karın");
case 4:   
format(str, sizeof str, "Çatal");
case 5:
format(str, sizeof str, "Sol Kol");
case 6:
format(str, sizeof str, "Sağ Kol");
case 7:
format(str, sizeof str, "Sol Bacak/Ayak");
case 8:
format(str, sizeof str, "Sağ Bacak/Ayak");
case 9:     
format(str, sizeof str, "Kafa");
}
return str;
}
Sanırım küçük bir indeks resetleme fonksiyonu ile bu işlem önceliği sağlanılabilir.
Son düzenlenme: 08 Mart 2020, 15:25:26 ThePosition

Radless

Alıntı yapılan: flareoNNN - 08 Mart 2020, 11:46:21
Kullanıcı 10 hasar aldıktan sonra diğer aldığı hasarları kayıt etmeyecektir. Yani son 10 hasarı kayıt sistemi değil, ilk 10 hasarı kayıt sistemi olmuş. Zaman koşulu eklenerek düzenlenmeli.
Düzgün okumamışım  :melek:

"Life's too short to hold grudges."

Radless

PAWN Kodu: Seç
#define MAX_DAMAGE_SLOT (100)

enum damageData
{
bool:
hasarli,
hasarliBolge,
Float:
alinanHasar,
hasarSilahi,
hasarVeren
}

new HasarBilgi[MAX_PLAYERS][MAX_DAMAGE_SLOT][damageData];

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
    if(issuerid != INVALID_PLAYER_ID)
    {
        new ID = GetFreeDamageSlot(playerid);

        if(ID == -1)
        return false;

        HasarBilgi[playerid][ID][hasarli] = true;
        HasarBilgi[playerid][ID][hasarliBolge] = bodypart;
        HasarBilgi[playerid][ID][alinanHasar] = amount;
        HasarBilgi[playerid][ID][hasarSilahi] = weaponid;
        HasarBilgi[playerid][ID][hasarVeren] = issuerid;
    }
    return 1;
}

CMD:hasar(playerid, params[])
{
new userID;

if(sscanf(params, "u", userID))
return SendClientMessage(playerid, 0x00FF00FF, "[!] {FFFFFF}Kullanım: /hasar [Oyuncu ID]");

new List[4096], weapName[32], playerName[MAX_PLAYER_NAME];

format(List, sizeof List, "{FFFFFF}Hasar Veren\t{FFFFFF}Hasar\t{FFFFFF}Silah\t{FFFFFF}Bölge\n");

for(new i = GetAllDamagedSlot(userID); i > GetAllDamagedSlot(userID)-10; i--)
{
if(i >= 0)
{
if(HasarBilgi[userID][i][hasarli] == false)
continue;

GetWeaponName(HasarBilgi[userID][i][hasarSilahi], weapName, sizeof weapName);
GetPlayerName(HasarBilgi[userID][i][hasarVeren], playerName, sizeof playerName);

format(List, sizeof List, "%s{FFFFFF}%s\t{FFFFFF}%.02f\t{FFFFFF}%s\t{FFFFFF}%s\n", List, playerName, HasarBilgi[userID][i][alinanHasar], weapName, GetDamagedBodyPart(HasarBilgi[userID][i][hasarliBolge]));
}
}


ShowPlayerDialog(playerid, 9671, DIALOG_STYLE_TABLIST_HEADERS, "Hasar Bilgileri:", List, "Tamam", "Kapat");
return true;
}

GetFreeDamageSlot(playerid)
{
for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[playerid][i][hasarli] == false)
return i;
}
return -1;
}

GetDamagedBodyPart(bodypart)
{
new str[8];

switch(bodypart)
{
case 3:   
format(str, sizeof str, "Karın");
case 4:   
format(str, sizeof str, "Çatal");
case 5:
format(str, sizeof str, "Sol Kol");
case 6:
format(str, sizeof str, "Sağ Kol");
case 7:
format(str, sizeof str, "Sol Bacak/Ayak");
case 8:
format(str, sizeof str, "Sağ Bacak/Ayak");
case 9:     
format(str, sizeof str, "Kafa");
}
return str;
}

GetAllDamagedSlot(playerid)
{
new Number = 0;
for(new i = 0; i < MAX_DAMAGE_SLOT; i++)
{
if(HasarBilgi[playerid][i][hasarli] == true)
Number += 1;
}
return Number;
}
Biraz değişiklik yaptım bir de bu şekil dener misin?
Son düzenlenme: 08 Mart 2020, 20:46:12 Radless
"Life's too short to hold grudges."

Inappropriate

Sabah bakıp yorum bırakacağım, teşekkür ederim yardımcı olup yorum atan herkese.

Full Stack Developer
deniztemekoglu.com

Inappropriate

PAWN Kodu: Seç
new HasarBilgi[MAX_PLAYERS][MAX_DAMAGE_SLOT][damageData];Bu şekilde bir tanımlama yapıldığını bilmiyordum. Bunu öğrendikten sonra devamına bakmadım bile zaten. Sistemi başarıyla tamamladım, yardımınız için çok teşekkür ederim.


Full Stack Developer
deniztemekoglu.com

Radless

@Denizz istediğini yapabildiysen konuyu kilitleyebilirsin ve galiba dediğin şey anladığım kadarıyla 1 veride 1 den fazla slot oluşturmayı bilmemen, öğrendiysen ne mutlu bana.
Son düzenlenme: 09 Mart 2020, 16:59:38 Radless
"Life's too short to hold grudges."

Cruza

Sorun çözüme kavuşmuş, kilit & arşiv.

since 2008
graphic designer & front-end web developer