1. sayfa (Toplam 2 sayfa)

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 4:24 pm
gönderen Colditz
Bildiğiniz üzere Csdm de rastgele doğma var. Mapin üzerinde teleport yerleri belirliyorsunuz ve yeni doğan kişiler orada doğuyor.
Açıkçası ben buna biraz farklılık vermek istiyorum. Biraz denedim fakat sürekli yakın yerlerde doğduğumu fark ettim. Mesela dust2 mapinde sürekli t basenin biraz yakınlarında doğuyorum. Buradaki origin ayarını nasıl yapmam gerek?
@Yek'-ta @Taha Demirbaş yardım ederseniz süper olur.

+Bu arada doğduktan sonra olarak ayarladım denemek için. Default spawn da doğuyorum sonradan ışınlıyor. Sonra bunu ayarlarım.
+ Kesinlikle bugta doğdurmuyor. Bazen yukarda doğup aşağı düşüyoz.

Kod: Tümünü seç

#include <amxmodx>
#include <reapi>
#include <hamsandwich>
#include <fakemeta_util>

public plugin_init() {
    register_plugin("Spawn", "1.0", "PurposeLess");
    
    RegisterHookChain(RG_CBasePlayer_Spawn, "Event_DeathMsg", 1);
}

public Event_DeathMsg(victim)
{
    //new victim = read_data(2);
    add_a_fake(victim);
}

public add_a_fake(id)
{
    new entity = fm_create_entity("info_target");
    new origin[3];
    //get_user_origin(entity, origin);
    origin[0] = random(999)
    origin[1] = random(999)
    origin[2] = random(999)
    fm_set_user_origin(entity, origin);
    //set_entvar(entity, var_origin,  origin);

    if(!Stuck(entity))
    {
        //ExecuteHamB(Ham_CS_RoundRespawn, id);
        //set_entvar(id, var_origin, origin);
        fm_set_user_origin(id, origin);
        client_print(id, print_chat, "Araniyordu.");
    }
    else {
        set_task(0.1, "add_a_fake", id);
        client_print(id, print_chat, "Araniyor.");
    }
}
stock bool:Stuck(id)
{
    static Float:origin[3];
    get_entvar(id, var_origin, origin);
    engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, get_entvar(id, var_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, 0, 0);
    return get_tr2(0, TR_StartSolid) ? true:false;
}
 

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 4:34 pm
gönderen emirakpinar
Farklı yerlerde doğmamasını default yerde mi doğmasını istiyorsunuz?

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 4:40 pm
gönderen Colditz
Hayır. Normalde csdm kurduğunda rastgele yerde doğması için .ini içinde teleport yerleri yazman gerekiyor.
Bunu kaldırmak istiyorum. Olayı anlatayım.

Bir info_target ekledim. Oyuncu doğduğunda bu info_target devreye girecek. Rastgele ışınlanacak.
Sorunsuz bir yere ışınlandığında oyuncu oraya ışınlanacak. Fakat sürekli aynı yerleri gösteriyor.
Herkes yakın yerlerde doğuyor (random olmasına rağmen).
Spawndan sonra bir görüntü;

Resim
Resim

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 4:42 pm
gönderen emirakpinar
Csdmde bu olay csdm_spawn_preset.sma ile oluyor. Onu inceleyin.

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 4:50 pm
gönderen Colditz
Bunu incelemeye gerek olduğunu düşünmüyorum.
.cfg ye bağlı olarak random spawn yapıyor. Ben .ini .cfg vs hiçbir şey olmadan olmasını istiyorum.
Yukardaki attığım kod çalışıyor yüksekliğini falan ayarlamak basit fakat adamlar bir bölge içinde duruyorlar başka yerlere ışınlanmıyorlar.

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 4:56 pm
gönderen emirakpinar
O zaman CSDM'yi örnek göstermeniz biraz ironik olmuş. .cfg veya .ini olması bir şeyi değiştirmez sonuçta o .cfg veya .ini ye bağlayacak olan sizsiniz. İsterseniz bağlamazsınız.

