Hallo zusammen,
ich bin gerade am questen und bin auf ein Problem gestoßen:
Habe auch schon d.spawn_mob_ac_dir() versucht, liefert gleiches Ergebnis.
Ändere ich Werte nur geringfügig spawnen die Mobs manchmal, manchmal nicht. Bisher hat es mit der Funktion gut geklappt, habe sie noch an anderen Stellen verwendet und da hat es (bis auf eine Ausnahme wo das gleiche ist) gut funktioniert.
An den VNUMs der Mobs und den Koordianten an sich liegt es nicht, die existieren wirklich.
In der sys_err und sys_log hab ich nichts dazu gefunden.
Hier der C++-Sourcecode der Questfunktion:
Code
- int dungeon_spawn_mob(lua_State* L)
- {
- if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3))
- {
- sys_err("invalid argument");
- return 0;
- }
- CQuestManager& q = CQuestManager::instance();
- LPDUNGEON pDungeon = q.GetCurrentDungeon();
- DWORD vid = 0;
- if (pDungeon)
- {
- DWORD dwVnum = (DWORD) lua_tonumber(L, 1);
- long x = (long) lua_tonumber(L, 2);
- long y = (long) lua_tonumber(L, 3);
- float radius = lua_isnumber(L, 4) ? (float) lua_tonumber(L, 4) : 0;
- DWORD count = (lua_isnumber(L, 5)) ? (DWORD) lua_tonumber(L, 5) : 1;
- sys_log(0, "dungeon_spawn_mob %u %d %d", dwVnum, x, y);
- if (count == 0)
- count = 1;
- while (count --)
- {
- if (radius<1)
- {
- LPCHARACTER ch = pDungeon->SpawnMob(dwVnum, x, y);
- if (ch && !vid)
- vid = ch->GetVID();
- }
- else
- {
- float angle = number(0, 999) * M_PI * 2 / 1000;
- float r = number(0, 999) * radius / 1000;
- long nx = x + (long)(r * cos(angle));
- long ny = y + (long)(r * sin(angle));
- LPCHARACTER ch = pDungeon->SpawnMob(dwVnum, nx, ny);
- if (ch && !vid)
- vid = ch->GetVID();
- }
- }
- }
- lua_pushnumber(L, vid);
- return 1;
- }
Ideen?