Проблема с ДМ ареной
#1

При создании DM-арены появляются ошибки,помогите пожалуйста исправить
Code:
D:\Games\server\server\gamemodes\SFTDM.pwn(1259) : warning 219: local variable "DM" shadows a variable at a preceding level
D:\Games\server\server\gamemodes\SFTDM.pwn(1276) : error 028: invalid subscript (not an array or too many subscripts): "DM"
D:\Games\server\server\gamemodes\SFTDM.pwn(1276) : warning 215: expression has no effect
D:\Games\server\server\gamemodes\SFTDM.pwn(1276) : error 001: expected token: ";", but found "]"
D:\Games\server\server\gamemodes\SFTDM.pwn(1276) : error 029: invalid expression, assumed zero
D:\Games\server\server\gamemodes\SFTDM.pwn(1276) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


4 Errors.
Reply
#2

Код в студию, экстрасенсов нет.
Reply
#3

Тут и без кода монятно, что переменную DM, которую ты вводишь, надо назвать по-другому.
Reply
#4

Вот код
Code:
if (strcmp(cmdtext, "/дм", true)==0 || strcmp(cmd, "/dm", true) == 0)
{
DM[playerid] = 1;//установим игроку, что он на ДМ
SetPlayerVirtualWorld(playerid,1);//установим вирт. мир
SetPlayerInterior(playerid,0);//установим 0 инт. (улица)
ResetPlayerWeapons(playerid);//отними все оружие
GivePlayerWeapon(playerid, 24, 100);//дадим дигл
SetPlayerHealth(playerid,100);//установим 100 хп
SendClientMessage(playerid, -1, "Чтобы выйти из ДМ пропишите: /выход.");//выдадим сообщение
switch(random(2))//2 рандомных телепорта на ДМ.
{
case 0: SetPlayerPos(playerid,2571.4932,2824.8291,10.8203);//1 позиция
case 1: SetPlayerPos(playerid,2604.3994,2828.9465,10.8203);//2 позиция
}
return 1;
}
if (strcmp(cmdtext, "/выход", true)==0 || strcmp(cmd, "/exit", true) == 0)
{
if (DM == 1)//если переменная ДМ = вирт. миру игрока то:
{
DM = GetPlayerVirtualWorld(playerid);//приравняем переменную DM к вирт. миру игрока (его мы установили при тп. на ДМ)
DM[playerid] = 0;//сними условие нахождения игрока на ДМ
SpawnPlayer(playerid);//заспавним игрока
SetPlayerVirtualWorld(playerid,0);//установим 0 вирт. мир [!] обязательно!
GivePlayerWeapon(playerid, 1, 10);//
GivePlayerWeapon(playerid, 2, 20);//Дадим игроку пушки
GivePlayerWeapon(playerid, 3, 30);//
SetPlayerHealth(playerid,100);//Дадим хп.
}
if (DM == 0)return SendClientMessage(playerid,-1,"Вы не на ДМ.");//но если переменная DM не равна виртуальному миру игрок, то выдадим сообщение.
return 1;
}
Reply
#5

PHP Code:
DM[playerid] = 1;//установим игроку, что он на ДМ 
if (DM == 1)//если переменная ДМ = вирт. миру игрока то: 
косяк
Reply
#6

когда удаляю получается "Unknown"
Reply
#7

new DM[MAX_PLAYERS]; замени на:
pawn Code:
new DM1[MAX_PLAYERS];
и используй DM1[playerid] вместо DM[playerid].
Reply
#8

Code:
D:\Games\server\server\gamemodes\SFTDM.pwn(1477) : warning 209: function "OnPlayerSpawn" should return a value
D:\Games\server\server\gamemodes\SFTDM.pwn(1478) : error 010: invalid function or declaration
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Error.
Ошибки тут:
Code:
if(DM1[playerid] == 1) return OnPlayerCommandText(playerid,"/дм");//если переменная DM=1 то вернем игрока на дм зону.
}
return 1;
}
Reply
#9

кинь код, покажи строки 1477 и 1478. в OnPlayerSpawn return походу не правильно поставлен.
Reply
#10

все у меня получилось исправить ошибку,всем спасибо.
Reply
#11

