Перейти к содержанию
Авторизация  
Dreanilamaster

Рандомный Спаун Новых Персонажей

Рекомендуемые сообщения

Приветствую форумчане.

Очень хочу сделать рандомный спаун всех новых персонажей по нескольким точкам.

Признаюсь, в Java я совсем не силен, моими усилиями я получаю только кучу ошибок при компиляции.

В конфигах включен custom spawn, и там же добавлены 5 точек координат.

 

Очень прошу, помогите как грамотно в CharacterCreate.java сделать рандомный выбор между 5 точкам из конфига:

 

if (Config.SPAWN_CHAR)
newChar.setXYZInvisible(Config.SPAWN_X, Config.SPAWN_Y, Config.SPAWN_Z);
newChar.setXYZInvisible(Config.SPAWN2_X, Config.SPAWN2_Y, Config.SPAWN2_Z);
newChar.setXYZInvisible(Config.SPAWN3_X, Config.SPAWN3_Y, Config.SPAWN3_Z);
newChar.setXYZInvisible(Config.SPAWN4_X, Config.SPAWN4_Y, Config.SPAWN4_Z);
newChar.setXYZInvisible(Config.SPAWN5_X, Config.SPAWN5_Y, Config.SPAWN5_Z);
else
newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);

p.s сборка l2jfrozen

Изменено пользователем Dreanilamaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то что вы написали бред)

без использования Rnd тупо и не будет так работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
    if (Config.SPAWN_CHAR) 
    {
	    int _Rnd = Rnd.get(100);
	    if (_Rnd < 20)
	    {
		    newChar.setXYZInvisible(Config.SPAWN_X, Config.SPAWN_Y, Config.SPAWN_Z);
	    }
	    else if (_Rnd < 30)
	    {
		    newChar.setXYZInvisible(Config.SPAWN2_X, Config.SPAWN2_Y, Config.SPAWN2_Z);
	    }
	    else if (_Rnd < 40)
	    {
		    newChar.setXYZInvisible(Config.SPAWN3_X, Config.SPAWN3_Y, Config.SPAWN3_Z);
	    }
	    else if (_Rnd < 60)
	    {
		    newChar.setXYZInvisible(Config.SPAWN4_X, Config.SPAWN4_Y, Config.SPAWN4_Z);
	    }
	    else if (_Rnd < 80)
	    {
		    newChar.setXYZInvisible(Config.SPAWN5_X, Config.SPAWN5_Y, Config.SPAWN5_Z);
	    }
    }
	    else
	    newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);

Изменено пользователем masone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то что вы написали бред)

без использования Rnd тупо и не будет так работать

Большое спасибо!!!

Изменено пользователем Dreanilamaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 if (Config.SPAWN_CHAR)
 {
	 int _Rnd = Rnd.get(100);
	 if (_Rnd < 20)
	 {
		 newChar.setXYZInvisible(Config.SPAWN_X, Config.SPAWN_Y, Config.SPAWN_Z);
	 }
	 else if (_Rnd < 30)
	 {
		 newChar.setXYZInvisible(Config.SPAWN2_X, Config.SPAWN2_Y, Config.SPAWN2_Z);
	 }
	 else if (_Rnd < 40)
	 {
		 newChar.setXYZInvisible(Config.SPAWN3_X, Config.SPAWN3_Y, Config.SPAWN3_Z);
	 }
	 else if (_Rnd < 60)
	 {
		 newChar.setXYZInvisible(Config.SPAWN4_X, Config.SPAWN4_Y, Config.SPAWN4_Z);
	 }
	 else if (_Rnd < 80)
	 {
		 newChar.setXYZInvisible(Config.SPAWN5_X, Config.SPAWN5_Y, Config.SPAWN5_Z);
	 }
 }
	 else
	 newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);

 

При попытке компиляции, выдает вот что:

compile:
[javac] Compiling 719 source files to C:\l2jfrozen\gameserver\build\classes
[javac] warning: [options] bootstrap class path not set in conjunction with
-source 1.6
[javac] C:\l2jfrozen\gameserver\head-src\com\l2jfrozen\gameserver\network\cl
ientpackets\CharacterCreate.java:216: error: cannot find symbol
[javac]			 int _Rnd = Rnd.get(100);
[javac]					 ^
[javac] symbol: variable Rnd
[javac] location: class CharacterCreate
[javac] 1 error
[javac] 1 warning
BUILD FAILED
C:\l2jfrozen\gameserver\build.xml:65: Compile failed; see the compiler error out
put for details.

 

Где смотреть? :help:

Изменено пользователем Dreanilamaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Импорт то для Rnd добавил?

спасибо, да, дело в импорте и было. Не к тому util путь указал по слепоте.

Все работает, идеально!

 

Я правильно понимаю в коде Rnd, что сначала рандомно создается какое-то значение, и дальше если оно меньше значения сгенерированного то используется определенные варианты?:

int _Rnd = Rnd.get(100);
				    if (_Rnd < 20)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задаем случайное значение в пределах 100, и потом перебираем,

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, да, дело в импорте и было. Не к тому util путь указал по слепоте.

Все работает, идеально!

 

Я правильно понимаю в коде Rnd, что сначала рандомно создается какое-то значение, и дальше если оно меньше значения сгенерированного то используется определенные варианты?:

int _Rnd = Rnd.get(100);
				 if (_Rnd < 20)

Правильно, вот только граней не вижу от и до.

Да и текста очень много в том варианте.

Изменено пользователем AlexMan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно и попроще расписать

if (Config.SPAWN_CHAR)
{
   switch (Rnd.get(5))
   {
       case 0:
           newChar.setXYZInvisible(Config.SPAWN_X, Config.SPAWN_Y, Config.SPAWN_Z);
           break;

       case 1:
           newChar.setXYZInvisible(Config.SPAWN2_X, Config.SPAWN2_Y, Config.SPAWN2_Z);
           break;

       case 2:
           newChar.setXYZInvisible(Config.SPAWN3_X, Config.SPAWN3_Y, Config.SPAWN3_Z);
           break;

       case 3:
           newChar.setXYZInvisible(Config.SPAWN4_X, Config.SPAWN4_Y, Config.SPAWN4_Z);
           break;

       case 4:
           newChar.setXYZInvisible(Config.SPAWN5_X, Config.SPAWN5_Y, Config.SPAWN5_Z);
           break;
   }
}
else
   newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);

З.Ы. Но вобще это извращение - для каждой точки спавна заводить новые параметры в конфиге. лучше уж хранить это в одном параметре, в виде массива строк координат и разбирать это дело при загрузке на отдельные координаты.

Изменено пользователем Gaikotsu
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно и попроще расписать

if (Config.SPAWN_CHAR)
{
switch (Rnd.get(5))
{
case 0:
newChar.setXYZInvisible(Config.SPAWN_X, Config.SPAWN_Y, Config.SPAWN_Z);
break;

case 1:
newChar.setXYZInvisible(Config.SPAWN2_X, Config.SPAWN2_Y, Config.SPAWN2_Z);
break;

case 2:
newChar.setXYZInvisible(Config.SPAWN3_X, Config.SPAWN3_Y, Config.SPAWN3_Z);
break;

case 3:
newChar.setXYZInvisible(Config.SPAWN4_X, Config.SPAWN4_Y, Config.SPAWN4_Z);
break;

case 4:
newChar.setXYZInvisible(Config.SPAWN5_X, Config.SPAWN5_Y, Config.SPAWN5_Z);
break;
}
}
else
newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);

З.Ы. Но вобще это извращение - для каждой точки спавна заводить новые параметры в конфиге. лучше уж хранить это в одном параметре, в виде массива строк координат и разбирать это дело при загрузке на отдельные координаты.

А подскажите чутку поподробнее, про массив, параметры и тд. Может конкретный пример реализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

самый примитивный вариант:

 

в нужном конфиге добавляем переменную SpawnCoords с содержимым вида

SpawnCoords = x1,y1,z1;x2,y2,z2; ... ;xN,yN,zN

 

далее в Config.java:

   public static ArrayList<Location> SPAWN_COORDS = new ArrayList<Location>();

   ...

       String str = settings.getProperty("SpawnCoords", "");

       if (!str.isEmpty())
       {
           String[] spawnCoordsList = str.split(";");

           for (String spawnCoords : spawnCoordsList)
           {
               try
               {
                   Location loc = Location.parseLoc(spawnCoords);
                   SPAWN_COORDS.add(loc);
               }
               catch (Exception e)
               {}
           }
       }

 

ну и в итоге сам выбор координат превращается в чето-то типа такого

   if (!Config.SPAWN_COORDS.isEmpty())
   {
       Location loc = Config.SPAWN_COORDS.get(Rnd.get(Config.SPAWN_COORDS.size()));
       newChar.setXYZInvisible(loc.getX(), loc.getY(), loc.getZ());
   }
   else
       newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

самый примитивный вариант:

 

в нужном конфиге добавляем переменную SpawnCoords с содержимым вида

SpawnCoords = x1,y1,z1;x2,y2,z2; ... ;xN,yN,zN

 

далее в Config.java:

public static ArrayList<Location> SPAWN_COORDS = new ArrayList<Location>();

...

String str = settings.getProperty("SpawnCoords", "");

if (!str.isEmpty())
{
String[] spawnCoordsList = str.split(";");

for (String spawnCoords : spawnCoordsList)
{
try
{
Location loc = Location.parseLoc(spawnCoords);
SPAWN_COORDS.add(loc);
}
catch (Exception e)
{}
}
}

 

ну и в итоге сам выбор координат превращается в чето-то типа такого

if (!Config.SPAWN_COORDS.isEmpty())
{
Location loc = Config.SPAWN_COORDS.get(Rnd.get(Config.SPAWN_COORDS.size()));
newChar.setXYZInvisible(loc.getX(), loc.getY(), loc.getZ());
}
else
newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);

Выглядит реально удобнее, спасибо большое!

 

А в самом конфиге "SpawnCoords = x1,y1,z1;x2,y2,z2; ... ;xN,yN,zN" - координаты просто цифрами через запятую. а последующие точки спауна через точку с запятой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...