12.02.2011, 10:51
the problem is:
this the code:
Код:
C:\Documents and Settings\вм дммй\щемзп дтбегд\Drag sys.pwn(146) : error 021: symbol already defined: "strtok" C:\Documents and Settings\вм дммй\щемзп дтбегд\Drag sys.pwn(161) : error 047: array sizes do not match, or destination array is too small
Код:
#include <a_samp>
#include <dutils>
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GRAD2 0xBFC0C2FF
#define COLOR_RED 0xAA3333AA
#define COLOR_NICEBLUE 0x25affeAA
#pragma unused ret_memcpy
new DragTimer[MAX_PLAYERS];
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new tmp[256];
new string[256];
new giveplayerid, idx;
new sendername[MAX_PLAYER_NAME];
new playername[MAX_PLAYER_NAME];
cmd = strtok(cmdtext, idx);
if (strcmp(cmd, "/drag", true) == 0)
{
tmp = strtok(cmdtext, idx);
giveplayerid = strval(tmp);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /drag [playerid]");
return 1;
}
if(!IsPlayerConnected(giveplayerid))
{
format(string, sizeof(string), "%d is not an active player.", giveplayerid);
SendClientMessage(playerid,COLOR_GREY, string);
return 1;
}
if(GetDistanceBetweenPlayers(playerid,giveplayerid) > 3)
{
SendClientMessage(playerid, 0xFF0000AA, "You are too far away from that player.");
return 1;
}
if(giveplayerid == playerid)
{
SendClientMessage(playerid, COLOR_RED, "You cannot drag yourself!");
return 1;
}
if(DragTimer[playerid] <= 0)
{
if(IsPlayerConnected(giveplayerid) == 1)
{
GetPlayerName(giveplayerid, sendername, sizeof(sendername));
GetPlayerName(playerid, playername, sizeof(playername));
format(string, sizeof(string), "%s catches %s's shirt and drags him with him", playername, sendername);
ProxDetector(30.0, playerid, string, COLOR_NICEBLUE,COLOR_NICEBLUE,COLOR_NICEBLUE,COLOR_NICEBLUE,COLOR_NICEBLUE);
DragTimer[playerid] = SetTimerEx("Drag", 1000, 1, "ii", giveplayerid, playerid);
return 1;
}
}
return 1;
}
if (strcmp(cmd, "/leave", true) == 0)
{
if(DragTimer[playerid] >= 0)
{
KillTimer(DragTimer[playerid]);
DragTimer[playerid] = 0;
GetPlayerName(giveplayerid, sendername, sizeof(sendername));
GetPlayerName(playerid, playername, sizeof(playername));
format(string, sizeof(string), "%s leaves %s shirt", playername, sendername);
ProxDetector(30.0, playerid, string, COLOR_NICEBLUE,COLOR_NICEBLUE,COLOR_NICEBLUE,COLOR_NICEBLUE,COLOR_NICEBLUE);
return 1;
}
return 1;
}
return 0;
}
forward Drag(giveplayerid, playerid);
public Drag(giveplayerid, playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(giveplayerid, x, y - 1, z);
SetPlayerInterior(GetPlayerInterior(giveplayerid),playerid);
if(IsPlayerInAnyVehicle(playerid))
{
new newcar = GetPlayerVehicleID(playerid);
PutPlayerInVehicle(giveplayerid, newcar, 1);
}
}
forward Float:GetDistanceBetweenPlayers(p1,p2);
public Float:GetDistanceBetweenPlayers(p1,p2)
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
{
return -1.00;
}
GetPlayerPos(p1,x1,y1,z1);
GetPlayerPos(p2,x2,y2,z2);
return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}
forward ProxDetector(Float:radi, playerid, ms[],col1,col2,col3,col4,col5);
public ProxDetector(Float:radi, playerid, ms[],col1,col2,col3,col4,col5)
{
if(IsPlayerConnected(playerid))
{
new Float:posx, Float:posy, Float:posz;
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && (GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)))
{
GetPlayerPos(i, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
{
SendClientMessage(i, col1, ms);
}
else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
{
SendClientMessage(i, col2, ms);
}
else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
{
SendClientMessage(i, col3, ms);
}
else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
{
SendClientMessage(i, col4, ms);
}
else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
SendClientMessage(i, col5, ms);
}
}
else
{
SendClientMessage(i, col1, ms);
}
}
}
return 1;
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}

