SAMP에서 모드 구현할 때 유용한 함수, 자주 쓰이는 함수를 모아보았습니다.
요즘 버전에서는 API가 어떻게 변경됐는지 모르겠지만 아마 모든 버전에서 사용 가능할겁니다.
맨 아래 FTF(Face To Face) 함수는 여러가지 상황에서 가능합니다.
거래, 하이파이브 애니메이션, 악수 등 다양한 상황에 적용하시면 됩니다.
기타 함수들도 제가 모드 구현하면서 많이 사용했던 함수들입니다.
쭉 보시고 자주 사용할 것 같은 코드는 가져다놓으셨다가 필요할 때 불러 쓰시면 될 것 같네요.
1. 플레이어의 이름을 구하는 함수
stock PlayerName(playerid) {
new name[24];
GetPlayerName(playerid, name, 24);
return name;
}
2. 플레이어의 체력을 구하는 함수
stock Float:PlayerHealth(playerid) {
new Float:pHealth;
GetPlayerHealth(playerid, pHealth);
return pHealth;
}
3. 플레이어의 아머를 구하는 함수
stock Float:PlayerArmour(playerid) {
new Float:pArmour;
GetPlayerArmour(playerid, pArmour);
return pArmour;
}
4. 플레이어의 아이피를 구하는 함수
stock PlayerIP(playerid) {
new ip[16];
GetPlayerIp(playerid, ip, 16);
return ip;
}
5. 플레이어의 무기를 회수하는 함수
stock RemovePlayerWeapon(playerid, weaponid) {
new weapondata[2];
for( new slot; slot < 13; slot++ ) {
GetPlayerWeaponData(playerid, slot, weapondata[0], weapondata[1]);
if( weapondata[0] == weaponid ) {
GivePlayerWeapon(playerid, weaponid, -weapondata[1]);
break;
}
}
}
6. 플레이어가 입력받은 최소xy,최대xy 지역 안에 있는지 검사하는 함수
stock IsPlayerInArea(playerid, Float:min_x, Float:max_x Float:min_y, Float:max_y) {
new Float:pos[3];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
if( pos[0] >= min_x && pos[0] <= max_x && pos[1] >= min_y && pos[1] <= max_y ) return 1;
return 0;
}
7. 플레이어에게 체력을 주는 함수
stock GivePlayerHealth(playerid, Float:amount) {
new Float:pHealth = PlayerHealth(playerid);
if( pHealth+amount <= 100 ) SetPlayerHealth(playerid, pHealth+amount);
else SetPlayerHealth(playerid, 100.0);
}
8. 플레이어에게 아머를 주는 함수
stock GivePlayerArmour(playerid, Float:amount) {
new Float:pArmour = PlayerArmour(playerid);
if( pArmour+amount <= 100 ) SetPlayerArmour(playerid, pArmour+amount);
else SetPlayerArmour(playerid, 100.0);
}
9. 플레이어가 Los Santos 지역에 있는지 검사하는 함수
stock IsPlayerInLosSantos(playerid) {
if( IsPlayerInArea( playerid, 2919.469, 93.423, -782.4177, -2837.724 ) ) return 1;
return 0;
}
10. 플레이어가 San Fierro 지역에 있는지 검사하는 함수
stock IsPlayerInSanFierro(playerid) {
if( IsPlayerInArea( playerid, -1074.365, -2931.147, 1448.057, -1237.855 ) ) return 1;
return 0;
}
11. 플레이어가 Las Venturas 지역에 있는지 검사하는 함수
stock IsPlayerInLasVenturas(playerid) {
if( IsPlayerInArea( playerid, 2954.502, 782.4177, 2931.147, 595.5717 ) ) return 1;
return 0;
}
12. 플레이어와 같은 팀원에게만 메시지를 보내는 함수
stock SendTeamMessage(team, color, text[]) {
for( new i; i < GetMaxPlayers(); i++ )
if( IsPlayerConnected( i ) )
if( GetPlayerTeam( i ) == team )
SendClientMessage(i, color, text);
}
13. 플레이어 이름을 판단하는 함수
stock IsPlayerHongGilDong(playerid) {
if( !strcmp( PlayerName(playerid), "HongGilDong", true ) ) return 1;
return 0;
}
14. 원하는 범위 내의 난수를 발생시키는 함수
stock randomex(min, max) {
new randominteger;
do randominteger = random( max )+1;
while( randominteger > max || randominteger < min );
return randominteger;
}
15. 관리자에게 메세지를 보내는 함수
stock SendAdminMessage(color, text[]) {
for( new i; i < GetMaxPlayers(); i++ )
if( IsPlayerConnected( i ) )
if( IsPlayerAdmin( i ) )
SendClientMessage(i, color, text);
}
16. 개행하는 함수
stock ClearChatBox(playerid, line) {
for( new i; i < line; i++ )
SendClientMessage(playerid, 0xFFFFFFFF, " ");
}
17. 플레이어와 대상의 방향을 상호간 정면으로 맞추는 함수
stock FTF(playerid, targetid) {
new Float:angle, Float:misc = 5.0, Float:pos[2][3];
GetPlayerPos(playerid, pos[0][0], pos[0][1], pos[0][2]);
GetPlayerPos(targetid, pos[1][0], pos[1][1], pos[1][2]);
angle = 180.0-atan2(pos[0][0]-pos[1][0], pos[0][1]-pos[1][1], pos[0][2]-pos[1][2]);
angle+=misc;
misc*=-1;
SetPlayerFacingAngle(playerid, angle+misc);
}
'프로그래밍 > Pawn' 카테고리의 다른 글
[PAWN/SAMP] 무기핵 방지 스크립트 (2) | 2012.11.19 |
---|---|
[PAWN/SAMP] 총기의 이름을 구하는 함수 (2) | 2012.11.19 |
[PAWN/SAMP] 랭킹 알고리즘 (0) | 2012.11.19 |
[PAWN/SAMP] 사살한 플레이어의 이름을 화면에 표시하기 (0) | 2012.09.17 |
[PAWN/SAMP] 플레이어에게 데미지를 주는 함수 만들기 (0) | 2012.06.06 |