←  Szukam pluginu

AMXX.pl: Support AMX Mod X i SourceMod

»

autorespawn

  • +
  • -
marekk123123k - zdjęcie marekk123123k 16.10.2011

Witam szukam pluginy na dm autorespawn który po 1 sek zacznie autorespawn po całej mapie nie tylko na respie ct lub tt
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 16.10.2011

Łap. SpawnPointy musisz sobie sam ustawić ( komenda "spawnmenu" ). Najpierw stwórz w katalogu configs katalog "AutoRespawn". W nim będą zapisywały sie pliki z nazwami map i miejscami spawnów. Respawn następuje po 1 sec.

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>

#define MAXSPAWN 10

new Float:g_fOrigins[MAXSPAWN][3];
new g_iAmountSpawn;

public plugin_init() {
register_plugin("AutoRespawn", "0.1", "MarWit")
register_clcmd("spawnmenu", "MenuSpawn", ADMIN_IMMUNITY)

register_event("DeathMsg", "eventDeath", "a");
register_event("TeamInfo", "eventJoinTeam", "a", "2=TERRORIST", "2=CT");

LoadMapConfig()
}

public LoadMapConfig()
{
g_iAmountSpawn = 0;

new szFile[128], szBuffer[128], szArg1[10], szArg2[10], szArg3[10];
get_configsdir(szFile, charsmax(szFile))
get_mapname(szBuffer, charsmax(szBuffer))
format(szFile, charsmax(szFile), "%s/AutoRespawn/%s.ini", szFile, szBuffer)

new iFile = fopen(szFile, "rt")

while(!feof(iFile) && g_iAmountSpawn < MAXSPAWN)
{
fgets(iFile, szBuffer, charsmax(szBuffer))
if(equali(szBuffer, ""))
continue;

replace_all(szBuffer, charsmax(szBuffer), ",", " ")
parse(szBuffer, szArg1, 9, szArg2, 9, szArg3, 9)

g_fOrigins[g_iAmountSpawn][0] = str_to_float(szArg1)
g_fOrigins[g_iAmountSpawn][1] = str_to_float(szArg2)
g_fOrigins[g_iAmountSpawn][2] = str_to_float(szArg3)


g_iAmountSpawn++;
}
fclose(iFile)
}

public SaveMapConfig()
{
new szFile[128], szBuffer[1024]

get_configsdir(szFile, charsmax(szFile))
get_mapname(szBuffer, charsmax(szBuffer))
format(szFile, charsmax(szFile), "%s/AutoRespawn/%s.ini", szFile, szBuffer)

new iFile = fopen(szFile, "wt")

for(new i=0; i<g_iAmountSpawn; i++)
{
if(g_fOrigins[i][0] == 0.0 && g_fOrigins[i][1] == 0.0)
continue;

format(szBuffer, charsmax(szBuffer), "%f,%f,%f^n", g_fOrigins[i][0], g_fOrigins[i][1], g_fOrigins[i][2])
fputs(iFile, szBuffer)
}
fclose(iFile)

}

public eventDeath()
{
if(task_exists(read_data(2))) remove_task(read_data(2))
set_task(1.0, "taskRespawn", read_data(2))
}

public eventJoinTeam(){
new id = read_data(1);

if(task_exists(id)) remove_task(id);
if(!is_user_alive(id)){
taskRespawn(id)
}
return 0;
}

public taskRespawn(id)
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
set_pev(id, pev_origin, g_fOrigins[random_num(0, g_iAmountSpawn)])
}

public MenuSpawn(id)
{
new iMenu = menu_create("MENU NPC", "MenuSpawn_Handle")
menu_additem(iMenu, "Stworz SpawnPoint")
menu_additem(iMenu, "Zapisz")
menu_additem(iMenu, "Przeladuj")
menu_display(id, iMenu)

return PLUGIN_HANDLED
}

public MenuSpawn_Handle(id, menu, item)
{
switch(item)
{
case 0: {
if(g_iAmountSpawn == MAXSPAWN) {
client_print(id, print_chat, "[AutoRespawn] Nie mozna ustawic wiecej spawnow!")
return PLUGIN_CONTINUE
}

new Float:fOrigin[3], iOrigin[3];
get_user_origin(id, iOrigin, 3)
IVecFVec(iOrigin, fOrigin)

fOrigin[2] += 30.0

g_fOrigins[g_iAmountSpawn] = fOrigin
g_iAmountSpawn++
}

case 1: {
SaveMapConfig()
}

case 2: {
LoadMapConfig()
}
}
return PLUGIN_CONTINUE
}

Użytkownik MarWit edytował ten post 16.10.2011 19:50
Odpowiedz

  • +
  • -
Drzanas - zdjęcie Drzanas 03.11.2011

Plugin działa prawie dobrze.
Owszem tworzy te spawnpointy, ale na jakiej zasadzie je tworzy?
W miejscu gdzie się w momencie wciśnięcia znajdujemy czy może tam gdzie patrzymy celownikiem, bo testowałem go i niektóee spawny zbyt nisko tzn gracz jak się w tym poincie pojawiał czasem był zakopany do połowy nóg i nie mógł się ruszać.
Odpowiedz

  • +
  • -
Nestea****Lemon - zdjęcie Nestea****Lemon 30.04.2012

Mi te spawny nie działają
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 30.04.2012

fOrigin[2] += 30.0
Dodajcie więcej np. 50 aby nie był wkopany


@edit

O ku*w.* @up jaki odśwież dopiero zobaczyłem.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 30.04.2012