Помогите мне с Дм ареной =)
Дело вот в чем,когда игрок телепортируется да дм,то он оттуда не может выйти ему пишет что "Вы не на ДМ"
Как сделать чтобы при использовании команды "/Выход" игрок спавнился
Code:
if (strcmp(cmdtext, "/дм", true)==0 || strcmp(cmd, "/dm", true) == 0)
{
DM1[playerid] = 1;//установим игроку, что он на ДМ
SetPlayerVirtualWorld(playerid,1);//установим вирт. мир
SetPlayerInterior(playerid,0);//установим 0 инт. (улица)
ResetPlayerWeapons(playerid);//отними все оружие
GivePlayerWeapon(playerid, 24, 300);//дадим дигл
GivePlayerWeapon(playerid, 25, 100);//дадим дигл
SetPlayerHealth(playerid,100);//установим 100 хп
SendClientMessage(playerid, -1, "Чтобы выйти из ДМ пропишите: /выход.");//выдадим сообщение
switch(random(2))//2 рандомных телепорта на ДМ.
{
case 0: SetPlayerPos(playerid,2571.4932,2824.8291,10.8203);//1 позиция
case 1: SetPlayerPos(playerid,2604.3994,2828.9465,10.8203);//2 позиция
}
return 1;
}
if (strcmp(cmdtext, "/выход", true)==0 || strcmp(cmd, "/exit", true) == 0)
{
if (DM == 1)//если переменная ДМ = вирт. миру игрока то:
{
DM = GetPlayerVirtualWorld(playerid);//приравняем переменную DM к вирт. миру игрока (его мы установили при тп. на ДМ)
DM1[playerid] = 1;//сними условие нахождения игрока на ДМ
SpawnPlayer(playerid);//заспавним игрока
SetPlayerVirtualWorld(playerid,0);//установим 0 вирт. мир [!] обязательно!
GivePlayerWeapon(playerid, 1, 10);//
GivePlayerWeapon(playerid, 2, 20);//Дадим игроку пушки
GivePlayerWeapon(playerid, 3, 30);//
SetPlayerHealth(playerid,100);//Дадим хп.
}
if (DM == 0)return SendClientMessage(playerid,-1,"Вы не на ДМ.");//но если переменная DM не равна виртуальному миру игрок, то выдадим сообщение.
return 1;
}
Reply
#12

pawn Code:
if (strcmp(cmdtext, "/выход", true)==0 || strcmp(cmd, "/exit", true) == 0)
{
if (DM == 1)//если переменная ДМ = вирт. миру игрока то:
{
DM = GetPlayerVirtualWorld(playerid);//приравняем переменную DM к вирт. миру игрока (его мы установили при тп. на ДМ)
DM1[playerid] = 1;//сними условие нахождения игрока на ДМ
SpawnPlayer(playerid);//заспавним игрока
SetPlayerVirtualWorld(playerid,0);//установим 0 вирт. мир [!] обязательно!
GivePlayerWeapon(playerid, 1, 10);//
GivePlayerWeapon(playerid, 2, 20);//Дадим игроку пушки
GivePlayerWeapon(playerid, 3, 30);//
SetPlayerHealth(playerid,100);//Дадим хп.
}
if (DM1[playerid] == 0)return SendClientMessage(playerid,-1,"Вы не на ДМ.");//но если переменная DM не равна виртуальному миру игрок, то выдадим сообщение.
return 1;
}
Reply
#13

