Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

NPC, zapisuje się do pliku, lecz już nie wczytuje.


  • Zamknięty Temat jest zamknięty
4 odpowiedzi w tym temacie

#1 GoldeN

    Wszechmogący

  • Zbanowany

Reputacja: 69
Pomocny

  • Postów:676
  • Imię:Kamil
  • Lokalizacja:DG
Offline

Napisano 18.04.2011 23:39

Witam, mam problem. Wyciągnąłem kod z Diablo LOD na tworzenie i zapisywanie pozycji NPC w pliku i automatyczne jej tworzenie po zmianie mapy, lecz mam problem:

Stawiam sobie ze trzy te modele "NPC", wszystko pięknie, do pliku zapisuje ich pozycję, zmieniam mapę, no i nie spawnuje. Nawet ustawiłem ich spawn na komendę i także nic. CHMODY nadałem na folder w którym się znajdują zapisy pozycji na mapach (777) ale to też nic nie dało. Podaję trzy funkcję, w których mniemam, że mam błąd:

public plugin_cfg()
{
get_configsdir(g_ConfigsDir, 63);
formatex(g_ItemOriginDir, 63, "%s/%s", g_ConfigsDir, inventory_dir_name);

//new File[192];

if( !dir_exists(g_ItemOriginDir) )
{
mkdir(g_ItemOriginDir);
}
else
{
new CurMap[32];
get_mapname(CurMap, 31);
Load_Origins_Charsi(CurMap);
}
}

public Save_Origin_Charsi(CurMap[], Origin[3])
{
new MapFile[64], Text[64]
format(MapFile, 63, "%s/%s_charsi.cfg", g_ItemOriginDir, CurMap)

if(!file_exists(MapFile))
{
new Comments[64]
format(Comments, 63, "; Mapa pochodzenia dla pozycji %s", CurMap)
write_file(MapFile, Comments, -1)
}

format(Text, 63, "%i %i %i", Origin[0], Origin[1], Origin[2])
write_file(MapFile, Text, -1)
}

public Load_Origins_Charsi(CurMap[])
{
new MapFile[64]
format(MapFile, 63, "%s/%s_charsi.cfg", g_ItemOriginDir, CurMap)

if(!file_exists(MapFile))
return PLUGIN_CONTINUE;

g_MapItemNum1 = 0
for(new i = 1; i <= MAX_MAPITEMS; ++i)
{
g_MapItemOrgins1[i][0] = 0
g_MapItemOrgins1[i][1] = 0
g_MapItemOrgins1[i][2] = 0
}

new Text[64], Line = 0, Len = 0;

while(read_file(MapFile, Line++, Text, 63, Len))
{
if((Text[0]==';') || !Len) {
continue
}

if(g_MapItemNum1 >= MAX_MAPITEMS)
{
log_amx("Maksymalna ilosc elementow mapy zostala osiagnieta, proszę zmienic ja komenda MAX_MAPITEMS")
break
}

new iOrigin[3][16];
parse(Text, iOrigin[0], 15, iOrigin[1], 15, iOrigin[2], 15)

g_MapItemNum1++
g_MapItemOrgins1[g_MapItemNum][0] = str_to_num(iOrigin[0])
g_MapItemOrgins1[g_MapItemNum][1] = str_to_num(iOrigin[1])
g_MapItemOrgins1[g_MapItemNum][2] = str_to_num(iOrigin[2])
}

return PLUGIN_CONTINUE
}

Użytkownik GoldeN edytował ten post 18.04.2011 23:40


#2 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 19.04.2011 21:32

To może tak

#include <amxmodx>
#include <amxmisc>
#include <engine>

#define VERSION "1.0"

new gszFile[128];

public plugin_init(){
register_plugin("Zapis npc", VERSION, "diablix");

new szDir[128], szMap[32];
get_basedir(szDir, sizeof szDir);
add(szDir, sizeof szDir, "/NPC_SAVES");

if (!dir_exists(szDir))
mkdir(szDir);

get_mapname(szMap, sizeof szMap);
formatex(gszFile, 96, "%s/%s.txt", szDir, szMap);

register_clcmd("say /zapisz", "Save");
}

public plugin_cfg() Load();

public Save(id){
new file = fopen(gszFile, "wt");
new ent = -1;
new Float:fOrigin[3];
new szData[512];

while((ent = find_ent_by_class(ent, "klasa_bytu"))){ // do podmiany
entity_get_vector(ent, EV_VEC_origin, fOrigin);
formatex(szData, 512, "%f %f %f^n", fOrigin[0], fOrigin[1], fOrigin[2]);
fputs(file, szData);
}

client_print(id, 3, "Zapisano!");

fclose(file);
}

Load(){
if (file_exists(gszFile)){
new szLine[768], sz1[16], sz2[16], sz3[16];
new Float:vVec1[3];
new f = fopen(gszFile, "rt");

while (!feof(f)){
fgets(f, szLine, 767);
remove_quotes(szLine);
parse(szLine, sz1, 16, sz2, 16, sz3, 16);

vVec1[0] = str_to_float(sz1);
vVec1[1] = str_to_float(sz2);
vVec1[2] = str_to_float(sz3);

//FUNKCJA_STWORZ_BYT(vVec);
}
fclose(f);
}
}

  • +
  • -
  • 1

#3 GoldeN

    Wszechmogący

  • Autor tematu
  • Zbanowany

Reputacja: 69
Pomocny

  • Postów:676
  • Imię:Kamil
  • Lokalizacja:DG
Offline

Napisano 19.04.2011 22:42

Działa! Dziękuję. A jak do tego zrobić funkcję, kasującą cały plik?

#4 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 20.04.2011 13:53

unlink(f);

  • +
  • -
  • 0

#5 Owner123

    Wszechpomocny

  • Użytkownik

Reputacja: 146
Zaawansowany

  • Postów:331
  • Lokalizacja:Barty ;]
Offline

Napisano 20.04.2011 15:43

Albo najzwyklejsze delete_file.

Użytkownik Owner123 edytował ten post 20.04.2011 15:44

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych