Дата: 12.12.2012, Среда, 14:14:51 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 163
И так многим интересно как сделать так чтобы где игрок вышел из игры,там же при входе он и появится. На эту тему я решил поискать немного информации,нашёл не плохой урок,от Extazy. Смотрите.
И так первое что вам нужно добавить 3 переменных которые будут записываться в аккаунт пользователя. (!)Если у вас нет регистрации,ничего не выйдет! (!)Этот мануал написан для ГФ модов,но оптимизировать можно под что угодно,главное чтобы была регистрация.
И так находим конструкцию enum pInfo в своём моде,и в конец добавляем: Code Float:pCordX, Float:pCordY, Float:pCordZ, Далее в OnPlayerRegister добавляем строку: Code format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordX]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordY]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordZ]);fwrite(hFile, var); Поясняю: Тут мы делаем чтобы при создании аккаунта в него добавились нужные нам переменные.
Далее в OnPlayerUpdate добавляем аналогичный код: Code format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordX]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordY]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordZ]);fwrite(hFile, var); Поясняю: Тут мы делаем чтобы переменные записывались в аккаунт
И в OnPlayerLogin добавляем: Code if( strcmp( key , "CordinataX" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordX] = strval( val ); } if( strcmp( key , "CordinataY" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordY] = strval( val ); } if( strcmp( key , "CordinataZ" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordZ] = strval( val ); } Поясняю: Тут мы извлекаем значение переменных из файла
Далее в OnGameModeInit добавляем бесконечный таймер,который будет получать позиции игроков Code SetTimer("SavePlayerPos",1000,1); Далее создадим сам паблик: Code public SavePlayerPos() { new Float:x,Float:y,Float:z; //используем цикл for(new i = 0;i , MAX_PLAYERS;i++) { GetPlayerPos(i,px,py,pz);//Получаем позицию игрока PlayerInfo[i][pCordX] = px;//записываем x PlayerInfo[i][pCordY] = py;//записываем y PlayerInfo[i][pCordZ] = pz;//записываем z } } И не забудьте добавить форвард,в начало кода: Code forward SavePlayerPos(); Ну и наконец при спавне игрока,устанавливаем ему эти координаты. Это ставим в OnPlayerSpawn: Code x = PlayerInfo[i][pCordX]; y = PlayerInfo[i][pCordY]; z = PlayerInfo[i][pCordZ]; SetPlayerPos(playerid, x,y,z);//Установим координаты из переменной SetPlayerFacingAngle(playerid, 360.0); В принципе можно убрать все спавны фракциям,и добавить условия только зарегистрирован или нет,и если нет то ставить другую позицию. Автор: Extazy.
|
Дата: 14.12.2012, Пятница, 16:39:30 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 491
Ну и код...
|
Дата: 15.12.2012, Суббота, 00:45:57 | Сообщение # $NUMBER
Группа: VIP
Сообщений: 1021
psycho-saw, Хороший оптимизированный код. в ем проблема ? -_-
|
Дата: 15.12.2012, Суббота, 11:58:35 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 491
Tailer, нубо-гф код, в чём проблема? Выдрано откуда то вроде..
|
Дата: 15.12.2012, Суббота, 14:10:12 | Сообщение # $NUMBER
Группа: VIP
Сообщений: 1021
psycho-saw, Это превосходный код!
|