White_116,нет.seeeca,не помогло =(
Reply
#14

Вообщем так вот:
pawn Code:
if (strcmp(cmdtext, "/дм", true)==0 || strcmp(cmd, "/dm", true) == 0)
{
    SetPVarInt(playerid, "DMStatus", 1);
    SetPlayerVirtualWorld(playerid,1);//установим вирт. мир
    SetPlayerInterior(playerid,0);//установим 0 инт. (улица)
    ResetPlayerWeapons(playerid);//отними все оружие
    GivePlayerWeapon(playerid, 24, 300);//дадим дигл
    GivePlayerWeapon(playerid, 25, 100);//дадим дигл
    SetPlayerHealth(playerid,100);//установим 100 хп
    SendClientMessage(playerid, -1, "Чтобы выйти из ДМ пропишите: /выход.");//выдадим сообщение
    switch(random(2))//2 рандомных телепорта на ДМ.
    {
        case 0: SetPlayerPos(playerid,2571.4932,2824.8291,10.8203);//1 позиция
        case 1: SetPlayerPos(playerid,2604.3994,2828.9465,10.8203);//2 позиция
    }
    return 1;
}
if (strcmp(cmdtext, "/выход", true)==0 || strcmp(cmd, "/exit", true) == 0)
{
    if (GetPVarInt(playerid, "DMStatus") != 1) return SendClientMessage(playerid,-1,"Вы не на ДМ.");//но если переменная DM не равна виртуальному миру игрок, то выдадим сообщение.
    SetPlayerVirtualWorld(playerid,0);//установим 0 вирт. мир [!] обязательно!
    GivePlayerWeapon(playerid, 1, 10);//
    GivePlayerWeapon(playerid, 2, 20);//Дадим игроку пушки
    GivePlayerWeapon(playerid, 3, 30);//
    SetPlayerHealth(playerid,100);//Дадим хп.
    SetPVarInt(playerid, "DMStatus", 0);
    SpawnPlayer(playerid);//заспавним игрока
    return 1;
}
Reply
#15

Quote:
Originally Posted by seeeca
View Post
Вообщем так вот:
pawn Code:
if (strcmp(cmdtext, "/дм", true)==0 || strcmp(cmd, "/dm", true) == 0)
{
    SetPVarInt(playerid, "DMStatus", 1);
    SetPlayerVirtualWorld(playerid,1);//установим вирт. мир
    SetPlayerInterior(playerid,0);//установим 0 инт. (улица)
    ResetPlayerWeapons(playerid);//отними все оружие
    GivePlayerWeapon(playerid, 24, 300);//дадим дигл
    GivePlayerWeapon(playerid, 25, 100);//дадим дигл
    SetPlayerHealth(playerid,100);//установим 100 хп
    SendClientMessage(playerid, -1, "Чтобы выйти из ДМ пропишите: /выход.");//выдадим сообщение
    switch(random(2))//2 рандомных телепорта на ДМ.
    {
        case 0: SetPlayerPos(playerid,2571.4932,2824.8291,10.8203);//1 позиция
        case 1: SetPlayerPos(playerid,2604.3994,2828.9465,10.8203);//2 позиция
    }
    return 1;
}
if (strcmp(cmdtext, "/выход", true)==0 || strcmp(cmd, "/exit", true) == 0)
{
    if (GetPVarInt(playerid, "DMStatus") != 1) return SendClientMessage(playerid,-1,"Вы не на ДМ.");//но если переменная DM не равна виртуальному миру игрок, то выдадим сообщение.
    SetPlayerVirtualWorld(playerid,0);//установим 0 вирт. мир [!] обязательно!
    GivePlayerWeapon(playerid, 1, 10);//
    GivePlayerWeapon(playerid, 2, 20);//Дадим игроку пушки
    GivePlayerWeapon(playerid, 3, 30);//
    SetPlayerHealth(playerid,100);//Дадим хп.
    SetPVarInt(playerid, "DMStatus", 0);
    return 1;
}
Заспавнить забыл. А так все должно работать.
Reply
#16

Mr.Merlin спасибо, дописал (:
Reply
#17

Спасибо,вот еще проблемка,если игроку снесут хп он опять использует /дм,и хп восстановятся,как сделать чтобы он не смог использовать команды вообще на ДМ арене?
Reply
#18

pawn Code:
if (strcmp(cmdtext, "/дм", true)==0 || strcmp(cmd, "/dm", true) == 0)
{
    if (GetPVarInt(playerid, "DMStatus") == 1) return SendClientMessage(playerid,-1,"Вы уже на ДМ, ок.");
    SetPVarInt(playerid, "DMStatus", 1);
    SetPlayerVirtualWorld(playerid,1);//установим вирт. мир
    SetPlayerInterior(playerid,0);//установим 0 инт. (улица)
    ResetPlayerWeapons(playerid);//отними все оружие
    GivePlayerWeapon(playerid, 24, 300);//дадим дигл
    GivePlayerWeapon(playerid, 25, 100);//дадим дигл
    SetPlayerHealth(playerid,100);//установим 100 хп
    SendClientMessage(playerid, -1, "Чтобы выйти из ДМ пропишите: /выход.");//выдадим сообщение
    switch(random(2))//2 рандомных телепорта на ДМ.
    {
        case 0: SetPlayerPos(playerid,2571.4932,2824.8291,10.8203);//1 позиция
        case 1: SetPlayerPos(playerid,2604.3994,2828.9465,10.8203);//2 позиция
    }
    return 1;
}
Reply
#19

Спасибо.А если две ДМ арены будет или больше,как сделать чтобы,если игрок на ДМ арене то пока он не погибнет,не сможет телепортироваться на другие арены?(или использовать команды вообще)
Reply
#20

Quote:

или использовать команды вообще

Что то типо такого в OnPlayerCommandText:
pawn Code:
if(GetPVarInt(playerid, "DMStatus") == 1) return false;
------------------------
А по сути лучше записывать ид зоны в ПВар, а далее уже сравнивать...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)