Diğer sorunuza cevap olarakta Amx Spawn Editor u kullanarak önce spawn yerlerini belirleyin. Daha sonrasında configs>spawns içerisinden koordinatları alabilirsiniz.

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 5:01 pm
gönderen Colditz
Her mapta böyle spawn yerleri belirleyip teker teker yazmak aptallık gibi bir şey olur. Hala spawn yerleri belirleyin diyorsunuz benim amacım eklenti içinde hiçbir ek dosya kullanmadan random respawn ı gerçekleştirmek. Lütfen attığım eklentiyi bir inceleyiniz ve ona göre mesaj yazmaya çalışın. Benim amacım her mapta koordinat alıp bunları eklentiye yazmak vs değil.

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 6:12 pm
gönderen amad
Şöyle bir şey yapılabilir , diye düşünüyorum seçilen sayı bir daha seçilmesin gibisinden ..

Kod: Tümünü seç

#include <amxmodx>

new bool:used[999] = false

public plugin_init()
{
    register_plugin("Source Code", "1.0", "amad")
}
public rasgelesayi() {
    new sayi1
    sayi1 = random_num(0,999)
    while(used[sayi1]) {
    sayi1 = random_num(0,999) ;
    }
    used[sayi1] = true;
}
 

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 6:17 pm
gönderen emirakpinar
Eğer konuyu açarken ".cfg veya .ini içerisine koordinat belirtmeden" demiş olsaydınız ona göre yorum yazardım. Origni nasıl alabilirim demişsiniz ve bende ona göre yorum yaptım.

Ek olarak bu attığım konuyu inceleyin. Kendim denediğimde rastgele bölgelere oluşturuyor fakat spawn etmiyor sizde denediğinizde görürsünüz. Kendinize göre düzenlersiniz.

https://forums.alliedmods.net/showthread.php?t=132500

Random Respawn

Gönderilme zamanı: Çrş Eyl 13, 2017 6:24 pm
gönderen Colditz
Mantık çok iyi beğendim fakat pek icraata sokamadım :D
new bool:used[3] yerini tanıtamamış olabilirim.

Kod: Tümünü seç

#include <amxmodx>
#include <reapi>
#include <hamsandwich>
#include <fakemeta_util>

new bool:used[3]

public plugin_init() {
    register_plugin("Spawn", "1.0", "PurposeLess");
    
    RegisterHookChain(RG_CBasePlayer_Spawn, "Event_DeathMsg", 1);
}

public Event_DeathMsg(victim)
{
    //new victim = read_data(2);
    add_a_fake(victim);
}

public add_a_fake(id)
{
    new entity = fm_create_entity("info_target");
    new origin[3];
    //get_user_origin(entity, origin);
    origin[0] = random(999);
    origin[1] = random(999);
    origin[2] = random(999);
    if(used[origin[0]]) { origin[0] = random(999);}else{used[origin[0]] = true;}
    if(used[origin[1]]) { origin[1] = random(999);}else{used[origin[1]] = true;}
    if(used[origin[2]]) { origin[2] = random(999);}else{used[origin[2]] = true;}
    fm_set_user_origin(entity, origin);
    //set_entvar(entity, var_origin,  origin);

    if(!Stuck(entity))
    {
        //ExecuteHamB(Ham_CS_RoundRespawn, id);
        //set_entvar(id, var_origin, origin);
        fm_set_user_origin(id, origin);
        client_print(id, print_chat, "Araniyordu.");
    }
    else {
        set_task(0.1, "add_a_fake", id);
        client_print(id, print_chat, "Araniyor.");
    }
}
stock bool:Stuck(id)
{
    static Float:origin[3];
    get_entvar(id, var_origin, origin);
    engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, get_entvar(id, var_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, 0, 0);
    return get_tr2(0, TR_StartSolid) ? true:false;
}
 
++@emirakpinar
Dediğine bakmadan önce ini .cfg kullanmadan deseydin falan demişsin. Keşke yorumları düzgün okusaydın.
post118245.html#p118209