Odśwież, czy nie, plugin poprawić trzeba ^ ^
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>

#define MAXSPAWN 10

new Float:g_fOrigins[MAXSPAWN][3];
new g_iAmountSpawn;

public plugin_init() {
register_plugin("AutoRespawn", "0.1", "MarWit")
register_clcmd("spawnmenu", "MenuSpawn", ADMIN_IMMUNITY)

register_event("DeathMsg", "eventDeath", "a");
register_event("TeamInfo", "eventJoinTeam", "a", "2=TERRORIST", "2=CT");

LoadMapConfig()
}

public LoadMapConfig()
{
g_iAmountSpawn = 0;

new szFile[128], szBuffer[128], szArg1[10], szArg2[10], szArg3[10];
get_configsdir(szFile, charsmax(szFile))
get_mapname(szBuffer, charsmax(szBuffer))
format(szFile, charsmax(szFile), "%s/AutoRespawn/%s.ini", szFile, szBuffer)

new iFile = fopen(szFile, "rt")

while(!feof(iFile) && g_iAmountSpawn < MAXSPAWN)
{
fgets(iFile, szBuffer, charsmax(szBuffer))
trim(szBuffer);

if(!szBuffer[0] || szBuffer[0] == ';')
continue;

parse(szBuffer, szArg1, 9, szArg2, 9, szArg3, 9)

g_fOrigins[g_iAmountSpawn][0] = str_to_float(szArg1)
g_fOrigins[g_iAmountSpawn][1] = str_to_float(szArg2)
g_fOrigins[g_iAmountSpawn][2] = str_to_float(szArg3)


g_iAmountSpawn++;
}
fclose(iFile)
}

public SaveMapConfig()
{
new szFile[128], szBuffer[1024]

get_configsdir(szFile, charsmax(szFile))
get_mapname(szBuffer, charsmax(szBuffer))
format(szFile, charsmax(szFile), "%s/AutoRespawn/%s.ini", szFile, szBuffer)

new iFile = fopen(szFile, "wt")

for(new i=0; i<g_iAmountSpawn; i++)
{
format(szBuffer, charsmax(szBuffer), "%f %f %f^n", g_fOrigins[i][0], g_fOrigins[i][1], g_fOrigins[i][2])
fputs(iFile, szBuffer)
}
fclose(iFile)

}

public eventDeath()
{
new id = read_data(2);
remove_task(id)
set_task(1.0, "taskRespawn", id)
}

public eventJoinTeam(){
new id = read_data(1);

remove_task(id);
if(!is_user_alive(id)){
taskRespawn(id)
}
return 0;
}

public taskRespawn(id)
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
set_pev(id, pev_origin, g_fOrigins[random(g_iAmountSpawn)])
}

public MenuSpawn(id)
{
new iMenu = menu_create("MENU NPC", "MenuSpawn_Handle")
menu_additem(iMenu, "Stworz SpawnPoint")
menu_additem(iMenu, "Zapisz")
menu_additem(iMenu, "Przeladuj")
menu_display(id, iMenu)

return PLUGIN_HANDLED
}

public MenuSpawn_Handle(id, menu, item)
{
switch(item)
{
case 0: {
if(g_iAmountSpawn >= MAXSPAWN) {
client_print(id, print_chat, "[AutoRespawn] Nie mozna ustawic wiecej spawnow!")
return PLUGIN_CONTINUE
}

new Float:fOrigin[3];
pev(id, pev_origin, fOrigin)

fOrigin[2] += 10.0

g_fOrigins[g_iAmountSpawn++] = fOrigin
}

case 1: {
SaveMapConfig()
}

case 2: {
LoadMapConfig()
}
}
return PLUGIN_CONTINUE
}

Nie wiem tylko czy można coś takiego pisać "g_fOrigins[g_iAmountSpawn++] = fOrigin", że jednemu originowi przypisujemy drugi, bez żadnej pętli.
Odpowiedz

  • +
  • -
danielpl - zdjęcie danielpl 01.03.2013

odświeżam poprawiłby ktoś ten błąd?
bo po padnięciu serwer się crashuje :)

albo chociaż niech ktoś co ma o tym pojecie naprawi błąd w tym

public LoadMapConfig()
{
	    g_iAmountSpawn = 0;
	    new szFile[128], szBuffer[128], szArg1[10], szArg2[10], szArg3[10];
	    get_configsdir(szFile, charsmax(szFile))
	    get_mapname(szBuffer, charsmax(szBuffer))
	    format(szFile, charsmax(szFile), "%s/AutoRespawn/%s.ini", szFile, szBuffer)
	    new iFile = fopen(szFile, "rt")
	    while(!feof(iFile) && g_iAmountSpawn < MAXSPAWN)
	    {
			    fgets(iFile, szBuffer, charsmax(szBuffer))
			    trim(szBuffer);
			   
			    if(!szBuffer[0] || szBuffer[0] == ';')
					    continue;
			    parse(szBuffer, szArg1, 9, szArg2, 9, szArg3, 9)
			    g_fOrigins[g_iAmountSpawn][0] = str_to_float(szArg1)
			    g_fOrigins[g_iAmountSpawn][1] = str_to_float(szArg2)
			    g_fOrigins[g_iAmountSpawn][2] = str_to_float(szArg3)

			    g_iAmountSpawn++;
	    }
	    fclose(iFile)
}

Użytkownik danielpl edytował ten post 01.03.2013 06:28
Odpowiedz